diff options
| author | Mike Pall <mike> | 2012-08-25 22:46:22 +0200 |
|---|---|---|
| committer | Mike Pall <mike> | 2012-08-25 22:46:22 +0200 |
| commit | 653facd0d5c1a4f7eae43eefbf8148f57e28e606 (patch) | |
| tree | 1b3cf80c54682aed023d42c8aa0afe300daeeb81 /src/lib_string.c | |
| parent | 52ca2cc8ba9dbab67cdf70a991a5b2b3ec933773 (diff) | |
| download | luajit-653facd0d5c1a4f7eae43eefbf8148f57e28e606.tar.gz luajit-653facd0d5c1a4f7eae43eefbf8148f57e28e606.tar.bz2 luajit-653facd0d5c1a4f7eae43eefbf8148f57e28e606.zip | |
Add support for '%a' and '%A' to string.format.
Diffstat (limited to 'src/lib_string.c')
| -rw-r--r-- | src/lib_string.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/src/lib_string.c b/src/lib_string.c index 3dac9d37..89ec4f25 100644 --- a/src/lib_string.c +++ b/src/lib_string.c | |||
| @@ -780,20 +780,20 @@ LJLIB_CF(string_format) | |||
| 780 | addintlen(form); | 780 | addintlen(form); |
| 781 | sprintf(buff, form, num2uintfrm(L, arg)); | 781 | sprintf(buff, form, num2uintfrm(L, arg)); |
| 782 | break; | 782 | break; |
| 783 | case 'e': case 'E': case 'f': case 'g': case 'G': { | 783 | case 'e': case 'E': case 'f': case 'g': case 'G': case 'a': case 'A': { |
| 784 | TValue tv; | 784 | TValue tv; |
| 785 | tv.n = lj_lib_checknum(L, arg); | 785 | tv.n = lj_lib_checknum(L, arg); |
| 786 | if (LJ_UNLIKELY((tv.u32.hi << 1) >= 0xffe00000)) { | 786 | if (LJ_UNLIKELY((tv.u32.hi << 1) >= 0xffe00000)) { |
| 787 | /* Canonicalize output of non-finite values. */ | 787 | /* Canonicalize output of non-finite values. */ |
| 788 | char *p, nbuf[LJ_STR_NUMBUF]; | 788 | char *p, nbuf[LJ_STR_NUMBUF]; |
| 789 | size_t len = lj_str_bufnum(nbuf, &tv); | 789 | size_t len = lj_str_bufnum(nbuf, &tv); |
| 790 | if (strfrmt[-1] == 'E' || strfrmt[-1] == 'G') { | 790 | if (strfrmt[-1] < 'a') { |
| 791 | nbuf[len-3] = nbuf[len-3] - 0x20; | 791 | nbuf[len-3] = nbuf[len-3] - 0x20; |
| 792 | nbuf[len-2] = nbuf[len-2] - 0x20; | 792 | nbuf[len-2] = nbuf[len-2] - 0x20; |
| 793 | nbuf[len-1] = nbuf[len-1] - 0x20; | 793 | nbuf[len-1] = nbuf[len-1] - 0x20; |
| 794 | } | 794 | } |
| 795 | nbuf[len] = '\0'; | 795 | nbuf[len] = '\0'; |
| 796 | for (p = form; *p < 'e' && *p != '.'; p++) ; | 796 | for (p = form; *p < 'A' && *p != '.'; p++) ; |
| 797 | *p++ = 's'; *p = '\0'; | 797 | *p++ = 's'; *p = '\0'; |
| 798 | sprintf(buff, form, nbuf); | 798 | sprintf(buff, form, nbuf); |
| 799 | break; | 799 | break; |
