#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];
return out;
}
+static void handleCData(char*s, int len)
+{
+ a3_lval.str.str = s+9; // <![CDATA[
+ a3_lval.str.len = len-9-3;// ]]>
+}
+
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;
else syntaxerror("String incorrectly terminated");
- avm2_lval.str = string_unescape(s, len);
+ a3_lval.str = string_unescape(s, len);
}
char*s = malloc(yyleng+1);
memcpy(s, yytext, yyleng);
s[yyleng]=0;
- avm2_lval.id = s;
+ a3_lval.id = s;
return type;
}
static inline int m(int type)
{
- avm2_lval.token = type;
+ a3_lval.token = type;
return type;
}
static inline int setint(int v)
{
- avm2_lval.number_int = v;
+ a3_lval.number_int = v;
if(v>-128)
return T_BYTE;
else if(v>=-32768)
}
static inline int setuint(unsigned int v)
{
- avm2_lval.number_uint = v;
+ a3_lval.number_uint = v;
if(v<128)
return T_BYTE;
else if(v<32768)
}
static inline int setfloat(double v)
{
- avm2_lval.number_float = v;
+ a3_lval.number_float = v;
return T_FLOAT;
}
static inline int handlefloat()
{
char*s = nrbuf();
- avm2_lval.number_float = atof(s);
+ a3_lval.number_float = atof(s);
return T_FLOAT;
}
char*s = malloc(t+1);
memcpy(s, yytext, t);
s[t]=0;
- avm2_lval.id = s;
+ a3_lval.id = s;
}
static int handleregexp()
break;
}
}
- avm2_lval.regexp.pattern = s;
+ a3_lval.regexp.pattern = s;
if(t==len) {
- avm2_lval.regexp.options = 0;
+ a3_lval.regexp.options = 0;
} else {
- avm2_lval.regexp.options = s+t+1;
+ a3_lval.regexp.options = s+t+1;
}
return T_REGEXP;
}
INTWITHSIGN [+-]?({INT})
FLOATWITHSIGN [+-]?({FLOAT})
+CDATA <!\[CDATA\[([^]]|\][^]]|\]\][^>])*\]*\]\]\>
STRING ["](\\[\x00-\xff]|[^\\"\n])*["]|['](\\[\x00-\xff]|[^\\'\n])*[']
S [ \n\r\t]
MULTILINE_COMMENT [/][*]+([*][^/]|[^/*]|[^*][/]|[\x00-\x1f])*[*]+[/]
^include{S}+{STRING}{S}*/\n {l();handleInclude(yytext, yyleng, 1);}
^include{S}+[^" \t\r\n][\x20-\xff]*{S}*/\n {l();handleInclude(yytext, yyleng, 0);}
{STRING} {l(); BEGIN(INITIAL);handleString(yytext, yyleng);return T_STRING;}
+{CDATA} {l(); BEGIN(INITIAL);handleCData(yytext, yyleng);return T_STRING;}
<BEGINNING,REGEXPOK>{
{REGEXP} {c(); BEGIN(INITIAL);return handleregexp();}
{HEXWITHSIGN} {c(); BEGIN(INITIAL);return handlehex();}
-{HEXFLOATWITHSIGN} {c(); BEGIN(INITIAL);return handlehexfloat();}
+{HEXFLOATWITHSIGN} {c(); BEGIN(INITIAL);return handlehexfloat();}
{INTWITHSIGN} {c(); BEGIN(INITIAL);return handleint();}
{FLOATWITHSIGN} {c(); BEGIN(INITIAL);return handlefloat();}
}
{NAME}{S}*:{S}*do/{_} {l();handleLabel(yytext, yyleng-2);return T_DO;}
{NAME}{S}*:{S}*while/{_} {l();handleLabel(yytext, yyleng-5);return T_WHILE;}
{NAME}{S}*:{S}*switch/{_} {l();handleLabel(yytext, yyleng-6);return T_SWITCH;}
-for {c();avm2_lval.id="";return T_FOR;}
-do {c();avm2_lval.id="";return T_DO;}
-while {c();avm2_lval.id="";return T_WHILE;}
-switch {c();avm2_lval.id="";return T_SWITCH;}
+for {c();a3_lval.id="";return T_FOR;}
+do {c();a3_lval.id="";return T_DO;}
+while {c();a3_lval.id="";return T_WHILE;}
+switch {c();a3_lval.id="";return T_SWITCH;}
[&][&] {c();BEGIN(REGEXPOK);return m(T_ANDAND);}
[|][|] {c();BEGIN(REGEXPOK);return m(T_OROR);}
[+-\/*^~@$!%&\(=\[\]\{\}|?:;,<>] {c();BEGIN(REGEXPOK);return m(yytext[0]);}
[\)\]] {c();BEGIN(INITIAL);return m(yytext[0]);}
-. {char c1=yytext[0];
+. {/* ERROR */
+ char c1=yytext[0];
char buf[128];
buf[0] = yytext[0];
int t;