X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fas3%2Ftokenizer.yy.c;h=fa46636236ba11d6dfd158cf5e3d3adcbfdb972f;hb=8ce68a3a98cc4ccac65f56ae329a2a8e824cb58e;hp=69c510940c0347d873def2e6b54c8c05c0e12254;hpb=53bc7f90f1b258112e8f804a1894e29810c2a4e4;p=swftools.git diff --git a/lib/as3/tokenizer.yy.c b/lib/as3/tokenizer.yy.c index 69c5109..fa46636 100644 --- a/lib/as3/tokenizer.yy.c +++ b/lib/as3/tokenizer.yy.c @@ -1305,12 +1305,43 @@ static void dbg(const char*format, ...) fflush(stdout); } - - #ifndef YY_CURRENT_BUFFER #define YY_CURRENT_BUFFER yy_current_buffer #endif +static void*as3_buffer=0; +static int as3_buffer_pos=0; +static int as3_buffer_len=0; +void as3_file_input(FILE*fi) +{ + as3_in = fi; + as3_buffer = 0; +} +void as3_buffer_input(void*buffer, int len) +{ + as3_buffer = buffer; + as3_buffer_len = len; + as3_buffer_pos = 0; + as3_in = 0; +} + +#define YY_INPUT(buf,result,max_size) { \ + if(!as3_buffer) { \ + errno=0; \ + while((result = fread(buf, 1, max_size, as3_in))==0 && ferror(as3_in)) \ + { if(errno != EINTR) {YY_FATAL_ERROR("input in flex scanner failed"); break;} \ + errno=0; clearerr(as3_in); \ + } \ + } else { \ + int to_read = max_size; \ + if(to_read + as3_buffer_pos > as3_buffer_len) \ + to_read = as3_buffer_len - as3_buffer_pos; \ + memcpy(buf, as3_buffer+as3_buffer_pos, to_read); \ + as3_buffer_pos += to_read; \ + result=to_read; \ + } \ +} + void handleInclude(char*text, int len, char quotes) { char*filename = 0; @@ -1333,7 +1364,8 @@ void handleInclude(char*text, int len, char quotes) filename = strdup(&text[i1]); } - char*fullfilename = enter_file(filename, YY_CURRENT_BUFFER); + char*fullfilename = find_file(filename); + enter_file2(filename, fullfilename, YY_CURRENT_BUFFER); as3_in = fopen(fullfilename, "rb"); if (!as3_in) { syntaxerror("Couldn't open include file \"%s\"\n", fullfilename); @@ -1459,6 +1491,7 @@ static void handleCData(char*s, int len) { a3_lval.str.str = s+9; // + a3_lval.str.str = strdup_n(a3_lval.str.str, a3_lval.str.len); } static void handleString(char*s, int len) @@ -1486,7 +1519,7 @@ static void handleString(char*s, int len) char start_of_expression; -static inline int mkid(int type) +static inline int handleIdentifier(int type) { char*s = malloc(as3_leng+1); memcpy(s, as3_text, as3_leng); @@ -1707,8 +1740,7 @@ static inline void c() { - -#line 1712 "tokenizer.yy.c" +#line 1744 "tokenizer.yy.c" #define INITIAL 0 #define REGEXPOK 1 @@ -1895,11 +1927,11 @@ YY_DECL register char *yy_cp, *yy_bp; register int yy_act; -#line 523 "tokenizer.lex" +#line 555 "tokenizer.lex" -#line 1903 "tokenizer.yy.c" +#line 1935 "tokenizer.yy.c" if ( !(yy_init) ) { @@ -1982,18 +2014,18 @@ do_action: /* This label is used only to access EOF actions. */ case 1: /* rule 1 can match eol */ YY_RULE_SETUP -#line 526 "tokenizer.lex" +#line 558 "tokenizer.lex" {l(); /* single line comment */} YY_BREAK case 2: /* rule 2 can match eol */ YY_RULE_SETUP -#line 527 "tokenizer.lex" +#line 559 "tokenizer.lex" {l(); /* multi line comment */} YY_BREAK case 3: YY_RULE_SETUP -#line 528 "tokenizer.lex" +#line 560 "tokenizer.lex" {syntaxerror("syntax error: unterminated comment", as3_text);} YY_BREAK case 4: @@ -2002,7 +2034,7 @@ case 4: (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up as3_text again */ YY_RULE_SETUP -#line 530 "tokenizer.lex" +#line 562 "tokenizer.lex" {l();handleInclude(as3_text, as3_leng, 1);} YY_BREAK case 5: @@ -2011,82 +2043,82 @@ case 5: (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up as3_text again */ YY_RULE_SETUP -#line 531 "tokenizer.lex" +#line 563 "tokenizer.lex" {l();handleInclude(as3_text, as3_leng, 0);} YY_BREAK case 6: /* rule 6 can match eol */ YY_RULE_SETUP -#line 532 "tokenizer.lex" +#line 564 "tokenizer.lex" {l(); BEGIN(INITIAL);handleString(as3_text, as3_leng);return T_STRING;} YY_BREAK case 7: /* rule 7 can match eol */ YY_RULE_SETUP -#line 533 "tokenizer.lex" +#line 565 "tokenizer.lex" {l(); BEGIN(INITIAL);handleCData(as3_text, as3_leng);return T_STRING;} YY_BREAK case 8: YY_RULE_SETUP -#line 536 "tokenizer.lex" +#line 568 "tokenizer.lex" {c(); BEGIN(INITIAL);return handleregexp();} YY_BREAK case 9: YY_RULE_SETUP -#line 537 "tokenizer.lex" +#line 569 "tokenizer.lex" {c(); BEGIN(INITIAL);return handlehex();} YY_BREAK case 10: YY_RULE_SETUP -#line 538 "tokenizer.lex" +#line 570 "tokenizer.lex" {c(); BEGIN(INITIAL);return handlehexfloat();} YY_BREAK case 11: YY_RULE_SETUP -#line 539 "tokenizer.lex" +#line 571 "tokenizer.lex" {c(); BEGIN(INITIAL);return handleint();} YY_BREAK case 12: YY_RULE_SETUP -#line 540 "tokenizer.lex" +#line 572 "tokenizer.lex" {c(); BEGIN(INITIAL);return handlefloat();} YY_BREAK case 13: YY_RULE_SETUP -#line 543 "tokenizer.lex" +#line 575 "tokenizer.lex" {/* utf 8 bom */} YY_BREAK case 14: /* rule 14 can match eol */ YY_RULE_SETUP -#line 544 "tokenizer.lex" +#line 576 "tokenizer.lex" {l();} YY_BREAK case 15: YY_RULE_SETUP -#line 546 "tokenizer.lex" +#line 578 "tokenizer.lex" {c(); BEGIN(INITIAL);return handlehex();} YY_BREAK case 16: YY_RULE_SETUP -#line 547 "tokenizer.lex" +#line 579 "tokenizer.lex" {c(); BEGIN(INITIAL);return handlehexfloat();} YY_BREAK case 17: YY_RULE_SETUP -#line 548 "tokenizer.lex" +#line 580 "tokenizer.lex" {c(); BEGIN(INITIAL);return handleint();} YY_BREAK case 18: YY_RULE_SETUP -#line 549 "tokenizer.lex" +#line 581 "tokenizer.lex" {c(); BEGIN(INITIAL);return handlefloat();} YY_BREAK case 19: YY_RULE_SETUP -#line 551 "tokenizer.lex" +#line 583 "tokenizer.lex" {/* for debugging: generates a tokenizer-level error */ syntaxerror("3rr0r");} YY_BREAK @@ -2096,7 +2128,7 @@ case 20: (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up as3_text again */ YY_RULE_SETUP -#line 554 "tokenizer.lex" +#line 586 "tokenizer.lex" {l();handleLabel(as3_text, as3_leng-3);return T_FOR;} YY_BREAK case 21: @@ -2105,7 +2137,7 @@ case 21: (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up as3_text again */ YY_RULE_SETUP -#line 555 "tokenizer.lex" +#line 587 "tokenizer.lex" {l();handleLabel(as3_text, as3_leng-2);return T_DO;} YY_BREAK case 22: @@ -2114,7 +2146,7 @@ case 22: (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up as3_text again */ YY_RULE_SETUP -#line 556 "tokenizer.lex" +#line 588 "tokenizer.lex" {l();handleLabel(as3_text, as3_leng-5);return T_WHILE;} YY_BREAK case 23: @@ -2123,422 +2155,422 @@ case 23: (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up as3_text again */ YY_RULE_SETUP -#line 557 "tokenizer.lex" +#line 589 "tokenizer.lex" {l();handleLabel(as3_text, as3_leng-6);return T_SWITCH;} YY_BREAK case 24: YY_RULE_SETUP -#line 558 "tokenizer.lex" +#line 590 "tokenizer.lex" {c();a3_lval.id="";return T_FOR;} YY_BREAK case 25: YY_RULE_SETUP -#line 559 "tokenizer.lex" +#line 591 "tokenizer.lex" {c();a3_lval.id="";return T_DO;} YY_BREAK case 26: YY_RULE_SETUP -#line 560 "tokenizer.lex" +#line 592 "tokenizer.lex" {c();a3_lval.id="";return T_WHILE;} YY_BREAK case 27: YY_RULE_SETUP -#line 561 "tokenizer.lex" +#line 593 "tokenizer.lex" {c();a3_lval.id="";return T_SWITCH;} YY_BREAK case 28: YY_RULE_SETUP -#line 563 "tokenizer.lex" +#line 595 "tokenizer.lex" {c();BEGIN(REGEXPOK);return m(T_ANDAND);} YY_BREAK case 29: YY_RULE_SETUP -#line 564 "tokenizer.lex" +#line 596 "tokenizer.lex" {c();BEGIN(REGEXPOK);return m(T_OROR);} YY_BREAK case 30: YY_RULE_SETUP -#line 565 "tokenizer.lex" +#line 597 "tokenizer.lex" {c();BEGIN(REGEXPOK);return m(T_NE);} YY_BREAK case 31: YY_RULE_SETUP -#line 566 "tokenizer.lex" +#line 598 "tokenizer.lex" {c();BEGIN(REGEXPOK);return m(T_NEE);} YY_BREAK case 32: YY_RULE_SETUP -#line 567 "tokenizer.lex" +#line 599 "tokenizer.lex" {c();BEGIN(REGEXPOK);return m(T_EQEQEQ);} YY_BREAK case 33: YY_RULE_SETUP -#line 568 "tokenizer.lex" +#line 600 "tokenizer.lex" {c();BEGIN(REGEXPOK);return m(T_EQEQ);} YY_BREAK case 34: YY_RULE_SETUP -#line 569 "tokenizer.lex" +#line 601 "tokenizer.lex" {c();return m(T_GE);} YY_BREAK case 35: YY_RULE_SETUP -#line 570 "tokenizer.lex" +#line 602 "tokenizer.lex" {c();return m(T_LE);} YY_BREAK case 36: YY_RULE_SETUP -#line 571 "tokenizer.lex" +#line 603 "tokenizer.lex" {c();BEGIN(INITIAL);return m(T_MINUSMINUS);} YY_BREAK case 37: YY_RULE_SETUP -#line 572 "tokenizer.lex" +#line 604 "tokenizer.lex" {c();BEGIN(INITIAL);return m(T_PLUSPLUS);} YY_BREAK case 38: YY_RULE_SETUP -#line 573 "tokenizer.lex" +#line 605 "tokenizer.lex" {c();return m(T_PLUSBY);} YY_BREAK case 39: YY_RULE_SETUP -#line 574 "tokenizer.lex" +#line 606 "tokenizer.lex" {c();return m(T_MINUSBY);} YY_BREAK case 40: YY_RULE_SETUP -#line 575 "tokenizer.lex" +#line 607 "tokenizer.lex" {c();return m(T_DIVBY);} YY_BREAK case 41: YY_RULE_SETUP -#line 576 "tokenizer.lex" +#line 608 "tokenizer.lex" {c();return m(T_MODBY);} YY_BREAK case 42: YY_RULE_SETUP -#line 577 "tokenizer.lex" +#line 609 "tokenizer.lex" {c();return m(T_MULBY);} YY_BREAK case 43: YY_RULE_SETUP -#line 578 "tokenizer.lex" +#line 610 "tokenizer.lex" {c();return m(T_ORBY);} YY_BREAK case 44: YY_RULE_SETUP -#line 579 "tokenizer.lex" +#line 611 "tokenizer.lex" {c();return m(T_SHRBY);} YY_BREAK case 45: YY_RULE_SETUP -#line 580 "tokenizer.lex" +#line 612 "tokenizer.lex" {c();return m(T_SHLBY);} YY_BREAK case 46: YY_RULE_SETUP -#line 581 "tokenizer.lex" +#line 613 "tokenizer.lex" {c();return m(T_USHRBY);} YY_BREAK case 47: YY_RULE_SETUP -#line 582 "tokenizer.lex" +#line 614 "tokenizer.lex" {c();return m(T_SHL);} YY_BREAK case 48: YY_RULE_SETUP -#line 583 "tokenizer.lex" +#line 615 "tokenizer.lex" {c();return m(T_USHR);} YY_BREAK case 49: YY_RULE_SETUP -#line 584 "tokenizer.lex" +#line 616 "tokenizer.lex" {c();return m(T_SHR);} YY_BREAK case 50: YY_RULE_SETUP -#line 585 "tokenizer.lex" +#line 617 "tokenizer.lex" {c();return m(T_DOTDOTDOT);} YY_BREAK case 51: YY_RULE_SETUP -#line 586 "tokenizer.lex" +#line 618 "tokenizer.lex" {c();return m(T_DOTDOT);} YY_BREAK case 52: YY_RULE_SETUP -#line 587 "tokenizer.lex" +#line 619 "tokenizer.lex" {c();return m('.');} YY_BREAK case 53: YY_RULE_SETUP -#line 588 "tokenizer.lex" +#line 620 "tokenizer.lex" {c();return m(T_COLONCOLON);} YY_BREAK case 54: YY_RULE_SETUP -#line 589 "tokenizer.lex" +#line 621 "tokenizer.lex" {c();return m(':');} YY_BREAK case 55: YY_RULE_SETUP -#line 590 "tokenizer.lex" +#line 622 "tokenizer.lex" {c();return m(KW_INSTANCEOF);} YY_BREAK case 56: YY_RULE_SETUP -#line 591 "tokenizer.lex" +#line 623 "tokenizer.lex" {c();return m(KW_IMPLEMENTS);} YY_BREAK case 57: YY_RULE_SETUP -#line 592 "tokenizer.lex" +#line 624 "tokenizer.lex" {c();return m(KW_INTERFACE);} YY_BREAK case 58: YY_RULE_SETUP -#line 593 "tokenizer.lex" +#line 625 "tokenizer.lex" {c();return m(KW_NAMESPACE);} YY_BREAK case 59: YY_RULE_SETUP -#line 594 "tokenizer.lex" +#line 626 "tokenizer.lex" {c();return m(KW_PROTECTED);} YY_BREAK case 60: YY_RULE_SETUP -#line 595 "tokenizer.lex" +#line 627 "tokenizer.lex" {c();return m(KW_UNDEFINED);} YY_BREAK case 61: YY_RULE_SETUP -#line 596 "tokenizer.lex" +#line 628 "tokenizer.lex" {c();return m(KW_CONTINUE);} YY_BREAK case 62: YY_RULE_SETUP -#line 597 "tokenizer.lex" +#line 629 "tokenizer.lex" {c();return m(KW_OVERRIDE);} YY_BREAK case 63: YY_RULE_SETUP -#line 598 "tokenizer.lex" +#line 630 "tokenizer.lex" {c();return m(KW_INTERNAL);} YY_BREAK case 64: YY_RULE_SETUP -#line 599 "tokenizer.lex" +#line 631 "tokenizer.lex" {c();return m(KW_FUNCTION);} YY_BREAK case 65: YY_RULE_SETUP -#line 600 "tokenizer.lex" +#line 632 "tokenizer.lex" {c();return m(KW_FINALLY);} YY_BREAK case 66: YY_RULE_SETUP -#line 601 "tokenizer.lex" +#line 633 "tokenizer.lex" {c();return m(KW_DEFAULT);} YY_BREAK case 67: YY_RULE_SETUP -#line 602 "tokenizer.lex" +#line 634 "tokenizer.lex" {c();return m(KW_PACKAGE);} YY_BREAK case 68: YY_RULE_SETUP -#line 603 "tokenizer.lex" +#line 635 "tokenizer.lex" {c();return m(KW_PRIVATE);} YY_BREAK case 69: YY_RULE_SETUP -#line 604 "tokenizer.lex" +#line 636 "tokenizer.lex" {c();return m(KW_DYNAMIC);} YY_BREAK case 70: YY_RULE_SETUP -#line 605 "tokenizer.lex" +#line 637 "tokenizer.lex" {c();return m(KW_EXTENDS);} YY_BREAK case 71: YY_RULE_SETUP -#line 606 "tokenizer.lex" +#line 638 "tokenizer.lex" {c();return m(KW_DELETE);} YY_BREAK case 72: YY_RULE_SETUP -#line 607 "tokenizer.lex" +#line 639 "tokenizer.lex" {c();return m(KW_RETURN);} YY_BREAK case 73: YY_RULE_SETUP -#line 608 "tokenizer.lex" +#line 640 "tokenizer.lex" {c();return m(KW_PUBLIC);} YY_BREAK case 74: YY_RULE_SETUP -#line 609 "tokenizer.lex" +#line 641 "tokenizer.lex" {c();return m(KW_NATIVE);} YY_BREAK case 75: YY_RULE_SETUP -#line 610 "tokenizer.lex" +#line 642 "tokenizer.lex" {c();return m(KW_STATIC);} YY_BREAK case 76: YY_RULE_SETUP -#line 611 "tokenizer.lex" +#line 643 "tokenizer.lex" {c();return m(KW_IMPORT);} YY_BREAK case 77: YY_RULE_SETUP -#line 612 "tokenizer.lex" +#line 644 "tokenizer.lex" {c();return m(KW_TYPEOF);} YY_BREAK case 78: YY_RULE_SETUP -#line 613 "tokenizer.lex" +#line 645 "tokenizer.lex" {c();return m(KW_THROW);} YY_BREAK case 79: YY_RULE_SETUP -#line 614 "tokenizer.lex" +#line 646 "tokenizer.lex" {c();return m(KW_CLASS);} YY_BREAK case 80: YY_RULE_SETUP -#line 615 "tokenizer.lex" +#line 647 "tokenizer.lex" {c();return m(KW_CONST);} YY_BREAK case 81: YY_RULE_SETUP -#line 616 "tokenizer.lex" +#line 648 "tokenizer.lex" {c();return m(KW_CATCH);} YY_BREAK case 82: YY_RULE_SETUP -#line 617 "tokenizer.lex" +#line 649 "tokenizer.lex" {c();return m(KW_FINAL);} YY_BREAK case 83: YY_RULE_SETUP -#line 618 "tokenizer.lex" +#line 650 "tokenizer.lex" {c();return m(KW_FALSE);} YY_BREAK case 84: YY_RULE_SETUP -#line 619 "tokenizer.lex" +#line 651 "tokenizer.lex" {c();return m(KW_BREAK);} YY_BREAK case 85: YY_RULE_SETUP -#line 620 "tokenizer.lex" +#line 652 "tokenizer.lex" {c();return m(KW_SUPER);} YY_BREAK case 86: YY_RULE_SETUP -#line 621 "tokenizer.lex" +#line 653 "tokenizer.lex" {c();return m(KW_EACH);} YY_BREAK case 87: YY_RULE_SETUP -#line 622 "tokenizer.lex" +#line 654 "tokenizer.lex" {c();return m(KW_VOID);} YY_BREAK case 88: YY_RULE_SETUP -#line 623 "tokenizer.lex" +#line 655 "tokenizer.lex" {c();return m(KW_TRUE);} YY_BREAK case 89: YY_RULE_SETUP -#line 624 "tokenizer.lex" +#line 656 "tokenizer.lex" {c();return m(KW_NULL);} YY_BREAK case 90: YY_RULE_SETUP -#line 625 "tokenizer.lex" +#line 657 "tokenizer.lex" {c();return m(KW_ELSE);} YY_BREAK case 91: YY_RULE_SETUP -#line 626 "tokenizer.lex" +#line 658 "tokenizer.lex" {c();return m(KW_CASE);} YY_BREAK case 92: YY_RULE_SETUP -#line 627 "tokenizer.lex" +#line 659 "tokenizer.lex" {c();return m(KW_WITH);} YY_BREAK case 93: YY_RULE_SETUP -#line 628 "tokenizer.lex" +#line 660 "tokenizer.lex" {c();return m(KW_USE);} YY_BREAK case 94: YY_RULE_SETUP -#line 629 "tokenizer.lex" +#line 661 "tokenizer.lex" {c();return m(KW_NEW);} YY_BREAK case 95: YY_RULE_SETUP -#line 630 "tokenizer.lex" +#line 662 "tokenizer.lex" {c();return m(KW_GET);} YY_BREAK case 96: YY_RULE_SETUP -#line 631 "tokenizer.lex" +#line 663 "tokenizer.lex" {c();return m(KW_SET);} YY_BREAK case 97: YY_RULE_SETUP -#line 632 "tokenizer.lex" +#line 664 "tokenizer.lex" {c();return m(KW_VAR);} YY_BREAK case 98: YY_RULE_SETUP -#line 633 "tokenizer.lex" +#line 665 "tokenizer.lex" {c();return m(KW_TRY);} YY_BREAK case 99: YY_RULE_SETUP -#line 634 "tokenizer.lex" +#line 666 "tokenizer.lex" {c();return m(KW_IS) ;} YY_BREAK case 100: YY_RULE_SETUP -#line 635 "tokenizer.lex" +#line 667 "tokenizer.lex" {c();return m(KW_IN) ;} YY_BREAK case 101: YY_RULE_SETUP -#line 636 "tokenizer.lex" +#line 668 "tokenizer.lex" {c();return m(KW_IF) ;} YY_BREAK case 102: YY_RULE_SETUP -#line 637 "tokenizer.lex" +#line 669 "tokenizer.lex" {c();return m(KW_AS);} YY_BREAK case 103: YY_RULE_SETUP -#line 638 "tokenizer.lex" -{c();BEGIN(INITIAL);return mkid(T_IDENTIFIER);} +#line 670 "tokenizer.lex" +{c();BEGIN(INITIAL);return handleIdentifier(T_IDENTIFIER);} YY_BREAK case 104: YY_RULE_SETUP -#line 640 "tokenizer.lex" +#line 672 "tokenizer.lex" {c();BEGIN(REGEXPOK);return m(as3_text[0]);} YY_BREAK case 105: YY_RULE_SETUP -#line 641 "tokenizer.lex" +#line 673 "tokenizer.lex" {c();BEGIN(INITIAL);return m(as3_text[0]);} YY_BREAK case 106: YY_RULE_SETUP -#line 643 "tokenizer.lex" +#line 675 "tokenizer.lex" {/* ERROR */ char c1=as3_text[0]; char buf[128]; @@ -2563,7 +2595,7 @@ YY_RULE_SETUP case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(REGEXPOK): case YY_STATE_EOF(BEGINNING): -#line 663 "tokenizer.lex" +#line 695 "tokenizer.lex" {l(); void*b = leave_file(); if (!b) { @@ -2578,10 +2610,10 @@ case YY_STATE_EOF(BEGINNING): YY_BREAK case 107: YY_RULE_SETUP -#line 675 "tokenizer.lex" +#line 707 "tokenizer.lex" ECHO; YY_BREAK -#line 2585 "tokenizer.yy.c" +#line 2617 "tokenizer.yy.c" case YY_END_OF_BUFFER: { @@ -3591,7 +3623,7 @@ void as3_free (void * ptr ) #define YYTABLES_NAME "yytables" -#line 675 "tokenizer.lex" +#line 707 "tokenizer.lex" @@ -3660,3 +3692,4 @@ void initialize_scanner() } +