X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fas3%2Ftokenizer.lex;h=012602eb98ca3c03ca171053993723bdab6ffbf0;hb=dd5f16e46f47e5833d68c75ecde8f33e0d1997fd;hp=f253b1bbb8556535f28fd722c94b06696339674d;hpb=c873335ba84fe69cb4a1183326c9cfef160509e2;p=swftools.git diff --git a/lib/as3/tokenizer.lex b/lib/as3/tokenizer.lex index f253b1b..012602e 100644 --- a/lib/as3/tokenizer.lex +++ b/lib/as3/tokenizer.lex @@ -28,53 +28,12 @@ #include #include #include "../utf8.h" +#include "common.h" #include "tokenizer.h" #include "files.h" -int as3_pass = 0; -int as3_verbosity = 1; unsigned int as3_tokencount = 0; -void as3_error(const char*format, ...) -{ - char buf[1024]; - int l; - va_list arglist; - if(as3_verbosity<0) - exit(1); - va_start(arglist, format); - vsprintf(buf, format, arglist); - va_end(arglist); - fprintf(stderr, "%s:%d:%d: error: %s\n", current_filename_short, current_line, current_column, buf); - fflush(stderr); - exit(1); -} -void as3_warning(const char*format, ...) -{ - char buf[1024]; - int l; - va_list arglist; - if(as3_verbosity<1) - return; - va_start(arglist, format); - vsprintf(buf, format, arglist); - va_end(arglist); - fprintf(stderr, "%s:%d:%d: warning: %s\n", current_filename_short, current_line, current_column, buf); - fflush(stderr); -} -void as3_softwarning(const char*format, ...) -{ - char buf[1024]; - int l; - va_list arglist; - if(as3_verbosity<2) - return; - va_start(arglist, format); - vsprintf(buf, format, arglist); - va_end(arglist); - fprintf(stderr, "%s:%d:%d: warning: %s\n", current_filename_short, current_line, current_column, buf); - fflush(stderr); -} static void dbg(const char*format, ...) { char buf[1024]; @@ -156,7 +115,7 @@ void handleInclude(char*text, int len, char quotes) filename = strdup(&text[i1]); } - char*fullfilename = find_file(filename); + char*fullfilename = find_file(filename, 1); enter_file2(filename, fullfilename, YY_CURRENT_BUFFER); yyin = fopen(fullfilename, "rb"); if (!yyin) { @@ -259,8 +218,15 @@ static int do_unescape(const char*s, const char*end, char*n) } break; } - default: - syntaxerror("unknown escape sequence: \"\\%c\"", *s); + default: { + if(o) { + o[len+0] = '\\'; + o[len+1] = *s; + } + s++; + len+=2; + break; + } } } if(o) o[len]=0; @@ -288,12 +254,6 @@ static void handleCData(char*s, int len) static void handleString(char*s, int len) { - if(as3_pass < 2) { - // don't bother decoding strings in pass 1 - memset(&a3_lval, 0, sizeof(a3_lval)); - return; - } - if(s[0]=='"') { if(s[len-1]!='"') syntaxerror("String doesn't end with '\"'"); s++;len-=2; @@ -303,7 +263,6 @@ static void handleString(char*s, int len) s++;len-=2; } else syntaxerror("String incorrectly terminated"); - a3_lval.str = string_unescape(s, len); } @@ -516,14 +475,18 @@ static inline void c() { current_column+=yyleng; } -static trie_t*namespaces = 0; -void tokenizer_register_namespace(const char*id) +trie_t*active_namespaces = 0; +/*void tokenizer_register_namespace(const char*id) { - trie_put(&namespaces, id); + trie_put(namespaces, id, 0); } +void tokenizer_unregister_namespace(const char*id) +{ + trie_remove(namespaces, id); +}*/ static inline tokenizer_is_namespace(const char*id) { - return trie_lookup(namespaces, id); + return trie_contains(active_namespaces, id); } static inline int handleIdentifier() @@ -638,7 +601,7 @@ switch {c();BEGIN(INITIAL);a3_lval.id="";return T_SWITCH;} \.\. {c();BEGIN(REGEXPOK);return m(T_DOTDOT);} \. {c();BEGIN(REGEXPOK);return m('.');} :: {c();BEGIN(REGEXPOK);return m(T_COLONCOLON);} -: {c();BEGIN(INITIAL);return m(':');} +: {c();BEGIN(REGEXPOK);return m(':');} instanceof {c();BEGIN(REGEXPOK);return m(KW_INSTANCEOF);} implements {c();BEGIN(REGEXPOK);return m(KW_IMPLEMENTS);} interface {c();BEGIN(INITIAL);return m(KW_INTERFACE);} @@ -687,7 +650,7 @@ is {c();BEGIN(REGEXPOK);return m(KW_IS) ;} in {c();BEGIN(REGEXPOK);return m(KW_IN) ;} if {c();BEGIN(INITIAL);return m(KW_IF) ;} as {c();BEGIN(REGEXPOK);return m(KW_AS);} -{NAME} {c();BEGIN(INITIAL);return handleIdentifier();} +$?{NAME} {c();BEGIN(INITIAL);return handleIdentifier();} [\]\}*] {c();BEGIN(INITIAL);return m(yytext[0]);} [+-\/^~@$!%&\(=\[|?:;,<>] {c();BEGIN(REGEXPOK);return m(yytext[0]);}