summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharles Oliver Nutter <headius@headius.com>2011-12-20 09:11:53 -0600
committerCharles Oliver Nutter <headius@headius.com>2011-12-20 09:11:53 -0600
commit3c7c29215d18d25fff3d3af2d599f90894c52c72 (patch)
tree8fe362b7fdc687861acc3799ee749a6d8ef85128
parentd44d02c2e2f84ce0c57be7819c925c822ce614f3 (diff)
downloadjson-headius-jruby_perf_tweaks.tar.gz
Only allocate a single ParserResult, and pass it along the stack.headius-jruby_perf_tweaks
-rw-r--r--java/src/json/ext/Parser.java215
-rw-r--r--java/src/json/ext/Parser.rl96
2 files changed, 170 insertions, 141 deletions
diff --git a/java/src/json/ext/Parser.java b/java/src/json/ext/Parser.java
index adb227f..7178c16 100644
--- a/java/src/json/ext/Parser.java
+++ b/java/src/json/ext/Parser.java
@@ -84,13 +84,13 @@ public class Parser extends RubyObject {
* The result of the successful parsing. Should never be
* <code>null</code>.
*/
- final IRubyObject result;
+ IRubyObject result;
/**
* The point where the parser returned.
*/
- final int p;
+ int p;
- ParserResult(IRubyObject result, int p) {
+ void update(IRubyObject result, int p) {
this.result = result;
this.p = p;
}
@@ -456,7 +456,7 @@ static final int JSON_value_en_main = 1;
// line 467 "Parser.rl"
- ParserResult parseValue(int p, int pe) {
+ void parseValue(ParserResult res, int p, int pe) {
int cs = EVIL;
IRubyObject result = null;
@@ -615,13 +615,13 @@ case 1:
throw unexpectedToken(p, pe);
}
}
- ParserResult res = parseFloat(p, pe);
- if (res != null) {
+ parseFloat(res, p, pe);
+ if (res.result != null) {
result = res.result;
{p = (( res.p))-1;}
}
- res = parseInteger(p, pe);
- if (res != null) {
+ parseInteger(res, p, pe);
+ if (res.result != null) {
result = res.result;
{p = (( res.p))-1;}
}
@@ -632,8 +632,8 @@ case 1:
case 6:
// line 418 "Parser.rl"
{
- ParserResult res = parseString(p, pe);
- if (res == null) {
+ parseString(res, p, pe);
+ if (res.result == null) {
p--;
{ p += 1; _goto_targ = 5; if (true) continue _goto;}
} else {
@@ -646,9 +646,9 @@ case 1:
// line 428 "Parser.rl"
{
currentNesting++;
- ParserResult res = parseArray(p, pe);
+ parseArray(res, p, pe);
currentNesting--;
- if (res == null) {
+ if (res.result == null) {
p--;
{ p += 1; _goto_targ = 5; if (true) continue _goto;}
} else {
@@ -661,9 +661,9 @@ case 1:
// line 440 "Parser.rl"
{
currentNesting++;
- ParserResult res = parseObject(p, pe);
+ parseObject(res, p, pe);
currentNesting--;
- if (res == null) {
+ if (res.result == null) {
p--;
{ p += 1; _goto_targ = 5; if (true) continue _goto;}
} else {
@@ -695,9 +695,9 @@ case 5:
// line 475 "Parser.rl"
if (cs >= JSON_value_first_final && result != null) {
- return new ParserResult(result, p);
+ res.update(result, p);
} else {
- return null;
+ res.update(null, p);
}
}
@@ -804,26 +804,30 @@ static final int JSON_integer_en_main = 1;
// line 494 "Parser.rl"
- ParserResult parseInteger(int p, int pe) {
+ void parseInteger(ParserResult res, int p, int pe) {
int new_p = parseIntegerInternal(p, pe);
- if (new_p == -1) return null;
+ if (new_p == -1) {
+ res.update(null, p);
+ return;
+ }
RubyInteger number = createInteger(p, new_p);
- return new ParserResult(number, new_p + 1);
+ res.update(number, new_p + 1);
+ return;
}
int parseIntegerInternal(int p, int pe) {
int cs = EVIL;
-// line 819 "Parser.java"
+// line 823 "Parser.java"
{
cs = JSON_integer_start;
}
-// line 507 "Parser.rl"
+// line 511 "Parser.rl"
int memo = p;
-// line 827 "Parser.java"
+// line 831 "Parser.java"
{
int _klen;
int _trans = 0;
@@ -910,7 +914,7 @@ case 1:
{ p += 1; _goto_targ = 5; if (true) continue _goto;}
}
break;
-// line 914 "Parser.java"
+// line 918 "Parser.java"
}
}
}
@@ -930,7 +934,7 @@ case 5:
break; }
}
-// line 509 "Parser.rl"
+// line 513 "Parser.rl"
if (cs < JSON_integer_first_final) {
return -1;
@@ -942,13 +946,17 @@ case 5:
RubyInteger createInteger(int p, int new_p) {
Ruby runtime = getRuntime();
ByteList num = absSubSequence(p, new_p);
+ return bytesToInum(runtime, num);
+ }
+
+ RubyInteger bytesToInum(Ruby runtime, ByteList num) {
return runtime.is1_9() ?
ConvertBytes.byteListToInum19(runtime, num, 10, true) :
ConvertBytes.byteListToInum(runtime, num, 10, true);
}
-// line 952 "Parser.java"
+// line 960 "Parser.java"
private static byte[] init__JSON_float_actions_0()
{
return new byte [] {
@@ -1050,29 +1058,33 @@ static final int JSON_float_error = 0;
static final int JSON_float_en_main = 1;
-// line 540 "Parser.rl"
+// line 548 "Parser.rl"
- ParserResult parseFloat(int p, int pe) {
+ void parseFloat(ParserResult res, int p, int pe) {
int new_p = parseFloatInternal(p, pe);
- if (new_p == -1) return null;
+ if (new_p == -1) {
+ res.update(null, p);
+ return;
+ }
RubyFloat number = createFloat(p, new_p);
- return new ParserResult(number, new_p + 1);
+ res.update(number, new_p + 1);
+ return;
}
int parseFloatInternal(int p, int pe) {
int cs = EVIL;
-// line 1068 "Parser.java"
+// line 1080 "Parser.java"
{
cs = JSON_float_start;
}
-// line 553 "Parser.rl"
+// line 565 "Parser.rl"
int memo = p;
-// line 1076 "Parser.java"
+// line 1088 "Parser.java"
{
int _klen;
int _trans = 0;
@@ -1153,13 +1165,13 @@ case 1:
switch ( _JSON_float_actions[_acts++] )
{
case 0:
-// line 531 "Parser.rl"
+// line 539 "Parser.rl"
{
p--;
{ p += 1; _goto_targ = 5; if (true) continue _goto;}
}
break;
-// line 1163 "Parser.java"
+// line 1175 "Parser.java"
}
}
}
@@ -1179,7 +1191,7 @@ case 5:
break; }
}
-// line 555 "Parser.rl"
+// line 567 "Parser.rl"
if (cs < JSON_float_first_final) {
return -1;
@@ -1195,7 +1207,7 @@ case 5:
}
-// line 1199 "Parser.java"
+// line 1211 "Parser.java"
private static byte[] init__JSON_string_actions_0()
{
return new byte [] {
@@ -1297,23 +1309,23 @@ static final int JSON_string_error = 0;
static final int JSON_string_en_main = 1;
-// line 600 "Parser.rl"
+// line 612 "Parser.rl"
- ParserResult parseString(int p, int pe) {
+ void parseString(ParserResult res, int p, int pe) {
int cs = EVIL;
IRubyObject result = null;
-// line 1309 "Parser.java"
+// line 1321 "Parser.java"
{
cs = JSON_string_start;
}
-// line 607 "Parser.rl"
+// line 619 "Parser.rl"
int memo = p;
-// line 1317 "Parser.java"
+// line 1329 "Parser.java"
{
int _klen;
int _trans = 0;
@@ -1394,7 +1406,7 @@ case 1:
switch ( _JSON_string_actions[_acts++] )
{
case 0:
-// line 575 "Parser.rl"
+// line 587 "Parser.rl"
{
int offset = byteList.begin();
ByteList decoded = decoder.decode(byteList, memo + 1 - offset,
@@ -1409,13 +1421,13 @@ case 1:
}
break;
case 1:
-// line 588 "Parser.rl"
+// line 600 "Parser.rl"
{
p--;
{ p += 1; _goto_targ = 5; if (true) continue _goto;}
}
break;
-// line 1419 "Parser.java"
+// line 1431 "Parser.java"
}
}
}
@@ -1435,7 +1447,7 @@ case 5:
break; }
}
-// line 609 "Parser.rl"
+// line 621 "Parser.rl"
if (parser.createAdditions) {
RubyHash match_string = parser.match_string;
@@ -1463,14 +1475,14 @@ case 5:
}
if (cs >= JSON_string_first_final && result != null) {
- return new ParserResult(result, p + 1);
+ res.update(result, p + 1);
} else {
- return null;
+ res.update(null, p + 1);
}
}
-// line 1474 "Parser.java"
+// line 1486 "Parser.java"
private static byte[] init__JSON_array_actions_0()
{
return new byte [] {
@@ -1583,10 +1595,10 @@ static final int JSON_array_error = 0;
static final int JSON_array_en_main = 1;
-// line 679 "Parser.rl"
+// line 691 "Parser.rl"
- ParserResult parseArray(int p, int pe) {
+ void parseArray(ParserResult res, int p, int pe) {
int cs = EVIL;
if (parser.maxNesting > 0 && currentNesting > parser.maxNesting) {
@@ -1605,14 +1617,14 @@ static final int JSON_array_en_main = 1;
}
-// line 1609 "Parser.java"
+// line 1621 "Parser.java"
{
cs = JSON_array_start;
}
-// line 700 "Parser.rl"
+// line 712 "Parser.rl"
-// line 1616 "Parser.java"
+// line 1628 "Parser.java"
{
int _klen;
int _trans = 0;
@@ -1693,10 +1705,10 @@ case 1:
switch ( _JSON_array_actions[_acts++] )
{
case 0:
-// line 648 "Parser.rl"
+// line 660 "Parser.rl"
{
- ParserResult res = parseValue(p, pe);
- if (res == null) {
+ parseValue(res, p, pe);
+ if (res.result == null) {
p--;
{ p += 1; _goto_targ = 5; if (true) continue _goto;}
} else {
@@ -1710,13 +1722,13 @@ case 1:
}
break;
case 1:
-// line 663 "Parser.rl"
+// line 675 "Parser.rl"
{
p--;
{ p += 1; _goto_targ = 5; if (true) continue _goto;}
}
break;
-// line 1720 "Parser.java"
+// line 1732 "Parser.java"
}
}
}
@@ -1736,17 +1748,17 @@ case 5:
break; }
}
-// line 701 "Parser.rl"
+// line 713 "Parser.rl"
if (cs >= JSON_array_first_final) {
- return new ParserResult(result, p + 1);
+ res.update(result, p + 1);
} else {
throw unexpectedToken(p, pe);
}
}
-// line 1750 "Parser.java"
+// line 1762 "Parser.java"
private static byte[] init__JSON_object_actions_0()
{
return new byte [] {
@@ -1869,10 +1881,10 @@ static final int JSON_object_error = 0;
static final int JSON_object_en_main = 1;
-// line 760 "Parser.rl"
+// line 772 "Parser.rl"
- ParserResult parseObject(int p, int pe) {
+ void parseObject(ParserResult res, int p, int pe) {
int cs = EVIL;
IRubyObject lastName = null;
@@ -1892,14 +1904,14 @@ static final int JSON_object_en_main = 1;
}
-// line 1896 "Parser.java"
+// line 1908 "Parser.java"
{
cs = JSON_object_start;
}
-// line 782 "Parser.rl"
+// line 794 "Parser.rl"
-// line 1903 "Parser.java"
+// line 1915 "Parser.java"
{
int _klen;
int _trans = 0;
@@ -1980,10 +1992,10 @@ case 1:
switch ( _JSON_object_actions[_acts++] )
{
case 0:
-// line 715 "Parser.rl"
+// line 727 "Parser.rl"
{
- ParserResult res = parseValue(p, pe);
- if (res == null) {
+ parseValue(res, p, pe);
+ if (res.result == null) {
p--;
{ p += 1; _goto_targ = 5; if (true) continue _goto;}
} else {
@@ -1997,10 +2009,10 @@ case 1:
}
break;
case 1:
-// line 730 "Parser.rl"
+// line 742 "Parser.rl"
{
- ParserResult res = parseString(p, pe);
- if (res == null) {
+ parseString(res, p, pe);
+ if (res.result == null) {
p--;
{ p += 1; _goto_targ = 5; if (true) continue _goto;}
} else {
@@ -2017,13 +2029,13 @@ case 1:
}
break;
case 2:
-// line 748 "Parser.rl"
+// line 760 "Parser.rl"
{
p--;
{ p += 1; _goto_targ = 5; if (true) continue _goto;}
}
break;
-// line 2027 "Parser.java"
+// line 2039 "Parser.java"
}
}
}
@@ -2043,10 +2055,11 @@ case 5:
break; }
}
-// line 783 "Parser.rl"
+// line 795 "Parser.rl"
if (cs < JSON_object_first_final) {
- return null;
+ res.update(null, p + 1);
+ return;
}
IRubyObject returnedResult = result;
@@ -2065,11 +2078,11 @@ case 5:
}
}
}
- return new ParserResult(returnedResult, p + 1);
+ res.update(returnedResult, p + 1);
}
-// line 2073 "Parser.java"
+// line 2085 "Parser.java"
private static byte[] init__JSON_actions_0()
{
return new byte [] {
@@ -2173,25 +2186,26 @@ static final int JSON_error = 0;
static final int JSON_en_main = 1;
-// line 841 "Parser.rl"
+// line 853 "Parser.rl"
public IRubyObject parseStrict() {
int cs = EVIL;
int p, pe;
IRubyObject result = null;
+ ParserResult res = new ParserResult();
-// line 2186 "Parser.java"
+// line 2199 "Parser.java"
{
cs = JSON_start;
}
-// line 849 "Parser.rl"
+// line 862 "Parser.rl"
p = byteList.begin();
pe = p + byteList.length();
-// line 2195 "Parser.java"
+// line 2208 "Parser.java"
{
int _klen;
int _trans = 0;
@@ -2272,11 +2286,11 @@ case 1:
switch ( _JSON_actions[_acts++] )
{
case 0:
-// line 813 "Parser.rl"
+// line 825 "Parser.rl"
{
currentNesting = 1;
- ParserResult res = parseObject(p, pe);
- if (res == null) {
+ parseObject(res, p, pe);
+ if (res.result == null) {
p--;
{ p += 1; _goto_targ = 5; if (true) continue _goto;}
} else {
@@ -2286,11 +2300,11 @@ case 1:
}
break;
case 1:
-// line 825 "Parser.rl"
+// line 837 "Parser.rl"
{
currentNesting = 1;
- ParserResult res = parseArray(p, pe);
- if (res == null) {
+ parseArray(res, p, pe);
+ if (res.result == null) {
p--;
{ p += 1; _goto_targ = 5; if (true) continue _goto;}
} else {
@@ -2299,7 +2313,7 @@ case 1:
}
}
break;
-// line 2303 "Parser.java"
+// line 2316 "Parser.java"
}
}
}
@@ -2319,7 +2333,7 @@ case 5:
break; }
}
-// line 852 "Parser.rl"
+// line 865 "Parser.rl"
if (cs >= JSON_first_final && p == pe) {
return result;
@@ -2329,7 +2343,7 @@ case 5:
}
-// line 2333 "Parser.java"
+// line 2346 "Parser.java"
private static byte[] init__JSON_quirks_mode_actions_0()
{
return new byte [] {
@@ -2432,25 +2446,26 @@ static final int JSON_quirks_mode_error = 0;
static final int JSON_quirks_mode_en_main = 1;
-// line 880 "Parser.rl"
+// line 893 "Parser.rl"
public IRubyObject parseQuirksMode() {
int cs = EVIL;
int p, pe;
IRubyObject result = null;
+ ParserResult res = new ParserResult();
-// line 2445 "Parser.java"
+// line 2459 "Parser.java"
{
cs = JSON_quirks_mode_start;
}
-// line 888 "Parser.rl"
+// line 902 "Parser.rl"
p = byteList.begin();
pe = p + byteList.length();
-// line 2454 "Parser.java"
+// line 2468 "Parser.java"
{
int _klen;
int _trans = 0;
@@ -2531,10 +2546,10 @@ case 1:
switch ( _JSON_quirks_mode_actions[_acts++] )
{
case 0:
-// line 866 "Parser.rl"
+// line 879 "Parser.rl"
{
- ParserResult res = parseValue(p, pe);
- if (res == null) {
+ parseValue(res, p, pe);
+ if (res.result == null) {
p--;
{ p += 1; _goto_targ = 5; if (true) continue _goto;}
} else {
@@ -2543,7 +2558,7 @@ case 1:
}
}
break;
-// line 2547 "Parser.java"
+// line 2561 "Parser.java"
}
}
}
@@ -2563,7 +2578,7 @@ case 5:
break; }
}
-// line 891 "Parser.rl"
+// line 905 "Parser.rl"
if (cs >= JSON_quirks_mode_first_final && p == pe) {
return result;
diff --git a/java/src/json/ext/Parser.rl b/java/src/json/ext/Parser.rl
index 9555138..bee52c8 100644
--- a/java/src/json/ext/Parser.rl
+++ b/java/src/json/ext/Parser.rl
@@ -82,13 +82,13 @@ public class Parser extends RubyObject {
* The result of the successful parsing. Should never be
* <code>null</code>.
*/
- final IRubyObject result;
+ IRubyObject result;
/**
* The point where the parser returned.
*/
- final int p;
+ int p;
- ParserResult(IRubyObject result, int p) {
+ void update(IRubyObject result, int p) {
this.result = result;
this.p = p;
}
@@ -402,13 +402,13 @@ public class Parser extends RubyObject {
throw unexpectedToken(p, pe);
}
}
- ParserResult res = parseFloat(fpc, pe);
- if (res != null) {
+ parseFloat(res, fpc, pe);
+ if (res.result != null) {
result = res.result;
fexec res.p;
}
- res = parseInteger(fpc, pe);
- if (res != null) {
+ parseInteger(res, fpc, pe);
+ if (res.result != null) {
result = res.result;
fexec res.p;
}
@@ -416,8 +416,8 @@ public class Parser extends RubyObject {
fbreak;
}
action parse_string {
- ParserResult res = parseString(fpc, pe);
- if (res == null) {
+ parseString(res, fpc, pe);
+ if (res.result == null) {
fhold;
fbreak;
} else {
@@ -427,9 +427,9 @@ public class Parser extends RubyObject {
}
action parse_array {
currentNesting++;
- ParserResult res = parseArray(fpc, pe);
+ parseArray(res, fpc, pe);
currentNesting--;
- if (res == null) {
+ if (res.result == null) {
fhold;
fbreak;
} else {
@@ -439,9 +439,9 @@ public class Parser extends RubyObject {
}
action parse_object {
currentNesting++;
- ParserResult res = parseObject(fpc, pe);
+ parseObject(res, fpc, pe);
currentNesting--;
- if (res == null) {
+ if (res.result == null) {
fhold;
fbreak;
} else {
@@ -466,7 +466,7 @@ public class Parser extends RubyObject {
) %*exit;
}%%
- ParserResult parseValue(int p, int pe) {
+ void parseValue(ParserResult res, int p, int pe) {
int cs = EVIL;
IRubyObject result = null;
@@ -474,9 +474,9 @@ public class Parser extends RubyObject {
%% write exec;
if (cs >= JSON_value_first_final && result != null) {
- return new ParserResult(result, p);
+ res.update(result, p);
} else {
- return null;
+ res.update(null, p);
}
}
@@ -493,11 +493,15 @@ public class Parser extends RubyObject {
main := '-'? ( '0' | [1-9][0-9]* ) ( ^[0-9]? @exit );
}%%
- ParserResult parseInteger(int p, int pe) {
+ void parseInteger(ParserResult res, int p, int pe) {
int new_p = parseIntegerInternal(p, pe);
- if (new_p == -1) return null;
+ if (new_p == -1) {
+ res.update(null, p);
+ return;
+ }
RubyInteger number = createInteger(p, new_p);
- return new ParserResult(number, new_p + 1);
+ res.update(number, new_p + 1);
+ return;
}
int parseIntegerInternal(int p, int pe) {
@@ -517,6 +521,10 @@ public class Parser extends RubyObject {
RubyInteger createInteger(int p, int new_p) {
Ruby runtime = getRuntime();
ByteList num = absSubSequence(p, new_p);
+ return bytesToInum(runtime, num);
+ }
+
+ RubyInteger bytesToInum(Ruby runtime, ByteList num) {
return runtime.is1_9() ?
ConvertBytes.byteListToInum19(runtime, num, 10, true) :
ConvertBytes.byteListToInum(runtime, num, 10, true);
@@ -539,11 +547,15 @@ public class Parser extends RubyObject {
( ^[0-9Ee.\-]? @exit );
}%%
- ParserResult parseFloat(int p, int pe) {
+ void parseFloat(ParserResult res, int p, int pe) {
int new_p = parseFloatInternal(p, pe);
- if (new_p == -1) return null;
+ if (new_p == -1) {
+ res.update(null, p);
+ return;
+ }
RubyFloat number = createFloat(p, new_p);
- return new ParserResult(number, new_p + 1);
+ res.update(number, new_p + 1);
+ return;
}
int parseFloatInternal(int p, int pe) {
@@ -599,7 +611,7 @@ public class Parser extends RubyObject {
) '"' @exit;
}%%
- ParserResult parseString(int p, int pe) {
+ void parseString(ParserResult res, int p, int pe) {
int cs = EVIL;
IRubyObject result = null;
@@ -633,9 +645,9 @@ public class Parser extends RubyObject {
}
if (cs >= JSON_string_first_final && result != null) {
- return new ParserResult(result, p + 1);
+ res.update(result, p + 1);
} else {
- return null;
+ res.update(null, p + 1);
}
}
@@ -646,8 +658,8 @@ public class Parser extends RubyObject {
write data;
action parse_value {
- ParserResult res = parseValue(fpc, pe);
- if (res == null) {
+ parseValue(res, fpc, pe);
+ if (res.result == null) {
fhold;
fbreak;
} else {
@@ -678,7 +690,7 @@ public class Parser extends RubyObject {
end_array @exit;
}%%
- ParserResult parseArray(int p, int pe) {
+ void parseArray(ParserResult res, int p, int pe) {
int cs = EVIL;
if (parser.maxNesting > 0 && currentNesting > parser.maxNesting) {
@@ -700,7 +712,7 @@ public class Parser extends RubyObject {
%% write exec;
if (cs >= JSON_array_first_final) {
- return new ParserResult(result, p + 1);
+ res.update(result, p + 1);
} else {
throw unexpectedToken(p, pe);
}
@@ -713,8 +725,8 @@ public class Parser extends RubyObject {
write data;
action parse_value {
- ParserResult res = parseValue(fpc, pe);
- if (res == null) {
+ parseValue(res, fpc, pe);
+ if (res.result == null) {
fhold;
fbreak;
} else {
@@ -728,8 +740,8 @@ public class Parser extends RubyObject {
}
action parse_name {
- ParserResult res = parseString(fpc, pe);
- if (res == null) {
+ parseString(res, fpc, pe);
+ if (res.result == null) {
fhold;
fbreak;
} else {
@@ -759,7 +771,7 @@ public class Parser extends RubyObject {
) @exit;
}%%
- ParserResult parseObject(int p, int pe) {
+ void parseObject(ParserResult res, int p, int pe) {
int cs = EVIL;
IRubyObject lastName = null;
@@ -801,7 +813,7 @@ public class Parser extends RubyObject {
}
}
}
- return new ParserResult(returnedResult, p + 1);
+ res.update(returnedResult, p + 1);
}
%%{
@@ -812,8 +824,8 @@ public class Parser extends RubyObject {
action parse_object {
currentNesting = 1;
- ParserResult res = parseObject(fpc, pe);
- if (res == null) {
+ parseObject(res, fpc, pe);
+ if (res.result == null) {
fhold;
fbreak;
} else {
@@ -824,8 +836,8 @@ public class Parser extends RubyObject {
action parse_array {
currentNesting = 1;
- ParserResult res = parseArray(fpc, pe);
- if (res == null) {
+ parseArray(res, fpc, pe);
+ if (res.result == null) {
fhold;
fbreak;
} else {
@@ -844,6 +856,7 @@ public class Parser extends RubyObject {
int cs = EVIL;
int p, pe;
IRubyObject result = null;
+ ParserResult res = new ParserResult();
%% write init;
p = byteList.begin();
@@ -864,8 +877,8 @@ public class Parser extends RubyObject {
write data;
action parse_value {
- ParserResult res = parseValue(fpc, pe);
- if (res == null) {
+ parseValue(res, fpc, pe);
+ if (res.result == null) {
fhold;
fbreak;
} else {
@@ -883,6 +896,7 @@ public class Parser extends RubyObject {
int cs = EVIL;
int p, pe;
IRubyObject result = null;
+ ParserResult res = new ParserResult();
%% write init;
p = byteList.begin();