delorean_lang 0.3.13 → 0.3.14

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a6ce5a8d0507bc4944cd89a87c50329581822d7d
4
- data.tar.gz: 260f08c48a6fe088038f3c7e8e160e89e9321c7d
3
+ metadata.gz: 76c3314a9357c25e11be73ad6d31ceb959a53d29
4
+ data.tar.gz: cff3207bc7ed0da6aed5c603c2c43cf456b8ff85
5
5
  SHA512:
6
- metadata.gz: 2685983d1af320d54c3d1bec6a20c2940fcf2ebf7917bfa70498c1c13d7d9f5871f2de9432fc4b96412a57e5e84876406d5d885dfe35847d2185ddcd2d48ef8a
7
- data.tar.gz: 005cf4b5f147479e5a9401adaad19f809166dcc08f5d375fa732412109580cb6588b70b31227697fedb6e093d6fa50b2325ebaf21fb3073ddd905438813f35aa
6
+ metadata.gz: ccbb1056dcba01a855712f297bc71db0d0030be2a0a431a1591636ec471bb2c7425f7b69018105c04787fac93eab710e0f88544822b517267b3f06e42fd30455
7
+ data.tar.gz: 4dfbfc73028b59458a9afbe71b4ef90fcd4dc16997460ff32d2bccf5ebda8be990660d5ddedc82c5cb28bcf8f57f53a45e3b0795ec6125a78a28302ea8a393e6
data/delorean.gemspec CHANGED
@@ -16,7 +16,7 @@ Gem::Specification.new do |gem|
16
16
  gem.licenses = ['MIT']
17
17
 
18
18
 
19
- gem.add_dependency "treetop", "~> 1.4"
19
+ gem.add_dependency "treetop", "~> 1.5"
20
20
  gem.add_dependency "activerecord", ">= 3.2"
21
21
  gem.add_development_dependency "rspec", '~> 2.1'
22
22
  gem.add_development_dependency "sqlite3", '~> 1.3'
@@ -23,7 +23,7 @@ module Delorean
23
23
  if node_cache[:line].has_key?(index)
24
24
  cached = node_cache[:line][index]
25
25
  if cached
