X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fas3%2Ftokenizer.lex;h=7752bd524e688a6c4fba10882f4445eea7cbb131;hb=f5d494794ee290c1a0f1dc4d4b2156b04c9a5a97;hp=8a94edbd5f94c9e89c7b563a2277f252e4a74e1c;hpb=98274d31d2a91c0f8a577e6779219e11aaf293bb;p=swftools.git diff --git a/lib/as3/tokenizer.lex b/lib/as3/tokenizer.lex index 8a94edb..7752bd5 100644 --- a/lib/as3/tokenizer.lex +++ b/lib/as3/tokenizer.lex @@ -156,7 +156,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 +259,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 +295,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 +304,6 @@ static void handleString(char*s, int len) s++;len-=2; } else syntaxerror("String incorrectly terminated"); - a3_lval.str = string_unescape(s, len); } @@ -521,6 +521,10 @@ void tokenizer_register_namespace(const char*id) { trie_put(&namespaces, id); } +void tokenizer_unregister_namespace(const char*id) +{ + trie_remove(namespaces, id); +} static inline tokenizer_is_namespace(const char*id) { return trie_lookup(namespaces, id); @@ -638,7 +642,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);}