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 | |
parent | 52ca2cc8ba9dbab67cdf70a991a5b2b3ec933773 (diff) | |
download | luajit-653facd0d5c1a4f7eae43eefbf8148f57e28e606.tar.gz luajit-653facd0d5c1a4f7eae43eefbf8148f57e28e606.tar.bz2 luajit-653facd0d5c1a4f7eae43eefbf8148f57e28e606.zip |
Add support for '%a' and '%A' to string.format.
-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; |