remove quotes around strings added if/else,==,!=
[swftools.git] / lib / as3 / tokenizer.lex
index dcae2f2..1be891f 100644 (file)
@@ -116,6 +116,22 @@ void handleInclude(char*text, int len, char quotes)
     //BEGIN(INITIAL); keep context
 }
 
+static void handleString(char*s, int len)
+{
+    if(s[0]=='"') {
+        if(s[len-1]!='"') syntaxerror("String doesn't end with '\"'");
+        s++;len-=2;
+    }
+    else if(s[0]=='\'') {
+        if(s[len-1]!='\'') syntaxerror("String doesn't end with '\"'");
+        s++;len-=2;
+    }
+    else syntaxerror("String incorrectly terminated");
+    s[len] = 0;
+    avm2_lval.string = s;
+}
+
+
 char start_of_expression;
 
 static inline int m(int type)
@@ -223,7 +239,7 @@ REGEXP   [/]([^/\n]|\\[/])*[/][a-zA-Z]*
 
 ^include{S}+{STRING}{S}*/\n    {c();handleInclude(yytext, yyleng, 1);}
 ^include{S}+[^" \t\r\n][\x20-\xff]*{S}*/\n    {c();handleInclude(yytext, yyleng, 0);}
-{STRING}                     {c(); BEGIN(INITIAL);return m(T_STRING);}
+{STRING}                     {c(); BEGIN(INITIAL);handleString(yytext, yyleng);return T_STRING;}
 
 <BEGINNING,REGEXPOK>{
 {REGEXP}                     {c(); BEGIN(INITIAL);return m(T_REGEXP);} 
@@ -234,11 +250,12 @@ REGEXP   [/]([^/\n]|\\[/])*[/][a-zA-Z]*
 
 {NUMBER}                     {c(); BEGIN(INITIAL);return handlenumber();}
 
+[!][=]                       {BEGIN(REGEXPOK);return m(T_NE);}
+[=][=]                       {BEGIN(REGEXPOK);return m(T_EQEQ);}
 [>][=]                       {return m(T_GE);}
 [<][=]                       {return m(T_LE);}
 [-][-]                       {BEGIN(INITIAL);return m(T_MINUSMINUS);}
 [+][+]                       {BEGIN(INITIAL);return m(T_PLUSPLUS);}
-==                           {BEGIN(REGEXPOK);return m(T_EQEQ);}
 \.\.                         {return m(T_DOTDOT);}
 \.                           {return m('.');}
 ::                           {return m(T_COLONCOLON);}
@@ -263,10 +280,11 @@ Number                       {return m(KW_NUMBER);}
 class                        {return m(KW_CLASS);}
 const                        {return m(KW_CONST);}
 final                        {return m(KW_FINAL);}
-False                        {return m(KW_FALSE);}
-True                         {return m(KW_TRUE);}
+false                        {return m(KW_FALSE);}
+true                         {return m(KW_TRUE);}
 uint                         {return m(KW_UINT);}
 null                         {return m(KW_NULL);}
+else                         {return m(KW_ELSE);}
 use                          {return m(KW_USE);}
 int                          {return m(KW_INT);}
 new                          {return m(KW_NEW);}
@@ -275,6 +293,7 @@ for                          {return m(KW_FOR);}
 set                          {return m(KW_SET);}
 var                          {return m(KW_VAR);}
 is                           {return m(KW_IS) ;}
+if                           {return m(KW_IF) ;}
 as                           {return m(KW_AS);}
 {NAME}                       {c();BEGIN(INITIAL);return m(T_IDENTIFIER);}
 
@@ -357,6 +376,7 @@ char*token2string(token_t*t)
     else if(nr==KW_TRUE)       return "True";
     else if(nr==KW_UINT)       return "uint";
     else if(nr==KW_NULL)       return "null";
+    else if(nr==KW_ELSE)       return "else";
     else if(nr==KW_USE)        return "use";
     else if(nr==KW_INT)        return "int";
     else if(nr==KW_NEW)        return "new";