ext/lexerc/lexerc.c in hotcell-0.2.0 vs ext/lexerc/lexerc.c in hotcell-0.3.0
- old
+ new
@@ -1,9 +1,9 @@
#line 1 "ext/lexerc/lexerc.rl"
-#line 12 "ext/lexerc/lexerc.rl"
+#line 39 "ext/lexerc/lexerc.rl"
#include <ruby.h>
#include <lexerc.h>
@@ -11,26 +11,30 @@
static VALUE mHotcell;
static VALUE cHotcellLexer;
#line 16 "ext/lexerc/lexerc.c"
-static const int puffer_lexer_start = 13;
-static const int puffer_lexer_first_final = 13;
-static const int puffer_lexer_error = 0;
+static const int hotcell_lexer_start = 19;
+static const int hotcell_lexer_first_final = 19;
+static const int hotcell_lexer_error = 0;
-static const int puffer_lexer_en_expression = 17;
-static const int puffer_lexer_en_template_comment = 29;
-static const int puffer_lexer_en_main = 13;
+static const int hotcell_lexer_en_dstring = 23;
+static const int hotcell_lexer_en_interpolation = 26;
+static const int hotcell_lexer_en_expression = 37;
+static const int hotcell_lexer_en_template_comment = 50;
+static const int hotcell_lexer_en_main = 19;
-#line 22 "ext/lexerc/lexerc.rl"
+#line 49 "ext/lexerc/lexerc.rl"
static char *p;
static char *ts;
static char *te;
static char *data;
static VALUE encoding;
+static int braces_count;
+static long dstring_start;
static VALUE tokenize(VALUE self) {
VALUE source = rb_iv_get(self, "@source");
encoding = rb_funcall(source, rb_intern("encoding"), 0);
VALUE string = rb_funcall(source, rb_intern("source"), 0);
@@ -45,585 +49,1004 @@
p = data;
char *pe = data + length;
char *eof = pe;
-#line 51 "ext/lexerc/lexerc.c"
+#line 55 "ext/lexerc/lexerc.c"
{
- cs = puffer_lexer_start;
+ cs = hotcell_lexer_start;
top = 0;
ts = 0;
te = 0;
act = 0;
}
-#line 46 "ext/lexerc/lexerc.rl"
+#line 75 "ext/lexerc/lexerc.rl"
-#line 62 "ext/lexerc/lexerc.c"
+#line 66 "ext/lexerc/lexerc.c"
{
if ( p == pe )
goto _test_eof;
goto _resume;
_again:
switch ( cs ) {
- case 13: goto st13;
- case 14: goto st14;
- case 15: goto st15;
- case 16: goto st16;
- case 1: goto st1;
- case 17: goto st17;
- case 0: goto st0;
- case 18: goto st18;
- case 2: goto st2;
- case 3: goto st3;
case 19: goto st19;
- case 4: goto st4;
- case 5: goto st5;
- case 6: goto st6;
- case 7: goto st7;
case 20: goto st20;
case 21: goto st21;
- case 8: goto st8;
case 22: goto st22;
+ case 1: goto st1;
case 23: goto st23;
case 24: goto st24;
+ case 2: goto st2;
case 25: goto st25;
- case 9: goto st9;
case 26: goto st26;
- case 10: goto st10;
+ case 0: goto st0;
case 27: goto st27;
- case 11: goto st11;
case 28: goto st28;
+ case 3: goto st3;
+ case 4: goto st4;
+ case 5: goto st5;
case 29: goto st29;
case 30: goto st30;
+ case 6: goto st6;
case 31: goto st31;
+ case 32: goto st32;
+ case 33: goto st33;
+ case 34: goto st34;
+ case 7: goto st7;
+ case 35: goto st35;
+ case 8: goto st8;
+ case 36: goto st36;
+ case 9: goto st9;
+ case 37: goto st37;
+ case 38: goto st38;
+ case 39: goto st39;
+ case 40: goto st40;
+ case 10: goto st10;
+ case 11: goto st11;
case 12: goto st12;
+ case 13: goto st13;
+ case 41: goto st41;
+ case 42: goto st42;
+ case 14: goto st14;
+ case 43: goto st43;
+ case 44: goto st44;
+ case 45: goto st45;
+ case 46: goto st46;
+ case 15: goto st15;
+ case 47: goto st47;
+ case 16: goto st16;
+ case 48: goto st48;
+ case 17: goto st17;
+ case 49: goto st49;
+ case 50: goto st50;
+ case 51: goto st51;
+ case 52: goto st52;
+ case 18: goto st18;
default: break;
}
if ( ++p == pe )
goto _test_eof;
_resume:
switch ( cs )
{
tr0:
-#line 91 "lib/hotcell/lexer.rl"
- {{p = ((te))-1;}{ emit_tag; {stack[top++] = 13; goto st17;} }}
- goto st13;
+#line 110 "lib/hotcell/lexer.rl"
+ {{p = ((te))-1;}{ emit_tag; {stack[top++] = 19; goto st37;} }}
+ goto st19;
tr1:
-#line 91 "lib/hotcell/lexer.rl"
- {te = p+1;{ emit_tag; {stack[top++] = 13; goto st17;} }}
- goto st13;
-tr22:
-#line 93 "lib/hotcell/lexer.rl"
+#line 110 "lib/hotcell/lexer.rl"
+ {te = p+1;{ emit_tag; {stack[top++] = 19; goto st37;} }}
+ goto st19;
+tr31:
+#line 112 "lib/hotcell/lexer.rl"
{te = p;p--;{ emit_template; }}
- goto st13;
-tr24:
-#line 91 "lib/hotcell/lexer.rl"
- {te = p;p--;{ emit_tag; {stack[top++] = 13; goto st17;} }}
- goto st13;
-tr25:
-#line 92 "lib/hotcell/lexer.rl"
- {te = p+1;{ emit_comment; {stack[top++] = 13; goto st29;} }}
- goto st13;
-st13:
+ goto st19;
+tr33:
+#line 110 "lib/hotcell/lexer.rl"
+ {te = p;p--;{ emit_tag; {stack[top++] = 19; goto st37;} }}
+ goto st19;
+tr34:
+#line 111 "lib/hotcell/lexer.rl"
+ {te = p+1;{ emit_comment; {stack[top++] = 19; goto st50;} }}
+ goto st19;
+st19:
#line 1 "NONE"
{ts = 0;}
if ( ++p == pe )
- goto _test_eof13;
-case 13:
+ goto _test_eof19;
+case 19:
#line 1 "NONE"
{ts = p;}
-#line 138 "ext/lexerc/lexerc.c"
+#line 163 "ext/lexerc/lexerc.c"
if ( (*p) == 123 )
- goto st15;
- goto st14;
-st14:
+ goto st21;
+ goto st20;
+st20:
if ( ++p == pe )
- goto _test_eof14;
-case 14:
+ goto _test_eof20;
+case 20:
if ( (*p) == 123 )
- goto tr22;
- goto st14;
-st15:
+ goto tr31;
+ goto st20;
+st21:
if ( ++p == pe )
- goto _test_eof15;
-case 15:
+ goto _test_eof21;
+case 21:
if ( (*p) == 123 )
- goto tr23;
- goto tr22;
-tr23:
+ goto tr32;
+ goto tr31;
+tr32:
#line 1 "NONE"
{te = p+1;}
- goto st16;
-st16:
+ goto st22;
+st22:
if ( ++p == pe )
- goto _test_eof16;
-case 16:
-#line 164 "ext/lexerc/lexerc.c"
+ goto _test_eof22;
+case 22:
+#line 189 "ext/lexerc/lexerc.c"
switch( (*p) ) {
case 33: goto tr1;
- case 35: goto tr25;
+ case 35: goto tr34;
case 94: goto tr1;
case 101: goto st1;
case 114: goto st1;
case 126: goto tr1;
}
- goto tr24;
+ goto tr33;
st1:
if ( ++p == pe )
goto _test_eof1;
case 1:
if ( (*p) == 32 )
goto tr1;
goto tr0;
+tr2:
+#line 1 "NONE"
+ { switch( act ) {
+ case 0:
+ {{goto st0;}}
+ break;
+ case 3:
+ {{p = ((te))-1;} emit_dstring; }
+ break;
+ }
+ }
+ goto st23;
+tr36:
+#line 73 "lib/hotcell/lexer.rl"
+ {te = p+1;{ emit_dstring_close; {cs = stack[--top];goto _again;} }}
+ goto st23;
+tr39:
+#line 75 "lib/hotcell/lexer.rl"
+ {te = p;p--;{ emit_dstring; }}
+ goto st23;
+tr40:
+#line 11 "ext/lexerc/lexerc.rl"
+ {te = p+1;{
+ braces_count = 0;
+ emit_interpolation;
+ {stack[top++] = 23; goto st26;}
+ }}
+ goto st23;
+st23:
+#line 1 "NONE"
+ {ts = 0;}
+#line 1 "NONE"
+ {act = 0;}
+ if ( ++p == pe )
+ goto _test_eof23;
+case 23:
+#line 1 "NONE"
+ {ts = p;}
+#line 244 "ext/lexerc/lexerc.c"
+ switch( (*p) ) {
+ case 34: goto tr36;
+ case 35: goto st25;
+ case 92: goto st2;
+ }
+ goto tr3;
tr3:
-#line 79 "lib/hotcell/lexer.rl"
- {te = p+1;{ emit_dstring; }}
- goto st17;
-tr5:
-#line 81 "lib/hotcell/lexer.rl"
- {{p = ((te))-1;}{ emit_comment; }}
- goto st17;
-tr7:
+#line 1 "NONE"
+ {te = p+1;}
#line 75 "lib/hotcell/lexer.rl"
+ {act = 3;}
+ goto st24;
+st24:
+ if ( ++p == pe )
+ goto _test_eof24;
+case 24:
+#line 261 "ext/lexerc/lexerc.c"
+ if ( (*p) == 92 )
+ goto st2;
+ if ( 34 <= (*p) && (*p) <= 35 )
+ goto tr39;
+ goto tr3;
+st2:
+ if ( ++p == pe )
+ goto _test_eof2;
+case 2:
+ goto tr3;
+st25:
+ if ( ++p == pe )
+ goto _test_eof25;
+case 25:
+ if ( (*p) == 123 )
+ goto tr40;
+ goto tr39;
+tr4:
+#line 81 "lib/hotcell/lexer.rl"
{te = p+1;{ emit_operator; }}
- goto st17;
-tr10:
-#line 78 "lib/hotcell/lexer.rl"
- {te = p+1;{ emit_sstring; }}
- goto st17;
-tr12:
+ goto st26;
+tr7:
+#line 87 "lib/hotcell/lexer.rl"
+ {te = p+1;{ emit_string; }}
+ goto st26;
+tr9:
#line 1 "NONE"
{ switch( act ) {
- case 2:
+ case 4:
{{p = ((te))-1;} emit_operator; }
break;
- case 3:
+ case 8:
{{p = ((te))-1;} emit_numeric; }
break;
}
}
- goto st17;
-tr14:
-#line 75 "lib/hotcell/lexer.rl"
+ goto st26;
+tr11:
+#line 81 "lib/hotcell/lexer.rl"
{{p = ((te))-1;}{ emit_operator; }}
- goto st17;
-tr27:
-#line 82 "lib/hotcell/lexer.rl"
+ goto st26;
+tr41:
+#line 89 "lib/hotcell/lexer.rl"
{te = p+1;}
- goto st17;
-tr38:
-#line 75 "lib/hotcell/lexer.rl"
- {te = p;p--;{ emit_operator; }}
- goto st17;
-tr39:
+ goto st26;
+tr51:
+#line 17 "ext/lexerc/lexerc.rl"
+ {te = p+1;{
+ emit_operator;
+ braces_count++;
+ }}
+ goto st26;
+tr53:
+#line 22 "ext/lexerc/lexerc.rl"
+ {te = p+1;{
+ if (braces_count < 1) {
+ emit_interpolation;
+ {cs = stack[--top];goto _again;}
+ } else {
+ emit_operator;
+ braces_count--;
+ }
+ }}
+ goto st26;
+tr54:
#line 81 "lib/hotcell/lexer.rl"
- {te = p;p--;{ emit_comment; }}
- goto st17;
-tr42:
-#line 76 "lib/hotcell/lexer.rl"
+ {te = p;p--;{ emit_operator; }}
+ goto st26;
+tr55:
+#line 32 "ext/lexerc/lexerc.rl"
+ {te = p;p--;{
+ dstring_start = ts - data;
+ emit_dstring_open;
+ {stack[top++] = 26; goto st23;}
+ }}
+ goto st26;
+tr57:
+#line 85 "lib/hotcell/lexer.rl"
{te = p;p--;{ emit_numeric; }}
- goto st17;
-tr44:
-#line 80 "lib/hotcell/lexer.rl"
+ goto st26;
+tr59:
+#line 88 "lib/hotcell/lexer.rl"
{te = p;p--;{ emit_regexp; }}
- goto st17;
-tr45:
-#line 77 "lib/hotcell/lexer.rl"
+ goto st26;
+tr60:
+#line 86 "lib/hotcell/lexer.rl"
{te = p;p--;{ emit_identifer; }}
- goto st17;
-tr46:
-#line 77 "lib/hotcell/lexer.rl"
+ goto st26;
+tr61:
+#line 86 "lib/hotcell/lexer.rl"
{te = p+1;{ emit_identifer; }}
- goto st17;
-tr47:
-#line 74 "lib/hotcell/lexer.rl"
- {te = p+1;{ emit_tag; {cs = stack[--top];goto _again;} }}
- goto st17;
-st17:
+ goto st26;
+st26:
#line 1 "NONE"
{ts = 0;}
if ( ++p == pe )
- goto _test_eof17;
-case 17:
+ goto _test_eof26;
+case 26:
#line 1 "NONE"
{ts = p;}
-#line 253 "ext/lexerc/lexerc.c"
+#line 362 "ext/lexerc/lexerc.c"
switch( (*p) ) {
- case 10: goto tr7;
- case 32: goto tr27;
- case 33: goto st18;
- case 34: goto st2;
- case 35: goto tr6;
- case 38: goto st5;
- case 39: goto st6;
- case 42: goto st20;
- case 45: goto tr31;
- case 46: goto st23;
- case 47: goto tr33;
- case 63: goto tr7;
- case 91: goto tr7;
- case 93: goto tr7;
- case 95: goto st27;
- case 123: goto tr7;
- case 124: goto st11;
- case 125: goto st28;
+ case 10: goto tr4;
+ case 32: goto tr41;
+ case 33: goto st27;
+ case 34: goto st28;
+ case 38: goto st3;
+ case 39: goto st4;
+ case 42: goto st29;
+ case 45: goto tr46;
+ case 46: goto st32;
+ case 47: goto tr48;
+ case 63: goto tr4;
+ case 91: goto tr4;
+ case 93: goto tr4;
+ case 95: goto st36;
+ case 123: goto tr51;
+ case 124: goto st9;
+ case 125: goto tr53;
}
if ( (*p) < 58 ) {
if ( (*p) < 37 ) {
if ( 9 <= (*p) && (*p) <= 13 )
- goto tr27;
+ goto tr41;
} else if ( (*p) > 44 ) {
if ( 48 <= (*p) && (*p) <= 57 )
- goto tr34;
+ goto tr49;
} else
- goto tr7;
+ goto tr4;
} else if ( (*p) > 59 ) {
if ( (*p) < 65 ) {
if ( 60 <= (*p) && (*p) <= 62 )
- goto st18;
+ goto st27;
} else if ( (*p) > 90 ) {
if ( 97 <= (*p) && (*p) <= 122 )
- goto st27;
+ goto st36;
} else
- goto st27;
+ goto st36;
} else
- goto tr7;
+ goto tr4;
goto st0;
st0:
cs = 0;
goto _out;
-st18:
+st27:
if ( ++p == pe )
- goto _test_eof18;
-case 18:
+ goto _test_eof27;
+case 27:
if ( (*p) == 61 )
- goto tr7;
- goto tr38;
-st2:
+ goto tr4;
+ goto tr54;
+st28:
if ( ++p == pe )
- goto _test_eof2;
-case 2:
- switch( (*p) ) {
- case 34: goto tr3;
- case 92: goto st3;
- }
- goto st2;
+ goto _test_eof28;
+case 28:
+ if ( (*p) == 34 )
+ goto tr7;
+ goto tr55;
st3:
if ( ++p == pe )
goto _test_eof3;
case 3:
- goto st2;
-tr6:
-#line 1 "NONE"
- {te = p+1;}
- goto st19;
-st19:
- if ( ++p == pe )
- goto _test_eof19;
-case 19:
-#line 327 "ext/lexerc/lexerc.c"
- switch( (*p) ) {
- case 10: goto tr39;
- case 125: goto st4;
- }
- goto tr6;
+ if ( (*p) == 38 )
+ goto tr4;
+ goto st0;
st4:
if ( ++p == pe )
goto _test_eof4;
case 4:
- if ( (*p) == 125 )
- goto tr5;
- goto tr6;
+ switch( (*p) ) {
+ case 39: goto tr7;
+ case 92: goto st5;
+ }
+ goto st4;
st5:
if ( ++p == pe )
goto _test_eof5;
case 5:
- if ( (*p) == 38 )
- goto tr7;
- goto st0;
+ goto st4;
+st29:
+ if ( ++p == pe )
+ goto _test_eof29;
+case 29:
+ if ( (*p) == 42 )
+ goto tr4;
+ goto tr54;
+tr46:
+#line 1 "NONE"
+ {te = p+1;}
+#line 81 "lib/hotcell/lexer.rl"
+ {act = 4;}
+ goto st30;
+tr49:
+#line 1 "NONE"
+ {te = p+1;}
+#line 85 "lib/hotcell/lexer.rl"
+ {act = 8;}
+ goto st30;
+st30:
+ if ( ++p == pe )
+ goto _test_eof30;
+case 30:
+#line 464 "ext/lexerc/lexerc.c"
+ if ( (*p) == 46 )
+ goto st6;
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto tr49;
+ goto tr9;
st6:
if ( ++p == pe )
goto _test_eof6;
case 6:
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st31;
+ goto tr9;
+st31:
+ if ( ++p == pe )
+ goto _test_eof31;
+case 31:
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st31;
+ goto tr57;
+st32:
+ if ( ++p == pe )
+ goto _test_eof32;
+case 32:
+ if ( (*p) == 46 )
+ goto st33;
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st31;
+ goto tr54;
+st33:
+ if ( ++p == pe )
+ goto _test_eof33;
+case 33:
+ if ( (*p) == 46 )
+ goto tr4;
+ goto tr54;
+tr48:
+#line 1 "NONE"
+ {te = p+1;}
+#line 4 "ext/lexerc/lexerc.rl"
+ {
+ if (regexp_possible == Qfalse) {
+ emit_operator;
+ {goto st37;}
+ }
+ }
+ goto st34;
+st34:
+ if ( ++p == pe )
+ goto _test_eof34;
+case 34:
+#line 515 "ext/lexerc/lexerc.c"
switch( (*p) ) {
- case 39: goto tr10;
- case 92: goto st7;
+ case 47: goto st35;
+ case 92: goto st8;
}
- goto st6;
+ goto st7;
st7:
if ( ++p == pe )
goto _test_eof7;
case 7:
- goto st6;
-st20:
+ switch( (*p) ) {
+ case 47: goto st35;
+ case 92: goto st8;
+ }
+ goto st7;
+st35:
if ( ++p == pe )
- goto _test_eof20;
-case 20:
+ goto _test_eof35;
+case 35:
+ if ( (*p) > 90 ) {
+ if ( 97 <= (*p) && (*p) <= 122 )
+ goto st35;
+ } else if ( (*p) >= 65 )
+ goto st35;
+ goto tr59;
+st8:
+ if ( ++p == pe )
+ goto _test_eof8;
+case 8:
+ goto st7;
+st36:
+ if ( ++p == pe )
+ goto _test_eof36;
+case 36:
+ switch( (*p) ) {
+ case 33: goto tr61;
+ case 63: goto tr61;
+ case 95: goto st36;
+ }
+ if ( (*p) < 65 ) {
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st36;
+ } else if ( (*p) > 90 ) {
+ if ( 97 <= (*p) && (*p) <= 122 )
+ goto st36;
+ } else
+ goto st36;
+ goto tr60;
+st9:
+ if ( ++p == pe )
+ goto _test_eof9;
+case 9:
+ if ( (*p) == 124 )
+ goto tr4;
+ goto st0;
+tr15:
+#line 100 "lib/hotcell/lexer.rl"
+ {{p = ((te))-1;}{ emit_comment; }}
+ goto st37;
+tr17:
+#line 95 "lib/hotcell/lexer.rl"
+ {te = p+1;{ emit_operator; }}
+ goto st37;
+tr19:
+#line 98 "lib/hotcell/lexer.rl"
+ {te = p+1;{ emit_string; }}
+ goto st37;
+tr21:
+#line 1 "NONE"
+ { switch( act ) {
+ case 15:
+ {{p = ((te))-1;} emit_operator; }
+ break;
+ case 16:
+ {{p = ((te))-1;} emit_numeric; }
+ break;
+ }
+ }
+ goto st37;
+tr23:
+#line 95 "lib/hotcell/lexer.rl"
+ {{p = ((te))-1;}{ emit_operator; }}
+ goto st37;
+tr62:
+#line 101 "lib/hotcell/lexer.rl"
+ {te = p+1;}
+ goto st37;
+tr74:
+#line 95 "lib/hotcell/lexer.rl"
+ {te = p;p--;{ emit_operator; }}
+ goto st37;
+tr75:
+#line 32 "ext/lexerc/lexerc.rl"
+ {te = p;p--;{
+ dstring_start = ts - data;
+ emit_dstring_open;
+ {stack[top++] = 37; goto st23;}
+ }}
+ goto st37;
+tr76:
+#line 100 "lib/hotcell/lexer.rl"
+ {te = p;p--;{ emit_comment; }}
+ goto st37;
+tr79:
+#line 96 "lib/hotcell/lexer.rl"
+ {te = p;p--;{ emit_numeric; }}
+ goto st37;
+tr81:
+#line 99 "lib/hotcell/lexer.rl"
+ {te = p;p--;{ emit_regexp; }}
+ goto st37;
+tr82:
+#line 97 "lib/hotcell/lexer.rl"
+ {te = p;p--;{ emit_identifer; }}
+ goto st37;
+tr83:
+#line 97 "lib/hotcell/lexer.rl"
+ {te = p+1;{ emit_identifer; }}
+ goto st37;
+tr84:
+#line 93 "lib/hotcell/lexer.rl"
+ {te = p+1;{ emit_tag; {cs = stack[--top];goto _again;} }}
+ goto st37;
+st37:
+#line 1 "NONE"
+ {ts = 0;}
+ if ( ++p == pe )
+ goto _test_eof37;
+case 37:
+#line 1 "NONE"
+ {ts = p;}
+#line 646 "ext/lexerc/lexerc.c"
+ switch( (*p) ) {
+ case 10: goto tr17;
+ case 32: goto tr62;
+ case 33: goto st38;
+ case 34: goto st39;
+ case 35: goto tr16;
+ case 38: goto st11;
+ case 39: goto st12;
+ case 42: goto st41;
+ case 45: goto tr67;
+ case 46: goto st44;
+ case 47: goto tr69;
+ case 63: goto tr17;
+ case 91: goto tr17;
+ case 93: goto tr17;
+ case 95: goto st48;
+ case 123: goto tr17;
+ case 124: goto st17;
+ case 125: goto st49;
+ }
+ if ( (*p) < 58 ) {
+ if ( (*p) < 37 ) {
+ if ( 9 <= (*p) && (*p) <= 13 )
+ goto tr62;
+ } else if ( (*p) > 44 ) {
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto tr70;
+ } else
+ goto tr17;
+ } else if ( (*p) > 59 ) {
+ if ( (*p) < 65 ) {
+ if ( 60 <= (*p) && (*p) <= 62 )
+ goto st38;
+ } else if ( (*p) > 90 ) {
+ if ( 97 <= (*p) && (*p) <= 122 )
+ goto st48;
+ } else
+ goto st48;
+ } else
+ goto tr17;
+ goto st0;
+st38:
+ if ( ++p == pe )
+ goto _test_eof38;
+case 38:
+ if ( (*p) == 61 )
+ goto tr17;
+ goto tr74;
+st39:
+ if ( ++p == pe )
+ goto _test_eof39;
+case 39:
+ if ( (*p) == 34 )
+ goto tr19;
+ goto tr75;
+tr16:
+#line 1 "NONE"
+ {te = p+1;}
+ goto st40;
+st40:
+ if ( ++p == pe )
+ goto _test_eof40;
+case 40:
+#line 710 "ext/lexerc/lexerc.c"
+ switch( (*p) ) {
+ case 10: goto tr76;
+ case 125: goto st10;
+ }
+ goto tr16;
+st10:
+ if ( ++p == pe )
+ goto _test_eof10;
+case 10:
+ if ( (*p) == 125 )
+ goto tr15;
+ goto tr16;
+st11:
+ if ( ++p == pe )
+ goto _test_eof11;
+case 11:
+ if ( (*p) == 38 )
+ goto tr17;
+ goto st0;
+st12:
+ if ( ++p == pe )
+ goto _test_eof12;
+case 12:
+ switch( (*p) ) {
+ case 39: goto tr19;
+ case 92: goto st13;
+ }
+ goto st12;
+st13:
+ if ( ++p == pe )
+ goto _test_eof13;
+case 13:
+ goto st12;
+st41:
+ if ( ++p == pe )
+ goto _test_eof41;
+case 41:
if ( (*p) == 42 )
- goto tr7;
- goto tr38;
-tr31:
+ goto tr17;
+ goto tr74;
+tr67:
#line 1 "NONE"
{te = p+1;}
-#line 75 "lib/hotcell/lexer.rl"
- {act = 2;}
- goto st21;
-tr34:
+#line 95 "lib/hotcell/lexer.rl"
+ {act = 15;}
+ goto st42;
+tr70:
#line 1 "NONE"
{te = p+1;}
-#line 76 "lib/hotcell/lexer.rl"
- {act = 3;}
- goto st21;
-st21:
+#line 96 "lib/hotcell/lexer.rl"
+ {act = 16;}
+ goto st42;
+st42:
if ( ++p == pe )
- goto _test_eof21;
-case 21:
-#line 384 "ext/lexerc/lexerc.c"
+ goto _test_eof42;
+case 42:
+#line 767 "ext/lexerc/lexerc.c"
if ( (*p) == 46 )
- goto st8;
+ goto st14;
if ( 48 <= (*p) && (*p) <= 57 )
- goto tr34;
- goto tr12;
-st8:
+ goto tr70;
+ goto tr21;
+st14:
if ( ++p == pe )
- goto _test_eof8;
-case 8:
+ goto _test_eof14;
+case 14:
if ( 48 <= (*p) && (*p) <= 57 )
- goto st22;
- goto tr12;
-st22:
+ goto st43;
+ goto tr21;
+st43:
if ( ++p == pe )
- goto _test_eof22;
-case 22:
+ goto _test_eof43;
+case 43:
if ( 48 <= (*p) && (*p) <= 57 )
- goto st22;
- goto tr42;
-st23:
+ goto st43;
+ goto tr79;
+st44:
if ( ++p == pe )
- goto _test_eof23;
-case 23:
+ goto _test_eof44;
+case 44:
if ( (*p) == 46 )
- goto st24;
+ goto st45;
if ( 48 <= (*p) && (*p) <= 57 )
- goto st22;
- goto tr38;
-st24:
+ goto st43;
+ goto tr74;
+st45:
if ( ++p == pe )
- goto _test_eof24;
-case 24:
+ goto _test_eof45;
+case 45:
if ( (*p) == 46 )
- goto tr7;
- goto tr38;
-tr33:
+ goto tr17;
+ goto tr74;
+tr69:
#line 1 "NONE"
{te = p+1;}
#line 4 "ext/lexerc/lexerc.rl"
{
if (regexp_possible == Qfalse) {
emit_operator;
- {goto st17;}
+ {goto st37;}
}
}
- goto st25;
-st25:
+ goto st46;
+st46:
if ( ++p == pe )
- goto _test_eof25;
-case 25:
-#line 435 "ext/lexerc/lexerc.c"
+ goto _test_eof46;
+case 46:
+#line 818 "ext/lexerc/lexerc.c"
switch( (*p) ) {
- case 47: goto st26;
- case 92: goto st10;
+ case 47: goto st47;
+ case 92: goto st16;
}
- goto st9;
-st9:
+ goto st15;
+st15:
if ( ++p == pe )
- goto _test_eof9;
-case 9:
+ goto _test_eof15;
+case 15:
switch( (*p) ) {
- case 47: goto st26;
- case 92: goto st10;
+ case 47: goto st47;
+ case 92: goto st16;
}
- goto st9;
-st26:
+ goto st15;
+st47:
if ( ++p == pe )
- goto _test_eof26;
-case 26:
+ goto _test_eof47;
+case 47:
if ( (*p) > 90 ) {
if ( 97 <= (*p) && (*p) <= 122 )
- goto st26;
+ goto st47;
} else if ( (*p) >= 65 )
- goto st26;
- goto tr44;
-st10:
+ goto st47;
+ goto tr81;
+st16:
if ( ++p == pe )
- goto _test_eof10;
-case 10:
- goto st9;
-st27:
+ goto _test_eof16;
+case 16:
+ goto st15;
+st48:
if ( ++p == pe )
- goto _test_eof27;
-case 27:
+ goto _test_eof48;
+case 48:
switch( (*p) ) {
- case 33: goto tr46;
- case 63: goto tr46;
- case 95: goto st27;
+ case 33: goto tr83;
+ case 63: goto tr83;
+ case 95: goto st48;
}
if ( (*p) < 65 ) {
if ( 48 <= (*p) && (*p) <= 57 )
- goto st27;
+ goto st48;
} else if ( (*p) > 90 ) {
if ( 97 <= (*p) && (*p) <= 122 )
- goto st27;
+ goto st48;
} else
- goto st27;
- goto tr45;
-st11:
+ goto st48;
+ goto tr82;
+st17:
if ( ++p == pe )
- goto _test_eof11;
-case 11:
+ goto _test_eof17;
+case 17:
if ( (*p) == 124 )
- goto tr7;
+ goto tr17;
goto st0;
-st28:
+st49:
if ( ++p == pe )
- goto _test_eof28;
-case 28:
+ goto _test_eof49;
+case 49:
if ( (*p) == 125 )
- goto tr47;
- goto tr38;
-tr18:
-#line 87 "lib/hotcell/lexer.rl"
+ goto tr84;
+ goto tr74;
+tr27:
+#line 106 "lib/hotcell/lexer.rl"
{{p = ((te))-1;}{ emit_comment; }}
- goto st29;
-tr19:
-#line 86 "lib/hotcell/lexer.rl"
+ goto st50;
+tr28:
+#line 105 "lib/hotcell/lexer.rl"
{te = p+1;{ emit_comment; {cs = stack[--top];goto _again;} }}
- goto st29;
-tr50:
-#line 87 "lib/hotcell/lexer.rl"
+ goto st50;
+tr87:
+#line 106 "lib/hotcell/lexer.rl"
{te = p;p--;{ emit_comment; }}
- goto st29;
-st29:
+ goto st50;
+st50:
#line 1 "NONE"
{ts = 0;}
if ( ++p == pe )
- goto _test_eof29;
-case 29:
+ goto _test_eof50;
+case 50:
#line 1 "NONE"
{ts = p;}
-#line 517 "ext/lexerc/lexerc.c"
+#line 900 "ext/lexerc/lexerc.c"
if ( (*p) == 35 )
- goto tr49;
- goto st30;
-st30:
+ goto tr86;
+ goto st51;
+st51:
if ( ++p == pe )
- goto _test_eof30;
-case 30:
+ goto _test_eof51;
+case 51:
if ( (*p) == 35 )
- goto tr50;
- goto st30;
-tr49:
+ goto tr87;
+ goto st51;
+tr86:
#line 1 "NONE"
{te = p+1;}
- goto st31;
-st31:
+ goto st52;
+st52:
if ( ++p == pe )
- goto _test_eof31;
-case 31:
-#line 536 "ext/lexerc/lexerc.c"
+ goto _test_eof52;
+case 52:
+#line 919 "ext/lexerc/lexerc.c"
if ( (*p) == 125 )
- goto st12;
- goto tr50;
-st12:
+ goto st18;
+ goto tr87;
+st18:
if ( ++p == pe )
- goto _test_eof12;
-case 12:
+ goto _test_eof18;
+case 18:
if ( (*p) == 125 )
- goto tr19;
- goto tr18;
+ goto tr28;
+ goto tr27;
}
- _test_eof13: cs = 13; goto _test_eof;
- _test_eof14: cs = 14; goto _test_eof;
- _test_eof15: cs = 15; goto _test_eof;
- _test_eof16: cs = 16; goto _test_eof;
- _test_eof1: cs = 1; goto _test_eof;
- _test_eof17: cs = 17; goto _test_eof;
- _test_eof18: cs = 18; goto _test_eof;
- _test_eof2: cs = 2; goto _test_eof;
- _test_eof3: cs = 3; goto _test_eof;
_test_eof19: cs = 19; goto _test_eof;
- _test_eof4: cs = 4; goto _test_eof;
- _test_eof5: cs = 5; goto _test_eof;
- _test_eof6: cs = 6; goto _test_eof;
- _test_eof7: cs = 7; goto _test_eof;
_test_eof20: cs = 20; goto _test_eof;
_test_eof21: cs = 21; goto _test_eof;
- _test_eof8: cs = 8; goto _test_eof;
_test_eof22: cs = 22; goto _test_eof;
+ _test_eof1: cs = 1; goto _test_eof;
_test_eof23: cs = 23; goto _test_eof;
_test_eof24: cs = 24; goto _test_eof;
+ _test_eof2: cs = 2; goto _test_eof;
_test_eof25: cs = 25; goto _test_eof;
- _test_eof9: cs = 9; goto _test_eof;
_test_eof26: cs = 26; goto _test_eof;
- _test_eof10: cs = 10; goto _test_eof;
_test_eof27: cs = 27; goto _test_eof;
- _test_eof11: cs = 11; goto _test_eof;
_test_eof28: cs = 28; goto _test_eof;
+ _test_eof3: cs = 3; goto _test_eof;
+ _test_eof4: cs = 4; goto _test_eof;
+ _test_eof5: cs = 5; goto _test_eof;
_test_eof29: cs = 29; goto _test_eof;
_test_eof30: cs = 30; goto _test_eof;
+ _test_eof6: cs = 6; goto _test_eof;
_test_eof31: cs = 31; goto _test_eof;
+ _test_eof32: cs = 32; goto _test_eof;
+ _test_eof33: cs = 33; goto _test_eof;
+ _test_eof34: cs = 34; goto _test_eof;
+ _test_eof7: cs = 7; goto _test_eof;
+ _test_eof35: cs = 35; goto _test_eof;
+ _test_eof8: cs = 8; goto _test_eof;
+ _test_eof36: cs = 36; goto _test_eof;
+ _test_eof9: cs = 9; goto _test_eof;
+ _test_eof37: cs = 37; goto _test_eof;
+ _test_eof38: cs = 38; goto _test_eof;
+ _test_eof39: cs = 39; goto _test_eof;
+ _test_eof40: cs = 40; goto _test_eof;
+ _test_eof10: cs = 10; goto _test_eof;
+ _test_eof11: cs = 11; goto _test_eof;
_test_eof12: cs = 12; goto _test_eof;
+ _test_eof13: cs = 13; goto _test_eof;
+ _test_eof41: cs = 41; goto _test_eof;
+ _test_eof42: cs = 42; goto _test_eof;
+ _test_eof14: cs = 14; goto _test_eof;
+ _test_eof43: cs = 43; goto _test_eof;
+ _test_eof44: cs = 44; goto _test_eof;
+ _test_eof45: cs = 45; goto _test_eof;
+ _test_eof46: cs = 46; goto _test_eof;
+ _test_eof15: cs = 15; goto _test_eof;
+ _test_eof47: cs = 47; goto _test_eof;
+ _test_eof16: cs = 16; goto _test_eof;
+ _test_eof48: cs = 48; goto _test_eof;
+ _test_eof17: cs = 17; goto _test_eof;
+ _test_eof49: cs = 49; goto _test_eof;
+ _test_eof50: cs = 50; goto _test_eof;
+ _test_eof51: cs = 51; goto _test_eof;
+ _test_eof52: cs = 52; goto _test_eof;
+ _test_eof18: cs = 18; goto _test_eof;
_test_eof: {}
if ( p == eof )
{
switch ( cs ) {
- case 14: goto tr22;
- case 15: goto tr22;
- case 16: goto tr24;
+ case 20: goto tr31;
+ case 21: goto tr31;
+ case 22: goto tr33;
case 1: goto tr0;
- case 18: goto tr38;
- case 19: goto tr39;
- case 4: goto tr5;
- case 20: goto tr38;
- case 21: goto tr12;
- case 8: goto tr12;
- case 22: goto tr42;
- case 23: goto tr38;
- case 24: goto tr38;
- case 25: goto tr38;
- case 9: goto tr14;
- case 26: goto tr44;
- case 10: goto tr14;
- case 27: goto tr45;
- case 28: goto tr38;
- case 30: goto tr50;
- case 31: goto tr50;
- case 12: goto tr18;
- case 6:
+ case 24: goto tr39;
+ case 2: goto tr2;
+ case 25: goto tr39;
+ case 27: goto tr54;
+ case 28: goto tr55;
+ case 29: goto tr54;
+ case 30: goto tr9;
+ case 6: goto tr9;
+ case 31: goto tr57;
+ case 32: goto tr54;
+ case 33: goto tr54;
+ case 34: goto tr54;
+ case 7: goto tr11;
+ case 35: goto tr59;
+ case 8: goto tr11;
+ case 36: goto tr60;
+ case 38: goto tr74;
+ case 39: goto tr75;
+ case 40: goto tr76;
+ case 10: goto tr15;
+ case 41: goto tr74;
+ case 42: goto tr21;
+ case 14: goto tr21;
+ case 43: goto tr79;
+ case 44: goto tr74;
+ case 45: goto tr74;
+ case 46: goto tr74;
+ case 15: goto tr23;
+ case 47: goto tr81;
+ case 16: goto tr23;
+ case 48: goto tr82;
+ case 49: goto tr74;
+ case 51: goto tr87;
+ case 52: goto tr87;
+ case 18: goto tr27;
+ case 4:
+ case 12:
#line 46 "lib/hotcell/lexer.rl"
{ raise_unterminated_string; }
break;
- case 2:
-#line 50 "lib/hotcell/lexer.rl"
- { raise_unterminated_string; }
- break;
-#line 614 "ext/lexerc/lexerc.c"
+#line 1032 "ext/lexerc/lexerc.c"
}
}
_out: {}
}
-#line 47 "ext/lexerc/lexerc.rl"
+#line 76 "ext/lexerc/lexerc.rl"
free(stack);
if (ts > 0 && ((ts - data) < (pe - data - 1))) {
raise_unexpected_symbol;
+ }
+
+ if (cs == hotcell_lexer_en_dstring) {
+ ts = data + dstring_start;
+ raise_unterminated_string;
}
return rb_iv_get(self, "@token_array");
}