26
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
26
+ node_cache[:line][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
27
27
  @index = cached.interval.end
28
28
  end
29
29
  return cached
@@ -42,9 +42,9 @@ module Delorean
42
42
  s0 << r2
43
43
  if r2
44
44
  i5, s5 = index, []
45
- if has_terminal?('#', false, index)
46
- r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
47
- @index += 1
45
+ if (match_len = has_terminal?('#', false, index))
46
+ r6 = true
47
+ @index += match_len
48
48
  else
49
49
  terminal_parse_failure('#')
50
50
  r6 = nil
@@ -54,7 +54,7 @@ module Delorean
54
54
  s7, i7 = [], index
55
55
  loop do
56
56
  if index < input_length
57
- r8 = instantiate_node(SyntaxNode,input, index...(index + 1))
57
+ r8 = true
58
58
  @index += 1
59
59
  else
60
60
  terminal_parse_failure("any character")
@@ -179,7 +179,7 @@ module Delorean
179
179
  if node_cache[:formula].has_key?(index)
180
180
  cached = node_cache[:formula][index]
181
181
  if cached
182
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
182
+ node_cache[:formula][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
183
183
  @index = cached.interval.end
184
184
  end
185
185
  return cached
@@ -201,9 +201,9 @@ module Delorean
201
201
  end
202
202
  s1 << r4
203
203
  if r4
204
- if has_terminal?('=?', false, index)
205
- r6 = instantiate_node(SyntaxNode,input, index...(index + 2))
206
- @index += 2
204
+ if (match_len = has_terminal?('=?', false, index))
205
+ r6 = instantiate_node(SyntaxNode,input, index...(index + match_len))
206
+ @index += match_len
207
207
  else
208
208
  terminal_parse_failure('=?')
209
209
  r6 = nil
@@ -233,6 +233,7 @@ module Delorean
233
233
  r1 = nil
234
234
  end
235
235
  if r1
236
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
236
237
  r0 = r1
237
238
  else
238
239
  i10, s10 = index, []
@@ -250,9 +251,9 @@ module Delorean
250
251
  end
251
252
  s10 << r13
252
253
  if r13
253
- if has_terminal?('=?', false, index)
254
- r15 = instantiate_node(SyntaxNode,input, index...(index + 2))
255
- @index += 2
254
+ if (match_len = has_terminal?('=?', false, index))
255
+ r15 = instantiate_node(SyntaxNode,input, index...(index + match_len))
256
+ @index += match_len
256
257
  else
257
258
  terminal_parse_failure('=?')
258
259
  r15 = nil
@@ -269,6 +270,7 @@ module Delorean
269
270
  r10 = nil
270
271
  end
271
272
  if r10
273
+ r10 = SyntaxNode.new(input, (index-1)...index) if r10 == true
272
274
  r0 = r10
273
275
  else
274
276
  i16, s16 = index, []
@@ -286,9 +288,9 @@ module Delorean
286
288
  end
287
289
  s16 << r19
288
290
  if r19
289
- if has_terminal?('=', false, index)
290
- r21 = instantiate_node(SyntaxNode,input, index...(index + 1))
291
- @index += 1
291
+ if (match_len = has_terminal?('=', false, index))
292
+ r21 = true
293
+ @index += match_len
292
294
  else
293
295
  terminal_parse_failure('=')
294
296
  r21 = nil
@@ -318,15 +320,16 @@ module Delorean
318
320
  r16 = nil
319
321
  end
320
322
  if r16
323
+ r16 = SyntaxNode.new(input, (index-1)...index) if r16 == true
321
324
  r0 = r16
322
325
  else
323
326
  i25, s25 = index, []
324
327
  r26 = _nt_class_name
325
328
  s25 << r26
326
329
  if r26
327
- if has_terminal?(':', false, index)
328
- r27 = instantiate_node(SyntaxNode,input, index...(index + 1))
329
- @index += 1
330
+ if (match_len = has_terminal?(':', false, index))
331
+ r27 = true
332
+ @index += match_len
330
333
  else
331
334
  terminal_parse_failure(':')
332
335
  r27 = nil
@@ -345,9 +348,9 @@ module Delorean
345
348
  r32 = _nt_class_name
346
349
  s31 << r32
347
350
  if r32
348
- if has_terminal?('::', false, index)
349
- r33 = instantiate_node(SyntaxNode,input, index...(index + 2))
350
- @index += 2
351
+ if (match_len = has_terminal?('::', false, index))
352
+ r33 = instantiate_node(SyntaxNode,input, index...(index + match_len))
353
+ @index += match_len
351
354
  else
352
355
  terminal_parse_failure('::')
353
356
  r33 = nil
@@ -382,15 +385,16 @@ module Delorean
382
385
  r25 = nil
383
386
  end
384
387
  if r25
388
+ r25 = SyntaxNode.new(input, (index-1)...index) if r25 == true
385
389
  r0 = r25
386
390
  else
387
391
  i35, s35 = index, []
388
392
  r36 = _nt_class_name
389
393
  s35 << r36
390
394
  if r36
391
- if has_terminal?(':', false, index)
392
- r37 = instantiate_node(SyntaxNode,input, index...(index + 1))
393
- @index += 1
395
+ if (match_len = has_terminal?(':', false, index))
396
+ r37 = true
397
+ @index += match_len
394
398
  else
395
399
  terminal_parse_failure(':')
396
400
  r37 = nil
@@ -405,12 +409,13 @@ module Delorean
405
409
  r35 = nil
406
410
  end
407
411
  if r35
412
+ r35 = SyntaxNode.new(input, (index-1)...index) if r35 == true
408
413
  r0 = r35
409
414
  else
410
415
  i38, s38 = index, []
411
- if has_terminal?('import', false, index)
412
- r39 = instantiate_node(SyntaxNode,input, index...(index + 6))
413
- @index += 6
416
+ if (match_len = has_terminal?('import', false, index))
417
+ r39 = instantiate_node(SyntaxNode,input, index...(index + match_len))
418
+ @index += match_len
414
419
  else
415
420
  terminal_parse_failure('import')
416
421
  r39 = nil
@@ -432,6 +437,7 @@ module Delorean
432
437
  r38 = nil
433
438
  end
434
439
  if r38
440
+ r38 = SyntaxNode.new(input, (index-1)...index) if r38 == true
435
441
  r0 = r38
436
442
  else
437
443
  @index = i0
@@ -456,27 +462,29 @@ module Delorean
456
462
  if node_cache[:class_name].has_key?(index)
457
463
  cached = node_cache[:class_name][index]
458
464
  if cached
459
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
465
+ node_cache[:class_name][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
460
466
  @index = cached.interval.end
461
467
  end
462
468
  return cached
463
469
  end
464
470
 
465
471
  i0, s0 = index, []
466
- if has_terminal?('\G[A-Z]', true, index)
472
+ if has_terminal?(@regexps[gr = '\A[A-Z]'] ||= Regexp.new(gr), :regexp, index)
467
473
  r1 = true
468
474
  @index += 1
469
475
  else
476
+ terminal_parse_failure('[A-Z]')
470
477
  r1 = nil
471
478
  end
472
479
  s0 << r1
473
480
  if r1
474
481
  s2, i2 = [], index
475
482
  loop do
476
- if has_terminal?('\G[a-zA-Z0-9_]', true, index)
483
+ if has_terminal?(@regexps[gr = '\A[a-zA-Z0-9_]'] ||= Regexp.new(gr), :regexp, index)
477
484
  r3 = true
478
485
  @index += 1
479
486
  else
487
+ terminal_parse_failure('[a-zA-Z0-9_]')
480
488
  r3 = nil
481
489
  end
482
490
  if r3
@@ -551,7 +559,7 @@ module Delorean
551
559
  if node_cache[:expression].has_key?(index)
552
560
  cached = node_cache[:expression][index]
553
561
  if cached
554
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
562
+ node_cache[:expression][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
555
563
  @index = cached.interval.end
556
564
  end
557
565
  return cached
@@ -559,9 +567,9 @@ module Delorean
559
567
 
560
568
  i0 = index
561
569
  i1, s1 = index, []
562
- if has_terminal?('ERR(', false, index)
563
- r2 = instantiate_node(SyntaxNode,input, index...(index + 4))
564
- @index += 4
570
+ if (match_len = has_terminal?('ERR(', false, index))
571
+ r2 = instantiate_node(SyntaxNode,input, index...(index + match_len))
572
+ @index += match_len
565
573
  else
566
574
  terminal_parse_failure('ERR(')
567
575
  r2 = nil
@@ -587,9 +595,9 @@ module Delorean
587
595
  end
588
596
  s1 << r6
589
597
  if r6
590
- if has_terminal?(')', false, index)
591
- r8 = instantiate_node(SyntaxNode,input, index...(index + 1))
592
- @index += 1
598
+ if (match_len = has_terminal?(')', false, index))
599
+ r8 = true
600
+ @index += match_len
593
601
  else
594
602
  terminal_parse_failure(')')
595
603
  r8 = nil
@@ -607,6 +615,7 @@ module Delorean
607
615
  r1 = nil
608
616
  end
609
617
  if r1
618
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
610
619
  r0 = r1
611
620
  else
612
621
  i9, s9 = index, []
@@ -633,12 +642,13 @@ module Delorean
633
642
  r9 = nil
634
643
  end
635
644
  if r9
645
+ r9 = SyntaxNode.new(input, (index-1)...index) if r9 == true
636
646
  r0 = r9
637
647
  else
638
648
  i14, s14 = index, []
639
- if has_terminal?('if', false, index)
640
- r15 = instantiate_node(SyntaxNode,input, index...(index + 2))
641
- @index += 2
649
+ if (match_len = has_terminal?('if', false, index))
650
+ r15 = instantiate_node(SyntaxNode,input, index...(index + match_len))
651
+ @index += match_len
642
652
  else
643
653
  terminal_parse_failure('if')
644
654
  r15 = nil
@@ -664,9 +674,9 @@ module Delorean
664
674
  end
665
675
  s14 << r19
666
676
  if r19
667
- if has_terminal?('then', false, index)
668
- r21 = instantiate_node(SyntaxNode,input, index...(index + 4))
669
- @index += 4
677
+ if (match_len = has_terminal?('then', false, index))
678
+ r21 = instantiate_node(SyntaxNode,input, index...(index + match_len))
679
+ @index += match_len
670
680
  else
671
681
  terminal_parse_failure('then')
672
682
  r21 = nil
@@ -692,9 +702,9 @@ module Delorean
692
702
  end
693
703
  s14 << r25
694
704
  if r25
695
- if has_terminal?('else', false, index)
696
- r27 = instantiate_node(SyntaxNode,input, index...(index + 4))
697
- @index += 4
705
+ if (match_len = has_terminal?('else', false, index))
706
+ r27 = instantiate_node(SyntaxNode,input, index...(index + match_len))
707
+ @index += match_len
698
708
  else
699
709
  terminal_parse_failure('else')
700
710
  r27 = nil
@@ -729,6 +739,7 @@ module Delorean
729
739
  r14 = nil
730
740
  end
731
741
  if r14
742
+ r14 = SyntaxNode.new(input, (index-1)...index) if r14 == true
732
743
  r0 = r14
733
744
  else
734
745
  i31, s31 = index, []
@@ -768,10 +779,12 @@ module Delorean
768
779
  r31 = nil
769
780
  end
770
781
  if r31
782
+ r31 = SyntaxNode.new(input, (index-1)...index) if r31 == true
771
783
  r0 = r31
772
784
  else
773
785
  r39 = _nt_getattr_exp
774
786
  if r39
787
+ r39 = SyntaxNode.new(input, (index-1)...index) if r39 == true
775
788
  r0 = r39
776
789
  else
777
790
  @index = i0
@@ -802,7 +815,7 @@ module Delorean
802
815
  if node_cache[:getattr_exp].has_key?(index)
803
816
  cached = node_cache[:getattr_exp][index]
804
817
  if cached
805
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
818
+ node_cache[:getattr_exp][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
806
819
  @index = cached.interval.end
807
820
  end
808
821
  return cached
@@ -824,10 +837,12 @@ module Delorean
824
837
  r1 = nil
825
838
  end
826
839
  if r1
840
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
827
841
  r0 = r1
828
842
  else
829
843
  r4 = _nt_value
830
844
  if r4
845
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
831
846
  r0 = r4
832
847
  else
833
848
  @index = i0
@@ -855,7 +870,7 @@ module Delorean
855
870
  if node_cache[:dotted].has_key?(index)
856
871
  cached = node_cache[:dotted][index]
857
872
  if cached
858
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
873
+ node_cache[:dotted][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
859
874
  @index = cached.interval.end
860
875
  end
861
876
  return cached
@@ -922,7 +937,7 @@ module Delorean
922
937
  if node_cache[:dot_exp].has_key?(index)
923
938
  cached = node_cache[:dot_exp][index]
924
939
  if cached
925
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
940
+ node_cache[:dot_exp][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
926
941
  @index = cached.interval.end
927
942
  end
928
943
  return cached
@@ -930,9 +945,9 @@ module Delorean
930
945
 
931
946
  i0 = index
932
947
  i1, s1 = index, []
933
- if has_terminal?('[', false, index)
934
- r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
935
- @index += 1
948
+ if (match_len = has_terminal?('[', false, index))
949
+ r2 = true
950
+ @index += match_len
936
951
  else
937
952
  terminal_parse_failure('[')
938
953
  r2 = nil
@@ -958,9 +973,9 @@ module Delorean
958
973
  end
959
974
  s1 << r6
960
975
  if r6
961
- if has_terminal?(']', false, index)
962
- r8 = instantiate_node(SyntaxNode,input, index...(index + 1))
963
- @index += 1
976
+ if (match_len = has_terminal?(']', false, index))
977
+ r8 = true
978
+ @index += match_len
964
979
  else
965
980
  terminal_parse_failure(']')
966
981
  r8 = nil
@@ -978,12 +993,13 @@ module Delorean
978
993
  r1 = nil
979
994
  end
980
995
  if r1
996
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
981
997
  r0 = r1
982
998
  else
983
999
  i9, s9 = index, []
984
- if has_terminal?('(', false, index)
985
- r10 = instantiate_node(SyntaxNode,input, index...(index + 1))
986
- @index += 1
1000
+ if (match_len = has_terminal?('(', false, index))
1001
+ r10 = true
1002
+ @index += match_len
987
1003
  else
988
1004
  terminal_parse_failure('(')
989
1005
  r10 = nil
@@ -1014,9 +1030,9 @@ module Delorean
1014
1030
  end
1015
1031
  s9 << r15
1016
1032
  if r15
1017
- if has_terminal?(')', false, index)
1018
- r17 = instantiate_node(SyntaxNode,input, index...(index + 1))
1019
- @index += 1
1033
+ if (match_len = has_terminal?(')', false, index))
1034
+ r17 = true
1035
+ @index += match_len
1020
1036
  else
1021
1037
  terminal_parse_failure(')')
1022
1038
  r17 = nil
@@ -1034,12 +1050,13 @@ module Delorean
1034
1050
  r9 = nil
1035
1051
  end
1036
1052
  if r9
1053
+ r9 = SyntaxNode.new(input, (index-1)...index) if r9 == true
1037
1054
  r0 = r9
1038
1055
  else
1039
1056
  i18, s18 = index, []
1040
- if has_terminal?('.', false, index)
1041
- r19 = instantiate_node(SyntaxNode,input, index...(index + 1))
1042
- @index += 1
1057
+ if (match_len = has_terminal?('.', false, index))
1058
+ r19 = true
1059
+ @index += match_len
1043
1060
  else
1044
1061
  terminal_parse_failure('.')
1045
1062
  r19 = nil
@@ -1057,9 +1074,9 @@ module Delorean
1057
1074
  r22 = _nt_identifier
1058
1075
  s18 << r22
1059
1076
  if r22
1060
- if has_terminal?('(', false, index)
1061
- r23 = instantiate_node(SyntaxNode,input, index...(index + 1))
1062
- @index += 1
1077
+ if (match_len = has_terminal?('(', false, index))
1078
+ r23 = true
1079
+ @index += match_len
1063
1080
  else
1064
1081
  terminal_parse_failure('(')
1065
1082
  r23 = nil
@@ -1090,9 +1107,9 @@ module Delorean
1090
1107
  end
1091
1108
  s18 << r28
1092
1109
  if r28
1093
- if has_terminal?(')', false, index)
1094
- r30 = instantiate_node(SyntaxNode,input, index...(index + 1))
1095
- @index += 1
1110
+ if (match_len = has_terminal?(')', false, index))
1111
+ r30 = true
1112
+ @index += match_len
1096
1113
  else
1097
1114
  terminal_parse_failure(')')
1098
1115
  r30 = nil
@@ -1113,12 +1130,13 @@ module Delorean
1113
1130
  r18 = nil
1114
1131
  end
1115
1132
  if r18
1133
+ r18 = SyntaxNode.new(input, (index-1)...index) if r18 == true
1116
1134
  r0 = r18
1117
1135
  else
1118
1136
  i31, s31 = index, []
1119
- if has_terminal?('.', false, index)
1120
- r32 = instantiate_node(SyntaxNode,input, index...(index + 1))
1121
- @index += 1
1137
+ if (match_len = has_terminal?('.', false, index))
1138
+ r32 = true
1139
+ @index += match_len
1122
1140
  else
1123
1141
  terminal_parse_failure('.')
1124
1142
  r32 = nil
@@ -1136,10 +1154,12 @@ module Delorean
1136
1154
  i35 = index
1137
1155
  r36 = _nt_identifier
1138
1156
  if r36
1157
+ r36 = SyntaxNode.new(input, (index-1)...index) if r36 == true
1139
1158
  r35 = r36
1140
1159
  else
1141
1160
  r37 = _nt_integer
1142
1161
  if r37
1162
+ r37 = SyntaxNode.new(input, (index-1)...index) if r37 == true
1143
1163
  r35 = r37
1144
1164
  else
1145
1165
  @index = i35
@@ -1157,6 +1177,7 @@ module Delorean
1157
1177
  r31 = nil
1158
1178
  end
1159
1179
  if r31
1180
+ r31 = SyntaxNode.new(input, (index-1)...index) if r31 == true
1160
1181
  r0 = r31
1161
1182
  else
1162
1183
  @index = i0
@@ -1192,7 +1213,7 @@ module Delorean
1192
1213
  if node_cache[:unpack_args].has_key?(index)
1193
1214
  cached = node_cache[:unpack_args][index]
1194
1215
  if cached
1195
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1216
+ node_cache[:unpack_args][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1196
1217
  @index = cached.interval.end
1197
1218
  end
1198
1219
  return cached
@@ -1211,9 +1232,9 @@ module Delorean
1211
1232
  end
1212
1233
  s3 << r4
1213
1234
  if r4
1214
- if has_terminal?(',', false, index)
1215
- r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
1216
- @index += 1
1235
+ if (match_len = has_terminal?(',', false, index))
1236
+ r6 = true
1237
+ @index += match_len
1217
1238
  else
1218
1239
  terminal_parse_failure(',')
1219
1240
  r6 = nil
@@ -1323,27 +1344,28 @@ module Delorean
1323
1344
  if node_cache[:list_expr].has_key?(index)
1324
1345
  cached = node_cache[:list_expr][index]
1325
1346
  if cached
1326
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1347
+ node_cache[:list_expr][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1327
1348
  @index = cached.interval.end
1328
1349
  end
1329
1350
  return cached
1330
1351
  end
1331
1352
 
1332
1353
  i0 = index
1333
- if has_terminal?('[]', false, index)
1334
- r1 = instantiate_node(ListExpr,input, index...(index + 2))
1335
- @index += 2
1354
+ if (match_len = has_terminal?('[]', false, index))
1355
+ r1 = instantiate_node(ListExpr,input, index...(index + match_len))
1356
+ @index += match_len
1336
1357
  else
1337
1358
  terminal_parse_failure('[]')
1338
1359
  r1 = nil
1339
1360
  end
1340
1361
  if r1
1362
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
1341
1363
  r0 = r1
1342
1364
  else
1343
1365
  i2, s2 = index, []
1344
- if has_terminal?('[', false, index)
1345
- r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
1346
- @index += 1
1366
+ if (match_len = has_terminal?('[', false, index))
1367
+ r3 = true
1368
+ @index += match_len
1347
1369
  else
1348
1370
  terminal_parse_failure('[')
1349
1371
  r3 = nil
@@ -1364,9 +1386,9 @@ module Delorean
1364
1386
  r7 = _nt_sp
1365
1387
  s2 << r7
1366
1388
  if r7
1367
- if has_terminal?('for', false, index)
1368
- r8 = instantiate_node(SyntaxNode,input, index...(index + 3))
1369
- @index += 3
1389
+ if (match_len = has_terminal?('for', false, index))
1390
+ r8 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1391
+ @index += match_len
1370
1392
  else
1371
1393
  terminal_parse_failure('for')
1372
1394
  r8 = nil
@@ -1382,9 +1404,9 @@ module Delorean
1382
1404
  r11 = _nt_sp
1383
1405
  s2 << r11
1384
1406
  if r11
1385
- if has_terminal?('in', false, index)
1386
- r12 = instantiate_node(SyntaxNode,input, index...(index + 2))
1387
- @index += 2
1407
+ if (match_len = has_terminal?('in', false, index))
1408
+ r12 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1409
+ @index += match_len
1388
1410
  else
1389
1411
  terminal_parse_failure('in')
1390
1412
  r12 = nil
@@ -1406,9 +1428,9 @@ module Delorean
1406
1428
  s2 << r15
1407
1429
  if r15
1408
1430
  i18, s18 = index, []
1409
- if has_terminal?('if', false, index)
1410
- r19 = instantiate_node(SyntaxNode,input, index...(index + 2))
1411
- @index += 2
1431
+ if (match_len = has_terminal?('if', false, index))
1432
+ r19 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1433
+ @index += match_len
1412
1434
  else
1413
1435
  terminal_parse_failure('if')
1414
1436
  r19 = nil
@@ -1445,9 +1467,9 @@ module Delorean
1445
1467
  end
1446
1468
  s2 << r17
1447
1469
  if r17
1448
- if has_terminal?(']', false, index)
1449
- r24 = instantiate_node(SyntaxNode,input, index...(index + 1))
1450
- @index += 1
1470
+ if (match_len = has_terminal?(']', false, index))
1471
+ r24 = true
1472
+ @index += match_len
1451
1473
  else
1452
1474
  terminal_parse_failure(']')
1453
1475
  r24 = nil
@@ -1474,12 +1496,13 @@ module Delorean
1474
1496
  r2 = nil
1475
1497
  end
1476
1498
  if r2
1499
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
1477
1500
  r0 = r2
1478
1501
  else
1479
1502
  i25, s25 = index, []
1480
- if has_terminal?('[', false, index)
1481
- r26 = instantiate_node(SyntaxNode,input, index...(index + 1))
1482
- @index += 1
1503
+ if (match_len = has_terminal?('[', false, index))
1504
+ r26 = true
1505
+ @index += match_len
1483
1506
  else
1484
1507
  terminal_parse_failure('[')
1485
1508
  r26 = nil
@@ -1505,9 +1528,9 @@ module Delorean
1505
1528
  end
1506
1529
  s25 << r30
1507
1530
  if r30
1508
- if has_terminal?(']', false, index)
1509
- r32 = instantiate_node(SyntaxNode,input, index...(index + 1))
1510
- @index += 1
1531
+ if (match_len = has_terminal?(']', false, index))
1532
+ r32 = true
1533
+ @index += match_len
1511
1534
  else
1512
1535
  terminal_parse_failure(']')
1513
1536
  r32 = nil
@@ -1525,6 +1548,7 @@ module Delorean
1525
1548
  r25 = nil
1526
1549
  end
1527
1550
  if r25
1551
+ r25 = SyntaxNode.new(input, (index-1)...index) if r25 == true
1528
1552
  r0 = r25
1529
1553
  else
1530
1554
  @index = i0
@@ -1596,27 +1620,28 @@ module Delorean
1596
1620
  if node_cache[:set_expr].has_key?(index)
1597
1621
  cached = node_cache[:set_expr][index]
1598
1622
  if cached
1599
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1623
+ node_cache[:set_expr][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1600
1624
  @index = cached.interval.end
1601
1625
  end
1602
1626
  return cached
1603
1627
  end
1604
1628
 
1605
1629
  i0 = index
1606
- if has_terminal?('{-}', false, index)
1607
- r1 = instantiate_node(SetExpr,input, index...(index + 3))
1608
- @index += 3
1630
+ if (match_len = has_terminal?('{-}', false, index))
1631
+ r1 = instantiate_node(SetExpr,input, index...(index + match_len))
1632
+ @index += match_len
1609
1633
  else
1610
1634
  terminal_parse_failure('{-}')
1611
1635
  r1 = nil
1612
1636
  end
1613
1637
  if r1
1638
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
1614
1639
  r0 = r1
1615
1640
  else
1616
1641
  i2, s2 = index, []
1617
- if has_terminal?('{', false, index)
1618
- r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
1619
- @index += 1
1642
+ if (match_len = has_terminal?('{', false, index))
1643
+ r3 = true
1644
+ @index += match_len
1620
1645
  else
1621
1646
  terminal_parse_failure('{')
1622
1647
  r3 = nil
@@ -1637,9 +1662,9 @@ module Delorean
1637
1662
  r7 = _nt_sp
1638
1663
  s2 << r7
1639
1664
  if r7
1640
- if has_terminal?('for', false, index)
1641
- r8 = instantiate_node(SyntaxNode,input, index...(index + 3))
1642
- @index += 3
1665
+ if (match_len = has_terminal?('for', false, index))
1666
+ r8 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1667
+ @index += match_len
1643
1668
  else
1644
1669
  terminal_parse_failure('for')
1645
1670
  r8 = nil
@@ -1655,9 +1680,9 @@ module Delorean
1655
1680
  r11 = _nt_sp
1656
1681
  s2 << r11
1657
1682
  if r11
1658
- if has_terminal?('in', false, index)
1659
- r12 = instantiate_node(SyntaxNode,input, index...(index + 2))
1660
- @index += 2
1683
+ if (match_len = has_terminal?('in', false, index))
1684
+ r12 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1685
+ @index += match_len
1661
1686
  else
1662
1687
  terminal_parse_failure('in')
1663
1688
  r12 = nil
@@ -1679,9 +1704,9 @@ module Delorean
1679
1704
  s2 << r15
1680
1705
  if r15
1681
1706
  i18, s18 = index, []
1682
- if has_terminal?('if', false, index)
1683
- r19 = instantiate_node(SyntaxNode,input, index...(index + 2))
1684
- @index += 2
1707
+ if (match_len = has_terminal?('if', false, index))
1708
+ r19 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1709
+ @index += match_len
1685
1710
  else
1686
1711
  terminal_parse_failure('if')
1687
1712
  r19 = nil
@@ -1718,9 +1743,9 @@ module Delorean
1718
1743
  end
1719
1744
  s2 << r17
1720
1745
  if r17
1721
- if has_terminal?('}', false, index)
1722
- r24 = instantiate_node(SyntaxNode,input, index...(index + 1))
1723
- @index += 1
1746
+ if (match_len = has_terminal?('}', false, index))
1747
+ r24 = true
1748
+ @index += match_len
1724
1749
  else
1725
1750
  terminal_parse_failure('}')
1726
1751
  r24 = nil
@@ -1747,12 +1772,13 @@ module Delorean
1747
1772
  r2 = nil
1748
1773
  end
1749
1774
  if r2
1775
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
1750
1776
  r0 = r2
1751
1777
  else
1752
1778
  i25, s25 = index, []
1753
- if has_terminal?('{', false, index)
1754
- r26 = instantiate_node(SyntaxNode,input, index...(index + 1))
1755
- @index += 1
1779
+ if (match_len = has_terminal?('{', false, index))
1780
+ r26 = true
1781
+ @index += match_len
1756
1782
  else
1757
1783
  terminal_parse_failure('{')
1758
1784
  r26 = nil
@@ -1778,9 +1804,9 @@ module Delorean
1778
1804
  end
1779
1805
  s25 << r30
1780
1806
  if r30
1781
- if has_terminal?('}', false, index)
1782
- r32 = instantiate_node(SyntaxNode,input, index...(index + 1))
1783
- @index += 1
1807
+ if (match_len = has_terminal?('}', false, index))
1808
+ r32 = true
1809
+ @index += match_len
1784
1810
  else
1785
1811
  terminal_parse_failure('}')
1786
1812
  r32 = nil
@@ -1798,6 +1824,7 @@ module Delorean
1798
1824
  r25 = nil
1799
1825
  end
1800
1826
  if r25
1827
+ r25 = SyntaxNode.new(input, (index-1)...index) if r25 == true
1801
1828
  r0 = r25
1802
1829
  else
1803
1830
  @index = i0
@@ -1873,27 +1900,28 @@ module Delorean
1873
1900
  if node_cache[:hash_expr].has_key?(index)
1874
1901
  cached = node_cache[:hash_expr][index]
1875
1902
  if cached
1876
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1903
+ node_cache[:hash_expr][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1877
1904
  @index = cached.interval.end
1878
1905
  end
1879
1906
  return cached
1880
1907
  end
1881
1908
 
1882
1909
  i0 = index
1883
- if has_terminal?('{}', false, index)
1884
- r1 = instantiate_node(HashExpr,input, index...(index + 2))
1885
- @index += 2
1910
+ if (match_len = has_terminal?('{}', false, index))
1911
+ r1 = instantiate_node(HashExpr,input, index...(index + match_len))
1912
+ @index += match_len
1886
1913
  else
1887
1914
  terminal_parse_failure('{}')
1888
1915
  r1 = nil
1889
1916
  end
1890
1917
  if r1
1918
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
1891
1919
  r0 = r1
1892
1920
  else
1893
1921
  i2, s2 = index, []
1894
- if has_terminal?('{', false, index)
1895
- r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
1896
- @index += 1
1922
+ if (match_len = has_terminal?('{', false, index))
1923
+ r3 = true
1924
+ @index += match_len
1897
1925
  else
1898
1926
  terminal_parse_failure('{')
1899
1927
  r3 = nil
@@ -1919,9 +1947,9 @@ module Delorean
1919
1947
  end
1920
1948
  s2 << r7
1921
1949
  if r7
1922
- if has_terminal?(':', false, index)
1923
- r9 = instantiate_node(SyntaxNode,input, index...(index + 1))
1924
- @index += 1
1950
+ if (match_len = has_terminal?(':', false, index))
1951
+ r9 = true
1952
+ @index += match_len
1925
1953
  else
1926
1954
  terminal_parse_failure(':')
1927
1955
  r9 = nil
@@ -1942,9 +1970,9 @@ module Delorean
1942
1970
  r13 = _nt_sp
1943
1971
  s2 << r13
1944
1972
  if r13
1945
- if has_terminal?('for', false, index)
1946
- r14 = instantiate_node(SyntaxNode,input, index...(index + 3))
1947
- @index += 3
1973
+ if (match_len = has_terminal?('for', false, index))
1974
+ r14 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1975
+ @index += match_len
1948
1976
  else
1949
1977
  terminal_parse_failure('for')
1950
1978
  r14 = nil
@@ -1960,9 +1988,9 @@ module Delorean
1960
1988
  r17 = _nt_sp
1961
1989
  s2 << r17
1962
1990
  if r17
1963
- if has_terminal?('in', false, index)
1964
- r18 = instantiate_node(SyntaxNode,input, index...(index + 2))
1965
- @index += 2
1991
+ if (match_len = has_terminal?('in', false, index))
1992
+ r18 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1993
+ @index += match_len
1966
1994
  else
1967
1995
  terminal_parse_failure('in')
1968
1996
  r18 = nil
@@ -1984,9 +2012,9 @@ module Delorean
1984
2012
  s2 << r21
1985
2013
  if r21
1986
2014
  i24, s24 = index, []
1987
- if has_terminal?('if', false, index)
1988
- r25 = instantiate_node(SyntaxNode,input, index...(index + 2))
1989
- @index += 2
2015
+ if (match_len = has_terminal?('if', false, index))
2016
+ r25 = instantiate_node(SyntaxNode,input, index...(index + match_len))
2017
+ @index += match_len
1990
2018
  else
1991
2019
  terminal_parse_failure('if')
1992
2020
  r25 = nil
@@ -2023,9 +2051,9 @@ module Delorean
2023
2051
  end
2024
2052
  s2 << r23
2025
2053
  if r23
2026
- if has_terminal?('}', false, index)
2027
- r30 = instantiate_node(SyntaxNode,input, index...(index + 1))
2028
- @index += 1
2054
+ if (match_len = has_terminal?('}', false, index))
2055
+ r30 = true
2056
+ @index += match_len
2029
2057
  else
2030
2058
  terminal_parse_failure('}')
2031
2059
  r30 = nil
@@ -2056,12 +2084,13 @@ module Delorean
2056
2084
  r2 = nil
2057
2085
  end
2058
2086
  if r2
2087
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
2059
2088
  r0 = r2
2060
2089
  else
2061
2090
  i31, s31 = index, []
2062
- if has_terminal?('{', false, index)
2063
- r32 = instantiate_node(SyntaxNode,input, index...(index + 1))
2064
- @index += 1
2091
+ if (match_len = has_terminal?('{', false, index))
2092
+ r32 = true
2093
+ @index += match_len
2065
2094
  else
2066
2095
  terminal_parse_failure('{')
2067
2096
  r32 = nil
@@ -2087,9 +2116,9 @@ module Delorean
2087
2116
  end
2088
2117
  s31 << r36
2089
2118
  if r36
2090
- if has_terminal?('}', false, index)
2091
- r38 = instantiate_node(SyntaxNode,input, index...(index + 1))
2092
- @index += 1
2119
+ if (match_len = has_terminal?('}', false, index))
2120
+ r38 = true
2121
+ @index += match_len
2093
2122
  else
2094
2123
  terminal_parse_failure('}')
2095
2124
  r38 = nil
@@ -2107,6 +2136,7 @@ module Delorean
2107
2136
  r31 = nil
2108
2137
  end
2109
2138
  if r31
2139
+ r31 = SyntaxNode.new(input, (index-1)...index) if r31 == true
2110
2140
  r0 = r31
2111
2141
  else
2112
2142
  @index = i0
@@ -2125,171 +2155,187 @@ module Delorean
2125
2155
  if node_cache[:binary_op].has_key?(index)
2126
2156
  cached = node_cache[:binary_op][index]
2127
2157
  if cached
2128
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2158
+ node_cache[:binary_op][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2129
2159
  @index = cached.interval.end
2130
2160
  end
2131
2161
  return cached
2132
2162
  end
2133
2163
 
2134
2164
  i0 = index
2135
- if has_terminal?('==', false, index)
2136
- r1 = instantiate_node(SyntaxNode,input, index...(index + 2))
2137
- @index += 2
2165
+ if (match_len = has_terminal?('==', false, index))
2166
+ r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
2167
+ @index += match_len
2138
2168
  else
2139
2169
  terminal_parse_failure('==')
2140
2170
  r1 = nil
2141
2171
  end
2142
2172
  if r1
2173
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
2143
2174
  r0 = r1
2144
2175
  else
2145
- if has_terminal?('!=', false, index)
2146
- r2 = instantiate_node(SyntaxNode,input, index...(index + 2))
2147
- @index += 2
2176
+ if (match_len = has_terminal?('!=', false, index))
2177
+ r2 = instantiate_node(SyntaxNode,input, index...(index + match_len))
2178
+ @index += match_len
2148
2179
  else
2149
2180
  terminal_parse_failure('!=')
2150
2181
  r2 = nil
2151
2182
  end
2152
2183
  if r2
2184
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
2153
2185
  r0 = r2
2154
2186
  else
2155
- if has_terminal?('>=', false, index)
2156
- r3 = instantiate_node(SyntaxNode,input, index...(index + 2))
2157
- @index += 2
2187
+ if (match_len = has_terminal?('>=', false, index))
2188
+ r3 = instantiate_node(SyntaxNode,input, index...(index + match_len))
2189
+ @index += match_len
2158
2190
  else
2159
2191
  terminal_parse_failure('>=')
2160
2192
  r3 = nil
2161
2193
  end
2162
2194
  if r3
2195
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
2163
2196
  r0 = r3
2164
2197
  else
2165
- if has_terminal?('<=', false, index)
2166
- r4 = instantiate_node(SyntaxNode,input, index...(index + 2))
2167
- @index += 2
2198
+ if (match_len = has_terminal?('<=', false, index))
2199
+ r4 = instantiate_node(SyntaxNode,input, index...(index + match_len))
2200
+ @index += match_len
2168
2201
  else
2169
2202
  terminal_parse_failure('<=')
2170
2203
  r4 = nil
2171
2204
  end
2172
2205
  if r4
2206
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
2173
2207
  r0 = r4
2174
2208
  else
2175
- if has_terminal?('&&', false, index)
2176
- r5 = instantiate_node(SyntaxNode,input, index...(index + 2))
2177
- @index += 2
2209
+ if (match_len = has_terminal?('&&', false, index))
2210
+ r5 = instantiate_node(SyntaxNode,input, index...(index + match_len))
2211
+ @index += match_len
2178
2212
  else
2179
2213
  terminal_parse_failure('&&')
2180
2214
  r5 = nil
2181
2215
  end
2182
2216
  if r5
2217
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
2183
2218
  r0 = r5
2184
2219
  else
2185
- if has_terminal?('||', false, index)
2186
- r6 = instantiate_node(SyntaxNode,input, index...(index + 2))
2187
- @index += 2
2220
+ if (match_len = has_terminal?('||', false, index))
2221
+ r6 = instantiate_node(SyntaxNode,input, index...(index + match_len))
2222
+ @index += match_len
2188
2223
  else
2189
2224
  terminal_parse_failure('||')
2190
2225
  r6 = nil
2191
2226
  end
2192
2227
  if r6
2228
+ r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
2193
2229
  r0 = r6
2194
2230
  else
2195
- if has_terminal?('>', false, index)
2196
- r7 = instantiate_node(SyntaxNode,input, index...(index + 1))
2197
- @index += 1
2231
+ if (match_len = has_terminal?('>', false, index))
2232
+ r7 = true
2233
+ @index += match_len
2198
2234
  else
2199
2235
  terminal_parse_failure('>')
2200
2236
  r7 = nil
2201
2237
  end
2202
2238
  if r7
2239
+ r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
2203
2240
  r0 = r7
2204
2241
  else
2205
- if has_terminal?('<', false, index)
2206
- r8 = instantiate_node(SyntaxNode,input, index...(index + 1))
2207
- @index += 1
2242
+ if (match_len = has_terminal?('<', false, index))
2243
+ r8 = true
2244
+ @index += match_len
2208
2245
  else
2209
2246
  terminal_parse_failure('<')
2210
2247
  r8 = nil
2211
2248
  end
2212
2249
  if r8
2250
+ r8 = SyntaxNode.new(input, (index-1)...index) if r8 == true
2213
2251
  r0 = r8
2214
2252
  else
2215
- if has_terminal?('+', false, index)
2216
- r9 = instantiate_node(SyntaxNode,input, index...(index + 1))
2217
- @index += 1
2253
+ if (match_len = has_terminal?('+', false, index))
2254
+ r9 = true
2255
+ @index += match_len
2218
2256
  else
2219
2257
  terminal_parse_failure('+')
2220
2258
  r9 = nil
2221
2259
  end
2222
2260
  if r9
2261
+ r9 = SyntaxNode.new(input, (index-1)...index) if r9 == true
2223
2262
  r0 = r9
2224
2263
  else
2225
- if has_terminal?('-', false, index)
2226
- r10 = instantiate_node(SyntaxNode,input, index...(index + 1))
2227
- @index += 1
2264
+ if (match_len = has_terminal?('-', false, index))
2265
+ r10 = true
2266
+ @index += match_len
2228
2267
  else
2229
2268
  terminal_parse_failure('-')
2230
2269
  r10 = nil
2231
2270
  end
2232
2271
  if r10
2272
+ r10 = SyntaxNode.new(input, (index-1)...index) if r10 == true
2233
2273
  r0 = r10
2234
2274
  else
2235
- if has_terminal?('*', false, index)
2236
- r11 = instantiate_node(SyntaxNode,input, index...(index + 1))
2237
- @index += 1
2275
+ if (match_len = has_terminal?('*', false, index))
2276
+ r11 = true
2277
+ @index += match_len
2238
2278
  else
2239
2279
  terminal_parse_failure('*')
2240
2280
  r11 = nil
2241
2281
  end
2242
2282
  if r11
2283
+ r11 = SyntaxNode.new(input, (index-1)...index) if r11 == true
2243
2284
  r0 = r11
2244
2285
  else
2245
- if has_terminal?('/', false, index)
2246
- r12 = instantiate_node(SyntaxNode,input, index...(index + 1))
2247
- @index += 1
2286
+ if (match_len = has_terminal?('/', false, index))
2287
+ r12 = true
2288
+ @index += match_len
2248
2289
  else
2249
2290
  terminal_parse_failure('/')
2250
2291
  r12 = nil
2251
2292
  end
2252
2293
  if r12
2294
+ r12 = SyntaxNode.new(input, (index-1)...index) if r12 == true
2253
2295
  r0 = r12
2254
2296
  else
2255
- if has_terminal?('%', false, index)
2256
- r13 = instantiate_node(SyntaxNode,input, index...(index + 1))
2257
- @index += 1
2297
+ if (match_len = has_terminal?('%', false, index))
2298
+ r13 = true
2299
+ @index += match_len
2258
2300
  else
2259
2301
  terminal_parse_failure('%')
2260
2302
  r13 = nil
2261
2303
  end
2262
2304
  if r13
2305
+ r13 = SyntaxNode.new(input, (index-1)...index) if r13 == true
2263
2306
  r0 = r13
2264
2307
  else
2265
- if has_terminal?('&', false, index)
2266
- r14 = instantiate_node(SyntaxNode,input, index...(index + 1))
2267
- @index += 1
2308
+ if (match_len = has_terminal?('&', false, index))
2309
+ r14 = true
2310
+ @index += match_len
2268
2311
  else
2269
2312
  terminal_parse_failure('&')
2270
2313
  r14 = nil
2271
2314
  end
2272
2315
  if r14
2316
+ r14 = SyntaxNode.new(input, (index-1)...index) if r14 == true
2273
2317
  r0 = r14
2274
2318
  else
2275
- if has_terminal?('^', false, index)
2276
- r15 = instantiate_node(SyntaxNode,input, index...(index + 1))
2277
- @index += 1
2319
+ if (match_len = has_terminal?('^', false, index))
2320
+ r15 = true
2321
+ @index += match_len
2278
2322
  else
2279
2323
  terminal_parse_failure('^')
2280
2324
  r15 = nil
2281
2325
  end
2282
2326
  if r15
2327
+ r15 = SyntaxNode.new(input, (index-1)...index) if r15 == true
2283
2328
  r0 = r15
2284
2329
  else
2285
- if has_terminal?('|', false, index)
2286
- r16 = instantiate_node(SyntaxNode,input, index...(index + 1))
2287
- @index += 1
2330
+ if (match_len = has_terminal?('|', false, index))
2331
+ r16 = true
2332
+ @index += match_len
2288
2333
  else
2289
2334
  terminal_parse_failure('|')
2290
2335
  r16 = nil
2291
2336
  end
2292
2337
  if r16
2338
+ r16 = SyntaxNode.new(input, (index-1)...index) if r16 == true
2293
2339
  r0 = r16
2294
2340
  else
2295
2341
  @index = i0
@@ -2321,31 +2367,33 @@ module Delorean
2321
2367
  if node_cache[:unary_op].has_key?(index)
2322
2368
  cached = node_cache[:unary_op][index]
2323
2369
  if cached
2324
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2370
+ node_cache[:unary_op][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2325
2371
  @index = cached.interval.end
2326
2372
  end
2327
2373
  return cached
2328
2374
  end
2329
2375
 
2330
2376
  i0 = index
2331
- if has_terminal?('!', false, index)
2332
- r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
2333
- @index += 1
2377
+ if (match_len = has_terminal?('!', false, index))
2378
+ r1 = true
2379
+ @index += match_len
2334
2380
  else
2335
2381
  terminal_parse_failure('!')
2336
2382
  r1 = nil
2337
2383
  end
2338
2384
  if r1
2385
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
2339
2386
  r0 = r1
2340
2387
  else
2341
- if has_terminal?('-', false, index)
2342
- r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
2343
- @index += 1
2388
+ if (match_len = has_terminal?('-', false, index))
2389
+ r2 = true
2390
+ @index += match_len
2344
2391
  else
2345
2392
  terminal_parse_failure('-')
2346
2393
  r2 = nil
2347
2394
  end
2348
2395
  if r2
2396
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
2349
2397
  r0 = r2
2350
2398
  else
2351
2399
  @index = i0
@@ -2387,7 +2435,7 @@ module Delorean
2387
2435
  if node_cache[:value].has_key?(index)
2388
2436
  cached = node_cache[:value][index]
2389
2437
  if cached
2390
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2438
+ node_cache[:value][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2391
2439
  @index = cached.interval.end
2392
2440
  end
2393
2441
  return cached
@@ -2396,42 +2444,52 @@ module Delorean
2396
2444
  i0 = index
2397
2445
  r1 = _nt_decimal
2398
2446
  if r1
2447
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
2399
2448
  r0 = r1
2400
2449
  else
2401
2450
  r2 = _nt_integer
2402
2451
  if r2
2452
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
2403
2453
  r0 = r2
2404
2454
  else
2405
2455
  r3 = _nt_string
2406
2456
  if r3
2457
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
2407
2458
  r0 = r3
2408
2459
  else
2409
2460
  r4 = _nt_boolean
2410
2461
  if r4
2462
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
2411
2463
  r0 = r4
2412
2464
  else
2413
2465
  r5 = _nt_nil_val
2414
2466
  if r5
2467
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
2415
2468
  r0 = r5
2416
2469
  else
2417
2470
  r6 = _nt_identifier
2418
2471
  if r6
2472
+ r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
2419
2473
  r0 = r6
2420
2474
  else
2421
2475
  r7 = _nt_self
2422
2476
  if r7
2477
+ r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
2423
2478
  r0 = r7
2424
2479
  else
2425
2480
  r8 = _nt_list_expr
2426
2481
  if r8
2482
+ r8 = SyntaxNode.new(input, (index-1)...index) if r8 == true
2427
2483
  r0 = r8
2428
2484
  else
2429
2485
  r9 = _nt_set_expr
2430
2486
  if r9
2487
+ r9 = SyntaxNode.new(input, (index-1)...index) if r9 == true
2431
2488
  r0 = r9
2432
2489
  else
2433
2490
  r10 = _nt_hash_expr
2434
2491
  if r10
2492
+ r10 = SyntaxNode.new(input, (index-1)...index) if r10 == true
2435
2493
  r0 = r10
2436
2494
  else
2437
2495
  i11, s11 = index, []
@@ -2439,9 +2497,9 @@ module Delorean
2439
2497
  r14 = _nt_class_name
2440
2498
  s13 << r14
2441
2499
  if r14
2442
- if has_terminal?('::', false, index)
2443
- r15 = instantiate_node(SyntaxNode,input, index...(index + 2))
2444
- @index += 2
2500
+ if (match_len = has_terminal?('::', false, index))
2501
+ r15 = instantiate_node(SyntaxNode,input, index...(index + match_len))
2502
+ @index += match_len
2445
2503
  else
2446
2504
  terminal_parse_failure('::')
2447
2505
  r15 = nil
@@ -2473,12 +2531,13 @@ module Delorean
2473
2531
  r11 = nil
2474
2532
  end
2475
2533
  if r11
2534
+ r11 = SyntaxNode.new(input, (index-1)...index) if r11 == true
2476
2535
  r0 = r11
2477
2536
  else
2478
2537
  i17, s17 = index, []
2479
- if has_terminal?('(', false, index)
2480
- r18 = instantiate_node(SyntaxNode,input, index...(index + 1))
2481
- @index += 1
2538
+ if (match_len = has_terminal?('(', false, index))
2539
+ r18 = true
2540
+ @index += match_len
2482
2541
  else
2483
2542
  terminal_parse_failure('(')
2484
2543
  r18 = nil
@@ -2504,9 +2563,9 @@ module Delorean
2504
2563
  end
2505
2564
  s17 << r22
2506
2565
  if r22
2507
- if has_terminal?(')', false, index)
2508
- r24 = instantiate_node(SyntaxNode,input, index...(index + 1))
2509
- @index += 1
2566
+ if (match_len = has_terminal?(')', false, index))
2567
+ r24 = true
2568
+ @index += match_len
2510
2569
  else
2511
2570
  terminal_parse_failure(')')
2512
2571
  r24 = nil
@@ -2524,6 +2583,7 @@ module Delorean
2524
2583
  r17 = nil
2525
2584
  end
2526
2585
  if r17
2586
+ r17 = SyntaxNode.new(input, (index-1)...index) if r17 == true
2527
2587
  r0 = r17
2528
2588
  else
2529
2589
  @index = i0
@@ -2567,7 +2627,7 @@ module Delorean
2567
2627
  if node_cache[:fn_args].has_key?(index)
2568
2628
  cached = node_cache[:fn_args][index]
2569
2629
  if cached
2570
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2630
+ node_cache[:fn_args][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2571
2631
  @index = cached.interval.end
2572
2632
  end
2573
2633
  return cached
@@ -2586,9 +2646,9 @@ module Delorean
2586
2646
  end
2587
2647
  s3 << r4
2588
2648
  if r4
2589
- if has_terminal?(',', false, index)
2590
- r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
2591
- @index += 1
2649
+ if (match_len = has_terminal?(',', false, index))
2650
+ r6 = true
2651
+ @index += match_len
2592
2652
  else
2593
2653
  terminal_parse_failure(',')
2594
2654
  r6 = nil
@@ -2665,7 +2725,7 @@ module Delorean
2665
2725
  if node_cache[:hash_args].has_key?(index)
2666
2726
  cached = node_cache[:hash_args][index]
2667
2727
  if cached
2668
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2728
+ node_cache[:hash_args][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2669
2729
  @index = cached.interval.end
2670
2730
  end
2671
2731
  return cached
@@ -2683,9 +2743,9 @@ module Delorean
2683
2743
  end
2684
2744
  s0 << r2
2685
2745
  if r2
2686
- if has_terminal?(':', false, index)
2687
- r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
2688
- @index += 1
2746
+ if (match_len = has_terminal?(':', false, index))
2747
+ r4 = true
2748
+ @index += match_len
2689
2749
  else
2690
2750
  terminal_parse_failure(':')
2691
2751
  r4 = nil
@@ -2712,9 +2772,9 @@ module Delorean
2712
2772
  end
2713
2773
  s9 << r10
2714
2774
  if r10
2715
- if has_terminal?(',', false, index)
2716
- r12 = instantiate_node(SyntaxNode,input, index...(index + 1))
2717
- @index += 1
2775
+ if (match_len = has_terminal?(',', false, index))
2776
+ r12 = true
2777
+ @index += match_len
2718
2778
  else
2719
2779
  terminal_parse_failure(',')
2720
2780
  r12 = nil
@@ -2802,7 +2862,7 @@ module Delorean
2802
2862
  if node_cache[:kw_args].has_key?(index)
2803
2863
  cached = node_cache[:kw_args][index]
2804
2864
  if cached
2805
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2865
+ node_cache[:kw_args][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2806
2866
  @index = cached.interval.end
2807
2867
  end
2808
2868
  return cached
@@ -2821,9 +2881,9 @@ module Delorean
2821
2881
  end
2822
2882
  s2 << r4
2823
2883
  if r4
2824
- if has_terminal?('=', false, index)
2825
- r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
2826
- @index += 1
2884
+ if (match_len = has_terminal?('=', false, index))
2885
+ r6 = true
2886
+ @index += match_len
2827
2887
  else
2828
2888
  terminal_parse_failure('=')
2829
2889
  r6 = nil
@@ -2866,9 +2926,9 @@ module Delorean
2866
2926
  end
2867
2927
  s11 << r12
2868
2928
  if r12
2869
- if has_terminal?(',', false, index)
2870
- r14 = instantiate_node(SyntaxNode,input, index...(index + 1))
2871
- @index += 1
2929
+ if (match_len = has_terminal?(',', false, index))
2930
+ r14 = true
2931
+ @index += match_len
2872
2932
  else
2873
2933
  terminal_parse_failure(',')
2874
2934
  r14 = nil
@@ -2933,7 +2993,7 @@ module Delorean
2933
2993
  if node_cache[:decimal].has_key?(index)
2934
2994
  cached = node_cache[:decimal][index]
2935
2995
  if cached
2936
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2996
+ node_cache[:decimal][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2937
2997
  @index = cached.interval.end
2938
2998
  end
2939
2999
  return cached
@@ -2943,9 +3003,9 @@ module Delorean
2943
3003
  r1 = _nt_integer
2944
3004
  s0 << r1
2945
3005
  if r1
2946
- if has_terminal?('.', false, index)
2947
- r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
2948
- @index += 1
3006
+ if (match_len = has_terminal?('.', false, index))
3007
+ r2 = true
3008
+ @index += match_len
2949
3009
  else
2950
3010
  terminal_parse_failure('.')
2951
3011
  r2 = nil
@@ -2954,10 +3014,11 @@ module Delorean
2954
3014
  if r2
2955
3015
  s3, i3 = [], index
2956
3016
  loop do
2957
- if has_terminal?('\G[0-9]', true, index)
3017
+ if has_terminal?(@regexps[gr = '\A[0-9]'] ||= Regexp.new(gr), :regexp, index)
2958
3018
  r4 = true
2959
3019
  @index += 1
2960
3020
  else
3021
+ terminal_parse_failure('[0-9]')
2961
3022
  r4 = nil
2962
3023
  end
2963
3024
  if r4
@@ -2996,38 +3057,41 @@ module Delorean
2996
3057
  if node_cache[:integer].has_key?(index)
2997
3058
  cached = node_cache[:integer][index]
2998
3059
  if cached
2999
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3060
+ node_cache[:integer][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3000
3061
  @index = cached.interval.end
3001
3062
  end
3002
3063
  return cached
3003
3064
  end
3004
3065
 
3005
3066
  i0 = index
3006
- if has_terminal?('0', false, index)
3007
- r1 = instantiate_node(Literal,input, index...(index + 1))
3008
- @index += 1
3067
+ if (match_len = has_terminal?('0', false, index))
3068
+ r1 = instantiate_node(Literal,input, index...(index + match_len))
3069
+ @index += match_len
3009
3070
  else
3010
3071
  terminal_parse_failure('0')
3011
3072
  r1 = nil
3012
3073
  end
3013
3074
  if r1
3075
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
3014
3076
  r0 = r1
3015
3077
  else
3016
3078
  i2, s2 = index, []
3017
- if has_terminal?('\G[1-9]', true, index)
3079
+ if has_terminal?(@regexps[gr = '\A[1-9]'] ||= Regexp.new(gr), :regexp, index)
3018
3080
  r3 = true
3019
3081
  @index += 1
3020
3082
  else
3083
+ terminal_parse_failure('[1-9]')
3021
3084
  r3 = nil
3022
3085
  end
3023
3086
  s2 << r3
3024
3087
  if r3
3025
3088
  s4, i4 = [], index
3026
3089
  loop do
3027
- if has_terminal?('\G[0-9]', true, index)
3090
+ if has_terminal?(@regexps[gr = '\A[0-9]'] ||= Regexp.new(gr), :regexp, index)
3028
3091
  r5 = true
3029
3092
  @index += 1
3030
3093
  else
3094
+ terminal_parse_failure('[0-9]')
3031
3095
  r5 = nil
3032
3096
  end
3033
3097
  if r5
@@ -3047,6 +3111,7 @@ module Delorean
3047
3111
  r2 = nil
3048
3112
  end
3049
3113
  if r2
3114
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
3050
3115
  r0 = r2
3051
3116
  else
3052
3117
  @index = i0
@@ -3067,27 +3132,29 @@ module Delorean
3067
3132
  if node_cache[:identifier].has_key?(index)
3068
3133
  cached = node_cache[:identifier][index]
3069
3134
  if cached
3070
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3135
+ node_cache[:identifier][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3071
3136
  @index = cached.interval.end
3072
3137
  end
3073
3138
  return cached
3074
3139
  end
3075
3140
 
3076
3141
  i0, s0 = index, []
3077
- if has_terminal?('\G[a-z]', true, index)
3142
+ if has_terminal?(@regexps[gr = '\A[a-z]'] ||= Regexp.new(gr), :regexp, index)
3078
3143
  r1 = true
3079
3144
  @index += 1
3080
3145
  else
3146
+ terminal_parse_failure('[a-z]')
3081
3147
  r1 = nil
3082
3148
  end
3083
3149
  s0 << r1
3084
3150
  if r1
3085
3151
  s2, i2 = [], index
3086
3152
  loop do
3087
- if has_terminal?('\G[a-zA-Z0-9_]', true, index)
3153
+ if has_terminal?(@regexps[gr = '\A[a-zA-Z0-9_]'] ||= Regexp.new(gr), :regexp, index)
3088
3154
  r3 = true
3089
3155
  @index += 1
3090
3156
  else
3157
+ terminal_parse_failure('[a-zA-Z0-9_]')
3091
3158
  r3 = nil
3092
3159
  end
3093
3160
  if r3
@@ -3117,31 +3184,33 @@ module Delorean
3117
3184
  if node_cache[:boolean].has_key?(index)
3118
3185
  cached = node_cache[:boolean][index]
3119
3186
  if cached
3120
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3187
+ node_cache[:boolean][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3121
3188
  @index = cached.interval.end
3122
3189
  end
3123
3190
  return cached
3124
3191
  end
3125
3192
 
3126
3193
  i0 = index
3127
- if has_terminal?('true', false, index)
3128
- r1 = instantiate_node(Literal,input, index...(index + 4))
3129
- @index += 4
3194
+ if (match_len = has_terminal?('true', false, index))
3195
+ r1 = instantiate_node(Literal,input, index...(index + match_len))
3196
+ @index += match_len
3130
3197
  else
3131
3198
  terminal_parse_failure('true')
3132
3199
  r1 = nil
3133
3200
  end
3134
3201
  if r1
3202
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
3135
3203
  r0 = r1
3136
3204
  else
3137
- if has_terminal?('false', false, index)
3138
- r2 = instantiate_node(Literal,input, index...(index + 5))
3139
- @index += 5
3205
+ if (match_len = has_terminal?('false', false, index))
3206
+ r2 = instantiate_node(Literal,input, index...(index + match_len))
3207
+ @index += match_len
3140
3208
  else
3141
3209
  terminal_parse_failure('false')
3142
3210
  r2 = nil
3143
3211
  end
3144
3212
  if r2
3213
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
3145
3214
  r0 = r2
3146
3215
  else
3147
3216
  @index = i0
@@ -3159,15 +3228,15 @@ module Delorean
3159
3228
  if node_cache[:self].has_key?(index)
3160
3229
  cached = node_cache[:self][index]
3161
3230
  if cached
3162
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3231
+ node_cache[:self][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3163
3232
  @index = cached.interval.end
3164
3233
  end
3165
3234
  return cached
3166
3235
  end
3167
3236
 
3168
- if has_terminal?('_', false, index)
3169
- r0 = instantiate_node(Self,input, index...(index + 1))
3170
- @index += 1
3237
+ if (match_len = has_terminal?('_', false, index))
3238
+ r0 = instantiate_node(Self,input, index...(index + match_len))
3239
+ @index += match_len
3171
3240
  else
3172
3241
  terminal_parse_failure('_')
3173
3242
  r0 = nil
@@ -3183,15 +3252,15 @@ module Delorean
3183
3252
  if node_cache[:nil_val].has_key?(index)
3184
3253
  cached = node_cache[:nil_val][index]
3185
3254
  if cached
3186
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3255
+ node_cache[:nil_val][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3187
3256
  @index = cached.interval.end
3188
3257
  end
3189
3258
  return cached
3190
3259
  end
3191
3260
 
3192
- if has_terminal?('nil', false, index)
3193
- r0 = instantiate_node(Literal,input, index...(index + 3))
3194
- @index += 3
3261
+ if (match_len = has_terminal?('nil', false, index))
3262
+ r0 = instantiate_node(Literal,input, index...(index + match_len))
3263
+ @index += match_len
3195
3264
  else
3196
3265
  terminal_parse_failure('nil')
3197
3266
  r0 = nil
@@ -3207,15 +3276,15 @@ module Delorean
3207
3276
  if node_cache[:sp4].has_key?(index)
3208
3277
  cached = node_cache[:sp4][index]
3209
3278
  if cached
3210
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3279
+ node_cache[:sp4][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3211
3280
  @index = cached.interval.end
3212
3281
  end
3213
3282
  return cached
3214
3283
  end
3215
3284
 
3216
- if has_terminal?(' ', false, index)
3217
- r0 = instantiate_node(SyntaxNode,input, index...(index + 4))
3218
- @index += 4
3285
+ if (match_len = has_terminal?(' ', false, index))
3286
+ r0 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3287
+ @index += match_len
3219
3288
  else
3220
3289
  terminal_parse_failure(' ')
3221
3290
  r0 = nil
@@ -3231,7 +3300,7 @@ module Delorean
3231
3300
  if node_cache[:sp].has_key?(index)
3232
3301
  cached = node_cache[:sp][index]
3233
3302
  if cached
3234
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3303
+ node_cache[:sp][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3235
3304
  @index = cached.interval.end
3236
3305
  end
3237
3306
  return cached
@@ -3239,10 +3308,11 @@ module Delorean
3239
3308
 
3240
3309
  s0, i0 = [], index
3241
3310
  loop do
3242
- if has_terminal?('\G[\\s]', true, index)
3311
+ if has_terminal?(@regexps[gr = '\A[\\s]'] ||= Regexp.new(gr), :regexp, index)
3243
3312
  r1 = true
3244
3313
  @index += 1
3245
3314
  else
3315
+ terminal_parse_failure('[\\s]')
3246
3316
  r1 = nil
3247
3317
  end
3248
3318
  if r1
@@ -3277,7 +3347,7 @@ module Delorean
3277
3347
  if node_cache[:string].has_key?(index)
3278
3348
  cached = node_cache[:string][index]
3279
3349
  if cached
3280
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3350
+ node_cache[:string][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3281
3351
  @index = cached.interval.end
3282
3352
  end
3283
3353
  return cached
@@ -3285,9 +3355,9 @@ module Delorean
3285
3355
 
3286
3356
  i0 = index
3287
3357
  i1, s1 = index, []
3288
- if has_terminal?('"', false, index)
3289
- r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
3290
- @index += 1
3358
+ if (match_len = has_terminal?('"', false, index))
3359
+ r2 = true
3360
+ @index += match_len
3291
3361
  else
3292
3362
  terminal_parse_failure('"')
3293
3363
  r2 = nil
@@ -3297,21 +3367,22 @@ module Delorean
3297
3367
  s3, i3 = [], index
3298
3368
  loop do
3299
3369
  i4 = index
3300
- if has_terminal?('\"', false, index)
3301
- r5 = instantiate_node(SyntaxNode,input, index...(index + 2))
3302
- @index += 2
3370
+ if (match_len = has_terminal?('\"', false, index))
3371
+ r5 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3372
+ @index += match_len
3303
3373
  else
3304
3374
  terminal_parse_failure('\"')
3305
3375
  r5 = nil
3306
3376
  end
3307
3377
  if r5
3378
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
3308
3379
  r4 = r5
3309
3380
  else
3310
3381
  i6, s6 = index, []
3311
3382
  i7 = index
3312
- if has_terminal?('"', false, index)
3313
- r8 = instantiate_node(SyntaxNode,input, index...(index + 1))
3314
- @index += 1
3383
+ if (match_len = has_terminal?('"', false, index))
3384
+ r8 = true
3385
+ @index += match_len
3315
3386
  else
3316
3387
  terminal_parse_failure('"')
3317
3388
  r8 = nil
@@ -3325,7 +3396,7 @@ module Delorean
3325
3396
  s6 << r7
3326
3397
  if r7
3327
3398
  if index < input_length
3328
- r9 = instantiate_node(SyntaxNode,input, index...(index + 1))
3399
+ r9 = true
3329
3400
  @index += 1
3330
3401
  else
3331
3402
  terminal_parse_failure("any character")
@@ -3341,6 +3412,7 @@ module Delorean
3341
3412
  r6 = nil
3342
3413
  end
3343
3414
  if r6
3415
+ r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
3344
3416
  r4 = r6
3345
3417
  else
3346
3418
  @index = i4
@@ -3356,9 +3428,9 @@ module Delorean
3356
3428
  r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
3357
3429
  s1 << r3
3358
3430
  if r3
3359
- if has_terminal?('"', false, index)
3360
- r10 = instantiate_node(SyntaxNode,input, index...(index + 1))
3361
- @index += 1
3431
+ if (match_len = has_terminal?('"', false, index))
3432
+ r10 = true
3433
+ @index += match_len
3362
3434
  else
3363
3435
  terminal_parse_failure('"')
3364
3436
  r10 = nil
@@ -3374,12 +3446,13 @@ module Delorean
3374
3446
  r1 = nil
3375
3447
  end
3376
3448
  if r1
3449
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
3377
3450
  r0 = r1
3378
3451
  else
3379
3452
  i11, s11 = index, []
3380
- if has_terminal?("'", false, index)
3381
- r12 = instantiate_node(SyntaxNode,input, index...(index + 1))
3382
- @index += 1
3453
+ if (match_len = has_terminal?("'", false, index))
3454
+ r12 = true
3455
+ @index += match_len
3383
3456
  else
3384
3457
  terminal_parse_failure("'")
3385
3458
  r12 = nil
@@ -3388,10 +3461,11 @@ module Delorean
3388
3461
  if r12
3389
3462
  s13, i13 = [], index
3390
3463
  loop do
3391
- if has_terminal?('\G[^\']', true, index)
3464
+ if has_terminal?(@regexps[gr = '\A[^\']'] ||= Regexp.new(gr), :regexp, index)
3392
3465
  r14 = true
3393
3466
  @index += 1
3394
3467
  else
3468
+ terminal_parse_failure('[^\']')
3395
3469
  r14 = nil
3396
3470
  end
3397
3471
  if r14
@@ -3403,9 +3477,9 @@ module Delorean
3403
3477
  r13 = instantiate_node(SyntaxNode,input, i13...index, s13)
3404
3478
  s11 << r13
3405
3479
  if r13
3406
- if has_terminal?("'", false, index)
3407
- r15 = instantiate_node(SyntaxNode,input, index...(index + 1))
3408
- @index += 1
3480
+ if (match_len = has_terminal?("'", false, index))
3481
+ r15 = true
3482
+ @index += match_len
3409
3483
  else
3410
3484
  terminal_parse_failure("'")
3411
3485
  r15 = nil
@@ -3421,6 +3495,7 @@ module Delorean
3421
3495
  r11 = nil
3422
3496
  end
3423
3497
  if r11
3498
+ r11 = SyntaxNode.new(input, (index-1)...index) if r11 == true
3424
3499
  r0 = r11
3425
3500
  else
3426
3501
  @index = i0