+ return setuint(v);
+ }
+}
+
+static inline int handlehexfloat()
+{
+ char l = (yytext[0]=='-')+2;
+ double d=0;
+ char dot=0;
+ double base=1;
+ int t;
+ for(t=l;t<yyleng;t++) {
+ char c = yytext[t];
+ if(c=='.') {
+ dot=1;
+ continue;
+ }
+ if(!dot) {
+ d*=16;
+ } else {
+ base*=1/16.0;
+ }
+ if(c>='0' && c<='9')
+ d+=(c&15)*base;
+ else if((c>='a' && c<='f') || (c>='A' && c<='F'))
+ d+=((c&0x0f)+9)*base;
+ }
+ return setfloat(d);
+}
+static inline int handlehex()
+{
+ char l = (yytext[0]=='-')+2;
+ int len = yyleng;
+
+ if(len-l>8) {
+ char*s = nrbuf();
+ syntaxerror("integer overflow %s", s);
+ }
+
+ int t;
+ unsigned int v = 0;
+ for(t=l;t<len;t++) {
+ v<<=4;
+ char c = yytext[t];
+ if(c>='0' && c<='9')
+ v|=(c&15);
+ else if((c>='a' && c<='f') || (c>='A' && c<='F'))
+ v|=(c&0x0f)+9;
+ }
+ if(l && v>1073741824) {
+ char*s = nrbuf();
+ as3_warning("signed integer overflow: %s (converted to Number)", s);
+ return setfloat(v);
+ }
+ if(!l && v>2147483647) {
+ char*s = nrbuf();
+ as3_warning("unsigned integer overflow: %s (converted to Number)", s);
+ return setfloat(v);
+ }
+
+ if(l==3) {
+ return setint(-(int)v);
+ } else {
+ return setuint(v);
+ }
+}
+
+void handleLabel(char*text, int len)
+{
+ int t;
+ for(t=len-1;t>=0;--t) {
+ if(text[t]!=' ' &&
+ text[t]!=':')
+ break;
+ }
+ char*s = malloc(t+1);
+ memcpy(s, yytext, t);
+ s[t]=0;
+ avm2_lval.id = s;
+}
+
+static int handleregexp()
+{
+ char*s = malloc(yyleng);
+ int len=yyleng-1;
+ memcpy(s, yytext+1, len);
+ s[len] = 0;
+ int t;
+ for(t=len;t>=0;--t) {
+ if(s[t]=='/') {
+ s[t] = 0;
+ break;
+ }