# HG changeset patch # User Paulo Pacheco <fooi...@gmail.com> # Date 1495388206 0 # Sun May 21 17:36:46 2017 +0000 # Node ID 22db6b6a3a0eebff8453fb22035628410c05c5c8 # Parent 96fda9957427e1ea78d0096b019a3f3183db7346 [njs] Lexer support for hexadecimal literal values.
diff -r 96fda9957427 -r 22db6b6a3a0e njs/njs_lexer.c --- a/njs/njs_lexer.c Wed Apr 19 17:48:56 2017 +0300 +++ b/njs/njs_lexer.c Sun May 21 17:36:46 2017 +0000 @@ -19,7 +19,7 @@ #include <njs_variable.h> #include <njs_parser.h> #include <string.h> - +#include <stdlib.h> typedef struct njs_lexer_multi_s njs_lexer_multi_t; @@ -539,10 +539,28 @@ { u_char c, *p; double num, frac, scale; + char *endptr; /* TODO: "1e2" */ p = lexer->start; + + /* Hexadecimal literal values */ + if ( (lexer->end - lexer->start) > 2 + && (*p == 'x' || *p == 'X') + && (lexer->prev_token > 0 + || ((lexer->start - 1) == lexer->text.start) + ) + && (*(p-1) == '0')) { + + lexer->number = strtod((const char *) p-1, &endptr); + if ((u_char *) endptr <= lexer->end) { + lexer->start = (u_char *) endptr; + return NJS_TOKEN_NUMBER; + } + lexer->number = 0; + } + c = p[-1]; /* Values below '0' become >= 208. */ diff -r 96fda9957427 -r 22db6b6a3a0e njs/test/njs_unit_test.c --- a/njs/test/njs_unit_test.c Wed Apr 19 17:48:56 2017 +0300 +++ b/njs/test/njs_unit_test.c Sun May 21 17:36:46 2017 +0000 @@ -112,6 +112,18 @@ { nxt_string("+1"), nxt_string("1") }, + { nxt_string("var a = 0x01; a"), + nxt_string("1") }, + + { nxt_string("var x = 0xffff; x"), + nxt_string("65535") }, + + { nxt_string("0x01"), + nxt_string("1") }, + + { nxt_string("0xffff"), + nxt_string("65535") }, + { nxt_string("+1\n"), nxt_string("1") }, ---------------------------------- CUT HERE -------------------------------------- Paulo Pacheco | Паулу Пашеку
_______________________________________________ nginx-devel mailing list nginx-devel@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-devel