added string unescaping
[swftools.git] / lib / as3 / tokenizer.lex
index 2238ace..6f74483 100644 (file)
@@ -251,22 +251,19 @@ static void handleString(char*s, int len)
 
 char start_of_expression;
 
-static inline int mkid(int type)
+static inline int m(int type)
 {
     char*s = malloc(yyleng+1);
     memcpy(s, yytext, yyleng);
     s[yyleng]=0;
-    avm2_lval.id = s;
-    return type;
-}
 
-static inline int m(int type)
-{
-    avm2_lval.token = type;
+    NEW(token_t,t);
+    t->type = type;
+    t->text = s;
+    avm2_lval.token = t;
     return type;
 }
 
-
 static char numberbuf[64];
 static inline int handlenumber()
 {
@@ -436,7 +433,7 @@ var                          {c();return m(KW_VAR);}
 is                           {c();return m(KW_IS) ;}
 if                           {c();return m(KW_IF) ;}
 as                           {c();return m(KW_AS);}
-{NAME}                       {c();BEGIN(INITIAL);return mkid(T_IDENTIFIER);}
+{NAME}                       {c();BEGIN(INITIAL);return m(T_IDENTIFIER);}
 
 [+-\/*^~@$!%&\(=\[\]\{\}|?:;,.<>] {c();BEGIN(REGEXPOK);return m(yytext[0]);}
 [\)\]]                            {c();BEGIN(INITIAL);return m(yytext[0]);}
@@ -480,8 +477,9 @@ int yywrap()
 }
 
 static char mbuf[256];
-char*token2string(enum yytokentype nr)
+char*token2string(token_t*t)
 {
+    int nr=t->type;
     if(nr==T_STRING)     return "<string>";
     else if(nr==T_INT)     return "<int>";
     else if(nr==T_UINT)     return "<uint>";
@@ -526,8 +524,12 @@ char*token2string(enum yytokentype nr)
     else if(nr==KW_VAR)        return "var";
     else if(nr==KW_IS)         return "is";
     else if(nr==KW_AS)         return "as";
-    else if(nr==T_IDENTIFIER)  return "ID";
-    else {
+    else if(nr==T_IDENTIFIER) {
+        if(strlen(t->text)>sizeof(mbuf)-1)
+            return "ID(...)";
+        sprintf(mbuf, "ID(%s)", t->text);
+        return mbuf;
+    } else {
         sprintf(mbuf, "%d", nr);
         return mbuf;
     }