webidl 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2009 Jari Bakken
1
+ Copyright (c) 2009-2010 Jari Bakken
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
@@ -10,6 +10,10 @@ The code generation could be improved a lot - a lot of the data in the IDL is ju
10
10
  The parser rules for ExtendedAttribute is not exactly like the grammar from the Web IDL spec, since I ran into infinite recursion issues and don't have the Treetop-fu to figure them out.
11
11
  So far this hasn't led to any problems - the parser does parse the IDLs parts of the current HTML5 spec just fine.
12
12
 
13
+ = Development tips
14
+
15
+ While working on the grammar, delete the compiled parser (lib/webidl/parser/idl.rb) and make sure you do not have the webidl gem installed. When finished, compile the parser with `rake parser:compile`.
16
+
13
17
  = See also
14
18
 
15
19
  * http://dev.w3.org/2006/webapi/WebIDL/
@@ -28,4 +32,4 @@ So far this hasn't led to any problems - the parser does parse the IDLs parts of
28
32
 
29
33
  == Copyright
30
34
 
31
- Copyright (c) 2009 Jari Bakken. See LICENSE for details.
35
+ Copyright (c) 2009-2010 Jari Bakken. See LICENSE for details.
data/Rakefile CHANGED
@@ -36,6 +36,8 @@ Spec::Rake::SpecTask.new(:rcov) do |spec|
36
36
  end
37
37
 
38
38
  namespace :parser do
39
+
40
+ desc "Compile the parser"
39
41
  task :compile do
40
42
  require 'treetop'
41
43
  compiler = Treetop::Compiler::GrammarCompiler.new
@@ -46,20 +48,51 @@ namespace :parser do
46
48
  end
47
49
  end
48
50
 
51
+ namespace :webidl do
52
+ WEBIDL_URL = "http://dev.w3.org/2006/webapi/WebIDL/"
53
+ HTML5_URL = "http://www.whatwg.org/specs/web-apps/current-work/"
54
+
55
+ desc "Download the webidl spec to support/"
56
+ task :download do
57
+ require 'open-uri'
58
+ spec_file = "support/webidl-spec-#{Time.now.strftime "%Y-%m-%d"}.html"
59
+ size = 0
60
+
61
+ File.open(spec_file, "w") do |file|
62
+ file << data = open(SPEC_URL).read
63
+ size = data.bytesize
64
+ end
65
+
66
+ puts "#{SPEC_URL} => #{spec_file} (#{size} bytes)"
67
+ end
68
+
69
+ desc "Download and extract HTML5 IDL parts to spec/fixtures"
70
+ task :html5 do
71
+ require 'open-uri'
72
+ require 'nokogiri'
73
+
74
+ idl_file = "spec/fixtures/html5.idl"
75
+ size = 0
76
+
77
+ File.open(idl_file, "w") do |file|
78
+ file << data = Nokogiri.HTML(open(HTML5_URL)).css("pre.idl").map { |e| e.inner_text }.join("\n\n")
79
+ size = data.bytesize
80
+ end
81
+
82
+ puts "#{HTML5_URL} => #{idl_file} (#{size} bytes)"
83
+ end
84
+
85
+ end
86
+
49
87
  task :spec => :check_dependencies
50
88
 
51
89
  task :default => :spec
52
90
 
53
- require 'rake/rdoctask'
54
- Rake::RDocTask.new do |rdoc|
55
- if File.exist?('VERSION')
56
- version = File.read('VERSION')
57
- else
58
- version = ""
91
+ begin
92
+ require 'yard'
93
+ YARD::Rake::YardocTask.new
94
+ rescue LoadError
95
+ task :yardoc do
96
+ abort "YARD is not available. In order to run yardoc, you must: sudo gem install yard"
59
97
  end
60
-
61
- rdoc.rdoc_dir = 'rdoc'
62
- rdoc.title = "webidl #{version}"
63
- rdoc.rdoc_files.include('README*')
64
- rdoc.rdoc_files.include('lib/**/*.rb')
65
98
  end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.2
1
+ 0.0.3
@@ -14,6 +14,7 @@ require "webidl/parse_tree/argument_list"
14
14
  require "webidl/parse_tree/extended_attributes"
15
15
  require "webidl/parse_tree/relative_scoped_name"
16
16
  require "webidl/parse_tree/absolute_scoped_name"
17
+ require "webidl/parse_tree/type"
17
18
  require "webidl/parse_tree/nullable_type"
18
19
  require "webidl/parse_tree/interface_members"
19
20
  require "webidl/parse_tree/operation"
@@ -7,7 +7,7 @@ module WebIDL
7
7
  def initialize(parent, name, opts = {})
8
8
  super(parent)
9
9
 
10
- @name = name.strip.to_sym
10
+ @name = camel_case_type(name.strip).to_sym
11
11
  @nullable = !!opts[:nullable]
12
12
  end
13
13
 
@@ -15,6 +15,16 @@ module WebIDL
15
15
  @nullable
16
16
  end
17
17
 
18
+ def array!
19
+ @name = "#{@name}Array".to_sym
20
+ end
21
+
22
+ private
23
+
24
+ def camel_case_type(name)
25
+ name.split(/[_ ]/).map { |e| e[0] = e[0].upcase; e }.join
26
+ end
27
+
18
28
  end # Type
19
29
  end # Ast
20
- end # WebIDL
30
+ end # WebIDL
@@ -8,4 +8,4 @@ module WebIDL
8
8
 
9
9
  end # NullableType
10
10
  end # ParseTree
11
- end # WebIDL
11
+ end # WebIDL
@@ -7,9 +7,9 @@ module WebIDL
7
7
  n << name.text_value
8
8
  n << parts.text_value
9
9
 
10
- sn = Ast::ScopedName.new(parent, n, :relative => true)
10
+ Ast::ScopedName.new(parent, n, :relative => true)
11
11
  end
12
12
 
13
13
  end # RelativeScopedName
14
14
  end # ParseTree
15
- end # WebIDL
15
+ end # WebIDL
@@ -0,0 +1,18 @@
1
+ module WebIDL
2
+ module ParseTree
3
+ class Type < Treetop::Runtime::SyntaxNode
4
+
5
+ def build(parent)
6
+ result = type.build(parent)
7
+
8
+ if result.kind_of? Ast::ScopedName
9
+ result = Ast::Type.new parent, result.name # or qualified_name?
10
+ end
11
+
12
+ result.array! if array.any?
13
+ result
14
+ end
15
+
16
+ end # Type
17
+ end # ParseTree
18
+ end # WebIDL
@@ -9,7 +9,7 @@ module WebIDL
9
9
  include Treetop::Runtime
10
10
 
11
11
  def root
12
- @root || :Definitions
12
+ @root ||= :Definitions
13
13
  end
14
14
 
15
15
  module Definitions0
@@ -52,7 +52,10 @@ module WebIDL
52
52
  start_index = index
53
53
  if node_cache[:Definitions].has_key?(index)
54
54
  cached = node_cache[:Definitions][index]
55
- @index = cached.interval.end if cached
55
+ if cached
56
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
57
+ @index = cached.interval.end
58
+ end
56
59
  return cached
57
60
  end
58
61
 
@@ -114,7 +117,10 @@ module WebIDL
114
117
  start_index = index
115
118
  if node_cache[:Definition].has_key?(index)
116
119
  cached = node_cache[:Definition][index]
117
- @index = cached.interval.end if cached
120
+ if cached
121
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
122
+ @index = cached.interval.end
123
+ end
118
124
  return cached
119
125
  end
120
126
 
@@ -187,7 +193,10 @@ module WebIDL
187
193
  start_index = index
188
194
  if node_cache[:Module].has_key?(index)
189
195
  cached = node_cache[:Module][index]
190
- @index = cached.interval.end if cached
196
+ if cached
197
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
198
+ @index = cached.interval.end
199
+ end
191
200
  return cached
192
201
  end
193
202
 
@@ -314,7 +323,10 @@ module WebIDL
314
323
  start_index = index
315
324
  if node_cache[:Interface].has_key?(index)
316
325
  cached = node_cache[:Interface][index]
317
- @index = cached.interval.end if cached
326
+ if cached
327
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
328
+ @index = cached.interval.end
329
+ end
318
330
  return cached
319
331
  end
320
332
 
@@ -420,7 +432,10 @@ module WebIDL
420
432
  start_index = index
421
433
  if node_cache[:InterfaceInheritance].has_key?(index)
422
434
  cached = node_cache[:InterfaceInheritance][index]
423
- @index = cached.interval.end if cached
435
+ if cached
436
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
437
+ @index = cached.interval.end
438
+ end
424
439
  return cached
425
440
  end
426
441
 
@@ -489,7 +504,10 @@ module WebIDL
489
504
  start_index = index
490
505
  if node_cache[:InterfaceMembers].has_key?(index)
491
506
  cached = node_cache[:InterfaceMembers][index]
492
- @index = cached.interval.end if cached
507
+ if cached
508
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
509
+ @index = cached.interval.end
510
+ end
493
511
  return cached
494
512
  end
495
513
 
@@ -538,7 +556,10 @@ module WebIDL
538
556
  start_index = index
539
557
  if node_cache[:InterfaceMember].has_key?(index)
540
558
  cached = node_cache[:InterfaceMember][index]
541
- @index = cached.interval.end if cached
559
+ if cached
560
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
561
+ @index = cached.interval.end
562
+ end
542
563
  return cached
543
564
  end
544
565
 
@@ -596,7 +617,10 @@ module WebIDL
596
617
  start_index = index
597
618
  if node_cache[:Exception].has_key?(index)
598
619
  cached = node_cache[:Exception][index]
599
- @index = cached.interval.end if cached
620
+ if cached
621
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
622
+ @index = cached.interval.end
623
+ end
600
624
  return cached
601
625
  end
602
626
 
@@ -710,7 +734,10 @@ module WebIDL
710
734
  start_index = index
711
735
  if node_cache[:ExceptionMembers].has_key?(index)
712
736
  cached = node_cache[:ExceptionMembers][index]
713
- @index = cached.interval.end if cached
737
+ if cached
738
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
739
+ @index = cached.interval.end
740
+ end
714
741
  return cached
715
742
  end
716
743
 
@@ -782,7 +809,10 @@ module WebIDL
782
809
  start_index = index
783
810
  if node_cache[:TypeDef].has_key?(index)
784
811
  cached = node_cache[:TypeDef][index]
785
- @index = cached.interval.end if cached
812
+ if cached
813
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
814
+ @index = cached.interval.end
815
+ end
786
816
  return cached
787
817
  end
788
818
 
@@ -865,7 +895,10 @@ module WebIDL
865
895
  start_index = index
866
896
  if node_cache[:ImplementsStatement].has_key?(index)
867
897
  cached = node_cache[:ImplementsStatement][index]
868
- @index = cached.interval.end if cached
898
+ if cached
899
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
900
+ @index = cached.interval.end
901
+ end
869
902
  return cached
870
903
  end
871
904
 
@@ -960,7 +993,10 @@ module WebIDL
960
993
  start_index = index
961
994
  if node_cache[:Const].has_key?(index)
962
995
  cached = node_cache[:Const][index]
963
- @index = cached.interval.end if cached
996
+ if cached
997
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
998
+ @index = cached.interval.end
999
+ end
964
1000
  return cached
965
1001
  end
966
1002
 
@@ -1042,7 +1078,10 @@ module WebIDL
1042
1078
  start_index = index
1043
1079
  if node_cache[:ConstExpr].has_key?(index)
1044
1080
  cached = node_cache[:ConstExpr][index]
1045
- @index = cached.interval.end if cached
1081
+ if cached
1082
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1083
+ @index = cached.interval.end
1084
+ end
1046
1085
  return cached
1047
1086
  end
1048
1087
 
@@ -1078,7 +1117,10 @@ module WebIDL
1078
1117
  start_index = index
1079
1118
  if node_cache[:BooleanLiteral].has_key?(index)
1080
1119
  cached = node_cache[:BooleanLiteral][index]
1081
- @index = cached.interval.end if cached
1120
+ if cached
1121
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1122
+ @index = cached.interval.end
1123
+ end
1082
1124
  return cached
1083
1125
  end
1084
1126
 
@@ -1119,7 +1161,10 @@ module WebIDL
1119
1161
  start_index = index
1120
1162
  if node_cache[:AttributeOrOperation].has_key?(index)
1121
1163
  cached = node_cache[:AttributeOrOperation][index]
1122
- @index = cached.interval.end if cached
1164
+ if cached
1165
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1166
+ @index = cached.interval.end
1167
+ end
1123
1168
  return cached
1124
1169
  end
1125
1170
 
@@ -1161,7 +1206,10 @@ module WebIDL
1161
1206
  start_index = index
1162
1207
  if node_cache[:StringifierAttributeOrOperation].has_key?(index)
1163
1208
  cached = node_cache[:StringifierAttributeOrOperation][index]
1164
- @index = cached.interval.end if cached
1209
+ if cached
1210
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1211
+ @index = cached.interval.end
1212
+ end
1165
1213
  return cached
1166
1214
  end
1167
1215
 
@@ -1269,7 +1317,10 @@ module WebIDL
1269
1317
  start_index = index
1270
1318
  if node_cache[:Attribute].has_key?(index)
1271
1319
  cached = node_cache[:Attribute][index]
1272
- @index = cached.interval.end if cached
1320
+ if cached
1321
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1322
+ @index = cached.interval.end
1323
+ end
1273
1324
  return cached
1274
1325
  end
1275
1326
 
@@ -1353,7 +1404,10 @@ module WebIDL
1353
1404
  start_index = index
1354
1405
  if node_cache[:ReadOnly].has_key?(index)
1355
1406
  cached = node_cache[:ReadOnly][index]
1356
- @index = cached.interval.end if cached
1407
+ if cached
1408
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1409
+ @index = cached.interval.end
1410
+ end
1357
1411
  return cached
1358
1412
  end
1359
1413
 
@@ -1389,7 +1443,10 @@ module WebIDL
1389
1443
  start_index = index
1390
1444
  if node_cache[:GetRaises].has_key?(index)
1391
1445
  cached = node_cache[:GetRaises][index]
1392
- @index = cached.interval.end if cached
1446
+ if cached
1447
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1448
+ @index = cached.interval.end
1449
+ end
1393
1450
  return cached
1394
1451
  end
1395
1452
 
@@ -1442,7 +1499,10 @@ module WebIDL
1442
1499
  start_index = index
1443
1500
  if node_cache[:SetRaises].has_key?(index)
1444
1501
  cached = node_cache[:SetRaises][index]
1445
- @index = cached.interval.end if cached
1502
+ if cached
1503
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1504
+ @index = cached.interval.end
1505
+ end
1446
1506
  return cached
1447
1507
  end
1448
1508
 
@@ -1499,7 +1559,10 @@ module WebIDL
1499
1559
  start_index = index
1500
1560
  if node_cache[:Operation].has_key?(index)
1501
1561
  cached = node_cache[:Operation][index]
1502
- @index = cached.interval.end if cached
1562
+ if cached
1563
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1564
+ @index = cached.interval.end
1565
+ end
1503
1566
  return cached
1504
1567
  end
1505
1568
 
@@ -1557,7 +1620,10 @@ module WebIDL
1557
1620
  start_index = index
1558
1621
  if node_cache[:OmittableSpecials].has_key?(index)
1559
1622
  cached = node_cache[:OmittableSpecials][index]
1560
- @index = cached.interval.end if cached
1623
+ if cached
1624
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1625
+ @index = cached.interval.end
1626
+ end
1561
1627
  return cached
1562
1628
  end
1563
1629
 
@@ -1609,7 +1675,10 @@ module WebIDL
1609
1675
  start_index = index
1610
1676
  if node_cache[:Specials].has_key?(index)
1611
1677
  cached = node_cache[:Specials][index]
1612
- @index = cached.interval.end if cached
1678
+ if cached
1679
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1680
+ @index = cached.interval.end
1681
+ end
1613
1682
  return cached
1614
1683
  end
1615
1684
 
@@ -1646,7 +1715,10 @@ module WebIDL
1646
1715
  start_index = index
1647
1716
  if node_cache[:Special].has_key?(index)
1648
1717
  cached = node_cache[:Special][index]
1649
- @index = cached.interval.end if cached
1718
+ if cached
1719
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1720
+ @index = cached.interval.end
1721
+ end
1650
1722
  return cached
1651
1723
  end
1652
1724
 
@@ -1761,7 +1833,10 @@ module WebIDL
1761
1833
  start_index = index
1762
1834
  if node_cache[:OperationRest].has_key?(index)
1763
1835
  cached = node_cache[:OperationRest][index]
1764
- @index = cached.interval.end if cached
1836
+ if cached
1837
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1838
+ @index = cached.interval.end
1839
+ end
1765
1840
  return cached
1766
1841
  end
1767
1842
 
@@ -1851,7 +1926,10 @@ module WebIDL
1851
1926
  start_index = index
1852
1927
  if node_cache[:OptionalIdentifier].has_key?(index)
1853
1928
  cached = node_cache[:OptionalIdentifier][index]
1854
- @index = cached.interval.end if cached
1929
+ if cached
1930
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1931
+ @index = cached.interval.end
1932
+ end
1855
1933
  return cached
1856
1934
  end
1857
1935
 
@@ -1877,7 +1955,10 @@ module WebIDL
1877
1955
  start_index = index
1878
1956
  if node_cache[:Raises].has_key?(index)
1879
1957
  cached = node_cache[:Raises][index]
1880
- @index = cached.interval.end if cached
1958
+ if cached
1959
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1960
+ @index = cached.interval.end
1961
+ end
1881
1962
  return cached
1882
1963
  end
1883
1964
 
@@ -1923,7 +2004,10 @@ module WebIDL
1923
2004
  start_index = index
1924
2005
  if node_cache[:ExceptionList].has_key?(index)
1925
2006
  cached = node_cache[:ExceptionList][index]
1926
- @index = cached.interval.end if cached
2007
+ if cached
2008
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2009
+ @index = cached.interval.end
2010
+ end
1927
2011
  return cached
1928
2012
  end
1929
2013
 
@@ -1981,7 +2065,10 @@ module WebIDL
1981
2065
  start_index = index
1982
2066
  if node_cache[:ArgumentList].has_key?(index)
1983
2067
  cached = node_cache[:ArgumentList][index]
1984
- @index = cached.interval.end if cached
2068
+ if cached
2069
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2070
+ @index = cached.interval.end
2071
+ end
1985
2072
  return cached
1986
2073
  end
1987
2074
 
@@ -2036,7 +2123,10 @@ module WebIDL
2036
2123
  start_index = index
2037
2124
  if node_cache[:Arguments].has_key?(index)
2038
2125
  cached = node_cache[:Arguments][index]
2039
- @index = cached.interval.end if cached
2126
+ if cached
2127
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2128
+ @index = cached.interval.end
2129
+ end
2040
2130
  return cached
2041
2131
  end
2042
2132
 
@@ -2133,7 +2223,10 @@ module WebIDL
2133
2223
  start_index = index
2134
2224
  if node_cache[:Argument].has_key?(index)
2135
2225
  cached = node_cache[:Argument][index]
2136
- @index = cached.interval.end if cached
2226
+ if cached
2227
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2228
+ @index = cached.interval.end
2229
+ end
2137
2230
  return cached
2138
2231
  end
2139
2232
 
@@ -2197,7 +2290,10 @@ module WebIDL
2197
2290
  start_index = index
2198
2291
  if node_cache[:In].has_key?(index)
2199
2292
  cached = node_cache[:In][index]
2200
- @index = cached.interval.end if cached
2293
+ if cached
2294
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2295
+ @index = cached.interval.end
2296
+ end
2201
2297
  return cached
2202
2298
  end
2203
2299
 
@@ -2223,7 +2319,10 @@ module WebIDL
2223
2319
  start_index = index
2224
2320
  if node_cache[:Optional].has_key?(index)
2225
2321
  cached = node_cache[:Optional][index]
2226
- @index = cached.interval.end if cached
2322
+ if cached
2323
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2324
+ @index = cached.interval.end
2325
+ end
2227
2326
  return cached
2228
2327
  end
2229
2328
 
@@ -2249,7 +2348,10 @@ module WebIDL
2249
2348
  start_index = index
2250
2349
  if node_cache[:Ellipsis].has_key?(index)
2251
2350
  cached = node_cache[:Ellipsis][index]
2252
- @index = cached.interval.end if cached
2351
+ if cached
2352
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2353
+ @index = cached.interval.end
2354
+ end
2253
2355
  return cached
2254
2356
  end
2255
2357
 
@@ -2275,7 +2377,10 @@ module WebIDL
2275
2377
  start_index = index
2276
2378
  if node_cache[:ExceptionMember].has_key?(index)
2277
2379
  cached = node_cache[:ExceptionMember][index]
2278
- @index = cached.interval.end if cached
2380
+ if cached
2381
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2382
+ @index = cached.interval.end
2383
+ end
2279
2384
  return cached
2280
2385
  end
2281
2386
 
@@ -2321,7 +2426,10 @@ module WebIDL
2321
2426
  start_index = index
2322
2427
  if node_cache[:ExceptionField].has_key?(index)
2323
2428
  cached = node_cache[:ExceptionField][index]
2324
- @index = cached.interval.end if cached
2429
+ if cached
2430
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2431
+ @index = cached.interval.end
2432
+ end
2325
2433
  return cached
2326
2434
  end
2327
2435
 
@@ -2390,7 +2498,10 @@ module WebIDL
2390
2498
  start_index = index
2391
2499
  if node_cache[:ExtendedAttributeList].has_key?(index)
2392
2500
  cached = node_cache[:ExtendedAttributeList][index]
2393
- @index = cached.interval.end if cached
2501
+ if cached
2502
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2503
+ @index = cached.interval.end
2504
+ end
2394
2505
  return cached
2395
2506
  end
2396
2507
 
@@ -2473,7 +2584,10 @@ module WebIDL
2473
2584
  start_index = index
2474
2585
  if node_cache[:ExtendedAttributes].has_key?(index)
2475
2586
  cached = node_cache[:ExtendedAttributes][index]
2476
- @index = cached.interval.end if cached
2587
+ if cached
2588
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2589
+ @index = cached.interval.end
2590
+ end
2477
2591
  return cached
2478
2592
  end
2479
2593
 
@@ -2524,7 +2638,10 @@ module WebIDL
2524
2638
  start_index = index
2525
2639
  if node_cache[:ExtendedAttribute].has_key?(index)
2526
2640
  cached = node_cache[:ExtendedAttribute][index]
2527
- @index = cached.interval.end if cached
2641
+ if cached
2642
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2643
+ @index = cached.interval.end
2644
+ end
2528
2645
  return cached
2529
2646
  end
2530
2647
 
@@ -2572,7 +2689,10 @@ module WebIDL
2572
2689
  start_index = index
2573
2690
  if node_cache[:ExtendedAttributeNoArg].has_key?(index)
2574
2691
  cached = node_cache[:ExtendedAttributeNoArg][index]
2575
- @index = cached.interval.end if cached
2692
+ if cached
2693
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2694
+ @index = cached.interval.end
2695
+ end
2576
2696
  return cached
2577
2697
  end
2578
2698
 
@@ -2607,7 +2727,10 @@ module WebIDL
2607
2727
  start_index = index
2608
2728
  if node_cache[:ExtendedAttributeArgList].has_key?(index)
2609
2729
  cached = node_cache[:ExtendedAttributeArgList][index]
2610
- @index = cached.interval.end if cached
2730
+ if cached
2731
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2732
+ @index = cached.interval.end
2733
+ end
2611
2734
  return cached
2612
2735
  end
2613
2736
 
@@ -2673,7 +2796,10 @@ module WebIDL
2673
2796
  start_index = index
2674
2797
  if node_cache[:ExtendedAttributeScopedName].has_key?(index)
2675
2798
  cached = node_cache[:ExtendedAttributeScopedName][index]
2676
- @index = cached.interval.end if cached
2799
+ if cached
2800
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2801
+ @index = cached.interval.end
2802
+ end
2677
2803
  return cached
2678
2804
  end
2679
2805
 
@@ -2722,7 +2848,10 @@ module WebIDL
2722
2848
  start_index = index
2723
2849
  if node_cache[:ExtendedAttributeIdent].has_key?(index)
2724
2850
  cached = node_cache[:ExtendedAttributeIdent][index]
2725
- @index = cached.interval.end if cached
2851
+ if cached
2852
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2853
+ @index = cached.interval.end
2854
+ end
2726
2855
  return cached
2727
2856
  end
2728
2857
 
@@ -2806,7 +2935,10 @@ module WebIDL
2806
2935
  start_index = index
2807
2936
  if node_cache[:ExtendedAttributeNamedArgList].has_key?(index)
2808
2937
  cached = node_cache[:ExtendedAttributeNamedArgList][index]
2809
- @index = cached.interval.end if cached
2938
+ if cached
2939
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2940
+ @index = cached.interval.end
2941
+ end
2810
2942
  return cached
2811
2943
  end
2812
2944
 
@@ -2885,7 +3017,10 @@ module WebIDL
2885
3017
  start_index = index
2886
3018
  if node_cache[:Other].has_key?(index)
2887
3019
  cached = node_cache[:Other][index]
2888
- @index = cached.interval.end if cached
3020
+ if cached
3021
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3022
+ @index = cached.interval.end
3023
+ end
2889
3024
  return cached
2890
3025
  end
2891
3026
 
@@ -2910,298 +3045,430 @@ module WebIDL
2910
3045
  if r5
2911
3046
  r0 = r5
2912
3047
  else
2913
- if has_terminal?(":", false, index)
2914
- r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
2915
- @index += 1
3048
+ if has_terminal?("...", false, index)
3049
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 3))
3050
+ @index += 3
2916
3051
  else
2917
- terminal_parse_failure(":")
3052
+ terminal_parse_failure("...")
2918
3053
  r6 = nil
2919
3054
  end
2920
3055
  if r6
2921
3056
  r0 = r6
2922
3057
  else
2923
- if has_terminal?("::", false, index)
2924
- r7 = instantiate_node(SyntaxNode,input, index...(index + 2))
2925
- @index += 2
3058
+ if has_terminal?(":", false, index)
3059
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 1))
3060
+ @index += 1
2926
3061
  else
2927
- terminal_parse_failure("::")
3062
+ terminal_parse_failure(":")
2928
3063
  r7 = nil
2929
3064
  end
2930
3065
  if r7
2931
3066
  r0 = r7
2932
3067
  else
2933
- if has_terminal?(";", false, index)
2934
- r8 = instantiate_node(SyntaxNode,input, index...(index + 1))
2935
- @index += 1
3068
+ if has_terminal?("::", false, index)
3069
+ r8 = instantiate_node(SyntaxNode,input, index...(index + 2))
3070
+ @index += 2
2936
3071
  else
2937
- terminal_parse_failure(";")
3072
+ terminal_parse_failure("::")
2938
3073
  r8 = nil
2939
3074
  end
2940
3075
  if r8
2941
3076
  r0 = r8
2942
3077
  else
2943
- if has_terminal?("<", false, index)
3078
+ if has_terminal?(";", false, index)
2944
3079
  r9 = instantiate_node(SyntaxNode,input, index...(index + 1))
2945
3080
  @index += 1
2946
3081
  else
2947
- terminal_parse_failure("<")
3082
+ terminal_parse_failure(";")
2948
3083
  r9 = nil
2949
3084
  end
2950
3085
  if r9
2951
3086
  r0 = r9
2952
3087
  else
2953
- if has_terminal?("=", false, index)
3088
+ if has_terminal?("<", false, index)
2954
3089
  r10 = instantiate_node(SyntaxNode,input, index...(index + 1))
2955
3090
  @index += 1
2956
3091
  else
2957
- terminal_parse_failure("=")
3092
+ terminal_parse_failure("<")
2958
3093
  r10 = nil
2959
3094
  end
2960
3095
  if r10
2961
3096
  r0 = r10
2962
3097
  else
2963
- if has_terminal?(">", false, index)
3098
+ if has_terminal?("=", false, index)
2964
3099
  r11 = instantiate_node(SyntaxNode,input, index...(index + 1))
2965
3100
  @index += 1
2966
3101
  else
2967
- terminal_parse_failure(">")
3102
+ terminal_parse_failure("=")
2968
3103
  r11 = nil
2969
3104
  end
2970
3105
  if r11
2971
3106
  r0 = r11
2972
3107
  else
2973
- if has_terminal?("DOMString", false, index)
2974
- r12 = instantiate_node(SyntaxNode,input, index...(index + 9))
2975
- @index += 9
3108
+ if has_terminal?(">", false, index)
3109
+ r12 = instantiate_node(SyntaxNode,input, index...(index + 1))
3110
+ @index += 1
2976
3111
  else
2977
- terminal_parse_failure("DOMString")
3112
+ terminal_parse_failure(">")
2978
3113
  r12 = nil
2979
3114
  end
2980
3115
  if r12
2981
3116
  r0 = r12
2982
3117
  else
2983
- if has_terminal?("FALSE", false, index)
2984
- r13 = instantiate_node(SyntaxNode,input, index...(index + 5))
2985
- @index += 5
3118
+ if has_terminal?("?", false, index)
3119
+ r13 = instantiate_node(SyntaxNode,input, index...(index + 1))
3120
+ @index += 1
2986
3121
  else
2987
- terminal_parse_failure("FALSE")
3122
+ terminal_parse_failure("?")
2988
3123
  r13 = nil
2989
3124
  end
2990
3125
  if r13
2991
3126
  r0 = r13
2992
3127
  else
2993
- if has_terminal?("Object", false, index)
2994
- r14 = instantiate_node(SyntaxNode,input, index...(index + 6))
2995
- @index += 6
3128
+ if has_terminal?("false", false, index)
3129
+ r14 = instantiate_node(SyntaxNode,input, index...(index + 5))
3130
+ @index += 5
2996
3131
  else
2997
- terminal_parse_failure("Object")
3132
+ terminal_parse_failure("false")
2998
3133
  r14 = nil
2999
3134
  end
3000
3135
  if r14
3001
3136
  r0 = r14
3002
3137
  else
3003
- if has_terminal?("TRUE", false, index)
3004
- r15 = instantiate_node(SyntaxNode,input, index...(index + 4))
3005
- @index += 4
3138
+ if has_terminal?("object", false, index)
3139
+ r15 = instantiate_node(SyntaxNode,input, index...(index + 6))
3140
+ @index += 6
3006
3141
  else
3007
- terminal_parse_failure("TRUE")
3142
+ terminal_parse_failure("object")
3008
3143
  r15 = nil
3009
3144
  end
3010
3145
  if r15
3011
3146
  r0 = r15
3012
3147
  else
3013
- if has_terminal?("any", false, index)
3014
- r16 = instantiate_node(SyntaxNode,input, index...(index + 3))
3015
- @index += 3
3148
+ if has_terminal?("true", false, index)
3149
+ r16 = instantiate_node(SyntaxNode,input, index...(index + 4))
3150
+ @index += 4
3016
3151
  else
3017
- terminal_parse_failure("any")
3152
+ terminal_parse_failure("true")
3018
3153
  r16 = nil
3019
3154
  end
3020
3155
  if r16
3021
3156
  r0 = r16
3022
3157
  else
3023
- if has_terminal?("attribute", false, index)
3024
- r17 = instantiate_node(SyntaxNode,input, index...(index + 9))
3025
- @index += 9
3158
+ if has_terminal?("any", false, index)
3159
+ r17 = instantiate_node(SyntaxNode,input, index...(index + 3))
3160
+ @index += 3
3026
3161
  else
3027
- terminal_parse_failure("attribute")
3162
+ terminal_parse_failure("any")
3028
3163
  r17 = nil
3029
3164
  end
3030
3165
  if r17
3031
3166
  r0 = r17
3032
3167
  else
3033
- if has_terminal?("boolean", false, index)
3034
- r18 = instantiate_node(SyntaxNode,input, index...(index + 7))
3035
- @index += 7
3168
+ if has_terminal?("attribute", false, index)
3169
+ r18 = instantiate_node(SyntaxNode,input, index...(index + 9))
3170
+ @index += 9
3036
3171
  else
3037
- terminal_parse_failure("boolean")
3172
+ terminal_parse_failure("attribute")
3038
3173
  r18 = nil
3039
3174
  end
3040
3175
  if r18
3041
3176
  r0 = r18
3042
3177
  else
3043
- if has_terminal?("const", false, index)
3044
- r19 = instantiate_node(SyntaxNode,input, index...(index + 5))
3045
- @index += 5
3178
+ if has_terminal?("boolean", false, index)
3179
+ r19 = instantiate_node(SyntaxNode,input, index...(index + 7))
3180
+ @index += 7
3046
3181
  else
3047
- terminal_parse_failure("const")
3182
+ terminal_parse_failure("boolean")
3048
3183
  r19 = nil
3049
3184
  end
3050
3185
  if r19
3051
3186
  r0 = r19
3052
3187
  else
3053
- if has_terminal?("exception", false, index)
3054
- r20 = instantiate_node(SyntaxNode,input, index...(index + 9))
3055
- @index += 9
3188
+ if has_terminal?("caller", false, index)
3189
+ r20 = instantiate_node(SyntaxNode,input, index...(index + 6))
3190
+ @index += 6
3056
3191
  else
3057
- terminal_parse_failure("exception")
3192
+ terminal_parse_failure("caller")
3058
3193
  r20 = nil
3059
3194
  end
3060
3195
  if r20
3061
3196
  r0 = r20
3062
3197
  else
3063
- if has_terminal?("float", false, index)
3198
+ if has_terminal?("const", false, index)
3064
3199
  r21 = instantiate_node(SyntaxNode,input, index...(index + 5))
3065
3200
  @index += 5
3066
3201
  else
3067
- terminal_parse_failure("float")
3202
+ terminal_parse_failure("const")
3068
3203
  r21 = nil
3069
3204
  end
3070
3205
  if r21
3071
3206
  r0 = r21
3072
3207
  else
3073
- if has_terminal?("getraises", false, index)
3074
- r22 = instantiate_node(SyntaxNode,input, index...(index + 9))
3075
- @index += 9
3208
+ if has_terminal?("creator", false, index)
3209
+ r22 = instantiate_node(SyntaxNode,input, index...(index + 7))
3210
+ @index += 7
3076
3211
  else
3077
- terminal_parse_failure("getraises")
3212
+ terminal_parse_failure("creator")
3078
3213
  r22 = nil
3079
3214
  end
3080
3215
  if r22
3081
3216
  r0 = r22
3082
3217
  else
3083
- if has_terminal?("in", false, index)
3084
- r23 = instantiate_node(SyntaxNode,input, index...(index + 2))
3085
- @index += 2
3218
+ if has_terminal?("deleter", false, index)
3219
+ r23 = instantiate_node(SyntaxNode,input, index...(index + 7))
3220
+ @index += 7
3086
3221
  else
3087
- terminal_parse_failure("in")
3222
+ terminal_parse_failure("deleter")
3088
3223
  r23 = nil
3089
3224
  end
3090
3225
  if r23
3091
3226
  r0 = r23
3092
3227
  else
3093
- if has_terminal?("interface", false, index)
3094
- r24 = instantiate_node(SyntaxNode,input, index...(index + 9))
3095
- @index += 9
3228
+ if has_terminal?("double", false, index)
3229
+ r24 = instantiate_node(SyntaxNode,input, index...(index + 6))
3230
+ @index += 6
3096
3231
  else
3097
- terminal_parse_failure("interface")
3232
+ terminal_parse_failure("double")
3098
3233
  r24 = nil
3099
3234
  end
3100
3235
  if r24
3101
3236
  r0 = r24
3102
3237
  else
3103
- if has_terminal?("long", false, index)
3104
- r25 = instantiate_node(SyntaxNode,input, index...(index + 4))
3105
- @index += 4
3238
+ if has_terminal?("exception", false, index)
3239
+ r25 = instantiate_node(SyntaxNode,input, index...(index + 9))
3240
+ @index += 9
3106
3241
  else
3107
- terminal_parse_failure("long")
3242
+ terminal_parse_failure("exception")
3108
3243
  r25 = nil
3109
3244
  end
3110
3245
  if r25
3111
3246
  r0 = r25
3112
3247
  else
3113
- if has_terminal?("module", false, index)
3114
- r26 = instantiate_node(SyntaxNode,input, index...(index + 6))
3115
- @index += 6
3248
+ if has_terminal?("float", false, index)
3249
+ r26 = instantiate_node(SyntaxNode,input, index...(index + 5))
3250
+ @index += 5
3116
3251
  else
3117
- terminal_parse_failure("module")
3252
+ terminal_parse_failure("float")
3118
3253
  r26 = nil
3119
3254
  end
3120
3255
  if r26
3121
3256
  r0 = r26
3122
3257
  else
3123
- if has_terminal?("octet", false, index)
3124
- r27 = instantiate_node(SyntaxNode,input, index...(index + 5))
3125
- @index += 5
3258
+ if has_terminal?("getraises", false, index)
3259
+ r27 = instantiate_node(SyntaxNode,input, index...(index + 9))
3260
+ @index += 9
3126
3261
  else
3127
- terminal_parse_failure("octet")
3262
+ terminal_parse_failure("getraises")
3128
3263
  r27 = nil
3129
3264
  end
3130
3265
  if r27
3131
3266
  r0 = r27
3132
3267
  else
3133
- if has_terminal?("raises", false, index)
3268
+ if has_terminal?("getter", false, index)
3134
3269
  r28 = instantiate_node(SyntaxNode,input, index...(index + 6))
3135
3270
  @index += 6
3136
3271
  else
3137
- terminal_parse_failure("raises")
3272
+ terminal_parse_failure("getter")
3138
3273
  r28 = nil
3139
3274
  end
3140
3275
  if r28
3141
3276
  r0 = r28
3142
3277
  else
3143
- if has_terminal?("sequence", false, index)
3144
- r29 = instantiate_node(SyntaxNode,input, index...(index + 8))
3145
- @index += 8
3278
+ if has_terminal?("implements", false, index)
3279
+ r29 = instantiate_node(SyntaxNode,input, index...(index + 10))
3280
+ @index += 10
3146
3281
  else
3147
- terminal_parse_failure("sequence")
3282
+ terminal_parse_failure("implements")
3148
3283
  r29 = nil
3149
3284
  end
3150
3285
  if r29
3151
3286
  r0 = r29
3152
3287
  else
3153
- if has_terminal?("setraises", false, index)
3154
- r30 = instantiate_node(SyntaxNode,input, index...(index + 9))
3155
- @index += 9
3288
+ if has_terminal?("in", false, index)
3289
+ r30 = instantiate_node(SyntaxNode,input, index...(index + 2))
3290
+ @index += 2
3156
3291
  else
3157
- terminal_parse_failure("setraises")
3292
+ terminal_parse_failure("in")
3158
3293
  r30 = nil
3159
3294
  end
3160
3295
  if r30
3161
3296
  r0 = r30
3162
3297
  else
3163
- if has_terminal?("short", false, index)
3164
- r31 = instantiate_node(SyntaxNode,input, index...(index + 5))
3165
- @index += 5
3298
+ if has_terminal?("interface", false, index)
3299
+ r31 = instantiate_node(SyntaxNode,input, index...(index + 9))
3300
+ @index += 9
3166
3301
  else
3167
- terminal_parse_failure("short")
3302
+ terminal_parse_failure("interface")
3168
3303
  r31 = nil
3169
3304
  end
3170
3305
  if r31
3171
3306
  r0 = r31
3172
3307
  else
3173
- if has_terminal?("typedef", false, index)
3174
- r32 = instantiate_node(SyntaxNode,input, index...(index + 7))
3175
- @index += 7
3308
+ if has_terminal?("long", false, index)
3309
+ r32 = instantiate_node(SyntaxNode,input, index...(index + 4))
3310
+ @index += 4
3176
3311
  else
3177
- terminal_parse_failure("typedef")
3312
+ terminal_parse_failure("long")
3178
3313
  r32 = nil
3179
3314
  end
3180
3315
  if r32
3181
3316
  r0 = r32
3182
3317
  else
3183
- if has_terminal?("unsigned", false, index)
3184
- r33 = instantiate_node(SyntaxNode,input, index...(index + 8))
3185
- @index += 8
3318
+ if has_terminal?("module", false, index)
3319
+ r33 = instantiate_node(SyntaxNode,input, index...(index + 6))
3320
+ @index += 6
3186
3321
  else
3187
- terminal_parse_failure("unsigned")
3322
+ terminal_parse_failure("module")
3188
3323
  r33 = nil
3189
3324
  end
3190
3325
  if r33
3191
3326
  r0 = r33
3192
3327
  else
3193
- if has_terminal?("valuetype", false, index)
3194
- r34 = instantiate_node(SyntaxNode,input, index...(index + 9))
3195
- @index += 9
3328
+ if has_terminal?("octet", false, index)
3329
+ r34 = instantiate_node(SyntaxNode,input, index...(index + 5))
3330
+ @index += 5
3196
3331
  else
3197
- terminal_parse_failure("valuetype")
3332
+ terminal_parse_failure("octet")
3198
3333
  r34 = nil
3199
3334
  end
3200
3335
  if r34
3201
3336
  r0 = r34
3202
3337
  else
3203
- @index = i0
3204
- r0 = nil
3338
+ if has_terminal?("omittable", false, index)
3339
+ r35 = instantiate_node(SyntaxNode,input, index...(index + 9))
3340
+ @index += 9
3341
+ else
3342
+ terminal_parse_failure("omittable")
3343
+ r35 = nil
3344
+ end
3345
+ if r35
3346
+ r0 = r35
3347
+ else
3348
+ if has_terminal?("optional", false, index)
3349
+ r36 = instantiate_node(SyntaxNode,input, index...(index + 8))
3350
+ @index += 8
3351
+ else
3352
+ terminal_parse_failure("optional")
3353
+ r36 = nil
3354
+ end
3355
+ if r36
3356
+ r0 = r36
3357
+ else
3358
+ if has_terminal?("raises", false, index)
3359
+ r37 = instantiate_node(SyntaxNode,input, index...(index + 6))
3360
+ @index += 6
3361
+ else
3362
+ terminal_parse_failure("raises")
3363
+ r37 = nil
3364
+ end
3365
+ if r37
3366
+ r0 = r37
3367
+ else
3368
+ if has_terminal?("sequence", false, index)
3369
+ r38 = instantiate_node(SyntaxNode,input, index...(index + 8))
3370
+ @index += 8
3371
+ else
3372
+ terminal_parse_failure("sequence")
3373
+ r38 = nil
3374
+ end
3375
+ if r38
3376
+ r0 = r38
3377
+ else
3378
+ if has_terminal?("setraises", false, index)
3379
+ r39 = instantiate_node(SyntaxNode,input, index...(index + 9))
3380
+ @index += 9
3381
+ else
3382
+ terminal_parse_failure("setraises")
3383
+ r39 = nil
3384
+ end
3385
+ if r39
3386
+ r0 = r39
3387
+ else
3388
+ if has_terminal?("setter", false, index)
3389
+ r40 = instantiate_node(SyntaxNode,input, index...(index + 6))
3390
+ @index += 6
3391
+ else
3392
+ terminal_parse_failure("setter")
3393
+ r40 = nil
3394
+ end
3395
+ if r40
3396
+ r0 = r40
3397
+ else
3398
+ if has_terminal?("short", false, index)
3399
+ r41 = instantiate_node(SyntaxNode,input, index...(index + 5))
3400
+ @index += 5
3401
+ else
3402
+ terminal_parse_failure("short")
3403
+ r41 = nil
3404
+ end
3405
+ if r41
3406
+ r0 = r41
3407
+ else
3408
+ if has_terminal?("DOMString", false, index)
3409
+ r42 = instantiate_node(SyntaxNode,input, index...(index + 9))
3410
+ @index += 9
3411
+ else
3412
+ terminal_parse_failure("DOMString")
3413
+ r42 = nil
3414
+ end
3415
+ if r42
3416
+ r0 = r42
3417
+ else
3418
+ if has_terminal?("stringifier", false, index)
3419
+ r43 = instantiate_node(SyntaxNode,input, index...(index + 11))
3420
+ @index += 11
3421
+ else
3422
+ terminal_parse_failure("stringifier")
3423
+ r43 = nil
3424
+ end
3425
+ if r43
3426
+ r0 = r43
3427
+ else
3428
+ if has_terminal?("typedef", false, index)
3429
+ r44 = instantiate_node(SyntaxNode,input, index...(index + 7))
3430
+ @index += 7
3431
+ else
3432
+ terminal_parse_failure("typedef")
3433
+ r44 = nil
3434
+ end
3435
+ if r44
3436
+ r0 = r44
3437
+ else
3438
+ if has_terminal?("unsigned", false, index)
3439
+ r45 = instantiate_node(SyntaxNode,input, index...(index + 8))
3440
+ @index += 8
3441
+ else
3442
+ terminal_parse_failure("unsigned")
3443
+ r45 = nil
3444
+ end
3445
+ if r45
3446
+ r0 = r45
3447
+ else
3448
+ if has_terminal?("void", false, index)
3449
+ r46 = instantiate_node(SyntaxNode,input, index...(index + 4))
3450
+ @index += 4
3451
+ else
3452
+ terminal_parse_failure("void")
3453
+ r46 = nil
3454
+ end
3455
+ if r46
3456
+ r0 = r46
3457
+ else
3458
+ @index = i0
3459
+ r0 = nil
3460
+ end
3461
+ end
3462
+ end
3463
+ end
3464
+ end
3465
+ end
3466
+ end
3467
+ end
3468
+ end
3469
+ end
3470
+ end
3471
+ end
3205
3472
  end
3206
3473
  end
3207
3474
  end
@@ -3246,7 +3513,10 @@ module WebIDL
3246
3513
  start_index = index
3247
3514
  if node_cache[:OtherOrComma].has_key?(index)
3248
3515
  cached = node_cache[:OtherOrComma][index]
3249
- @index = cached.interval.end if cached
3516
+ if cached
3517
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3518
+ @index = cached.interval.end
3519
+ end
3250
3520
  return cached
3251
3521
  end
3252
3522
 
@@ -3275,49 +3545,75 @@ module WebIDL
3275
3545
  r0
3276
3546
  end
3277
3547
 
3548
+ module Type0
3549
+ def type
3550
+ elements[0]
3551
+ end
3552
+
3553
+ def array
3554
+ elements[1]
3555
+ end
3556
+ end
3557
+
3278
3558
  def _nt_Type
3279
3559
  start_index = index
3280
3560
  if node_cache[:Type].has_key?(index)
3281
3561
  cached = node_cache[:Type][index]
3282
- @index = cached.interval.end if cached
3562
+ if cached
3563
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3564
+ @index = cached.interval.end
3565
+ end
3283
3566
  return cached
3284
3567
  end
3285
3568
 
3286
- i0 = index
3287
- r1 = _nt_NullableType
3288
- if r1
3289
- r0 = r1
3569
+ i0, s0 = index, []
3570
+ i1 = index
3571
+ r2 = _nt_NullableType
3572
+ if r2
3573
+ r1 = r2
3290
3574
  else
3291
- r2 = _nt_ScopedName
3292
- if r2
3293
- r0 = r2
3575
+ r3 = _nt_ScopedName
3576
+ if r3
3577
+ r1 = r3
3294
3578
  else
3295
3579
  if has_terminal?("any", false, index)
3296
- r3 = instantiate_node(SyntaxNode,input, index...(index + 3))
3580
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 3))
3297
3581
  @index += 3
3298
3582
  else
3299
3583
  terminal_parse_failure("any")
3300
- r3 = nil
3584
+ r4 = nil
3301
3585
  end
3302
- if r3
3303
- r0 = r3
3586
+ if r4
3587
+ r1 = r4
3304
3588
  else
3305
3589
  if has_terminal?("object", false, index)
3306
- r4 = instantiate_node(SyntaxNode,input, index...(index + 6))
3590
+ r5 = instantiate_node(SyntaxNode,input, index...(index + 6))
3307
3591
  @index += 6
3308
3592
  else
3309
3593
  terminal_parse_failure("object")
3310
- r4 = nil
3594
+ r5 = nil
3311
3595
  end
3312
- if r4
3313
- r0 = r4
3596
+ if r5
3597
+ r1 = r5
3314
3598
  else
3315
- @index = i0
3316
- r0 = nil
3599
+ @index = i1
3600
+ r1 = nil
3317
3601
  end
3318
3602
  end
3319
3603
  end
3320
3604
  end
3605
+ s0 << r1
3606
+ if r1
3607
+ r6 = _nt_OptionalArray
3608
+ s0 << r6
3609
+ end
3610
+ if s0.last
3611
+ r0 = instantiate_node(ParseTree::Type,input, i0...index, s0)
3612
+ r0.extend(Type0)
3613
+ else
3614
+ @index = i0
3615
+ r0 = nil
3616
+ end
3321
3617
 
3322
3618
  node_cache[:Type][start_index] = r0
3323
3619
 
@@ -3420,7 +3716,10 @@ module WebIDL
3420
3716
  start_index = index
3421
3717
  if node_cache[:NullableType].has_key?(index)
3422
3718
  cached = node_cache[:NullableType][index]
3423
- @index = cached.interval.end if cached
3719
+ if cached
3720
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3721
+ @index = cached.interval.end
3722
+ end
3424
3723
  return cached
3425
3724
  end
3426
3725
 
@@ -3711,7 +4010,10 @@ module WebIDL
3711
4010
  start_index = index
3712
4011
  if node_cache[:UnsignedIntegerType].has_key?(index)
3713
4012
  cached = node_cache[:UnsignedIntegerType][index]
3714
- @index = cached.interval.end if cached
4013
+ if cached
4014
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
4015
+ @index = cached.interval.end
4016
+ end
3715
4017
  return cached
3716
4018
  end
3717
4019
 
@@ -3771,7 +4073,10 @@ module WebIDL
3771
4073
  start_index = index
3772
4074
  if node_cache[:IntegerType].has_key?(index)
3773
4075
  cached = node_cache[:IntegerType][index]
3774
- @index = cached.interval.end if cached
4076
+ if cached
4077
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
4078
+ @index = cached.interval.end
4079
+ end
3775
4080
  return cached
3776
4081
  end
3777
4082
 
@@ -3827,7 +4132,10 @@ module WebIDL
3827
4132
  start_index = index
3828
4133
  if node_cache[:OptionalLong].has_key?(index)
3829
4134
  cached = node_cache[:OptionalLong][index]
3830
- @index = cached.interval.end if cached
4135
+ if cached
4136
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
4137
+ @index = cached.interval.end
4138
+ end
3831
4139
  return cached
3832
4140
  end
3833
4141
 
@@ -3853,7 +4161,10 @@ module WebIDL
3853
4161
  start_index = index
3854
4162
  if node_cache[:Nullable].has_key?(index)
3855
4163
  cached = node_cache[:Nullable][index]
3856
- @index = cached.interval.end if cached
4164
+ if cached
4165
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
4166
+ @index = cached.interval.end
4167
+ end
3857
4168
  return cached
3858
4169
  end
3859
4170
 
@@ -3875,6 +4186,35 @@ module WebIDL
3875
4186
  r0
3876
4187
  end
3877
4188
 
4189
+ def _nt_OptionalArray
4190
+ start_index = index
4191
+ if node_cache[:OptionalArray].has_key?(index)
4192
+ cached = node_cache[:OptionalArray][index]
4193
+ if cached
4194
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
4195
+ @index = cached.interval.end
4196
+ end
4197
+ return cached
4198
+ end
4199
+
4200
+ if has_terminal?("[]", false, index)
4201
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 2))
4202
+ @index += 2
4203
+ else
4204
+ terminal_parse_failure("[]")
4205
+ r1 = nil
4206
+ end
4207
+ if r1
4208
+ r0 = r1
4209
+ else
4210
+ r0 = instantiate_node(SyntaxNode,input, index...index)
4211
+ end
4212
+
4213
+ node_cache[:OptionalArray][start_index] = r0
4214
+
4215
+ r0
4216
+ end
4217
+
3878
4218
  module NonSpace0
3879
4219
  end
3880
4220
 
@@ -3882,7 +4222,10 @@ module WebIDL
3882
4222
  start_index = index
3883
4223
  if node_cache[:NonSpace].has_key?(index)
3884
4224
  cached = node_cache[:NonSpace][index]
3885
- @index = cached.interval.end if cached
4225
+ if cached
4226
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
4227
+ @index = cached.interval.end
4228
+ end
3886
4229
  return cached
3887
4230
  end
3888
4231
 
@@ -3929,7 +4272,10 @@ module WebIDL
3929
4272
  start_index = index
3930
4273
  if node_cache[:ReturnType].has_key?(index)
3931
4274
  cached = node_cache[:ReturnType][index]
3932
- @index = cached.interval.end if cached
4275
+ if cached
4276
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
4277
+ @index = cached.interval.end
4278
+ end
3933
4279
  return cached
3934
4280
  end
3935
4281
 
@@ -3976,7 +4322,10 @@ module WebIDL
3976
4322
  start_index = index
3977
4323
  if node_cache[:ScopedNameList].has_key?(index)
3978
4324
  cached = node_cache[:ScopedNameList][index]
3979
- @index = cached.interval.end if cached
4325
+ if cached
4326
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
4327
+ @index = cached.interval.end
4328
+ end
3980
4329
  return cached
3981
4330
  end
3982
4331
 
@@ -4022,7 +4371,10 @@ module WebIDL
4022
4371
  start_index = index
4023
4372
  if node_cache[:ScopedNames].has_key?(index)
4024
4373
  cached = node_cache[:ScopedNames][index]
4025
- @index = cached.interval.end if cached
4374
+ if cached
4375
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
4376
+ @index = cached.interval.end
4377
+ end
4026
4378
  return cached
4027
4379
  end
4028
4380
 
@@ -4069,7 +4421,10 @@ module WebIDL
4069
4421
  start_index = index
4070
4422
  if node_cache[:ScopedName].has_key?(index)
4071
4423
  cached = node_cache[:ScopedName][index]
4072
- @index = cached.interval.end if cached
4424
+ if cached
4425
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
4426
+ @index = cached.interval.end
4427
+ end
4073
4428
  return cached
4074
4429
  end
4075
4430
 
@@ -4106,7 +4461,10 @@ module WebIDL
4106
4461
  start_index = index
4107
4462
  if node_cache[:AbsoluteScopedName].has_key?(index)
4108
4463
  cached = node_cache[:AbsoluteScopedName][index]
4109
- @index = cached.interval.end if cached
4464
+ if cached
4465
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
4466
+ @index = cached.interval.end
4467
+ end
4110
4468
  return cached
4111
4469
  end
4112
4470
 
@@ -4154,7 +4512,10 @@ module WebIDL
4154
4512
  start_index = index
4155
4513
  if node_cache[:RelativeScopedName].has_key?(index)
4156
4514
  cached = node_cache[:RelativeScopedName][index]
4157
- @index = cached.interval.end if cached
4515
+ if cached
4516
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
4517
+ @index = cached.interval.end
4518
+ end
4158
4519
  return cached
4159
4520
  end
4160
4521
 
@@ -4196,7 +4557,10 @@ module WebIDL
4196
4557
  start_index = index
4197
4558
  if node_cache[:ScopedNameParts].has_key?(index)
4198
4559
  cached = node_cache[:ScopedNameParts][index]
4199
- @index = cached.interval.end if cached
4560
+ if cached
4561
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
4562
+ @index = cached.interval.end
4563
+ end
4200
4564
  return cached
4201
4565
  end
4202
4566
 
@@ -4256,7 +4620,10 @@ module WebIDL
4256
4620
  start_index = index
4257
4621
  if node_cache[:integer].has_key?(index)
4258
4622
  cached = node_cache[:integer][index]
4259
- @index = cached.interval.end if cached
4623
+ if cached
4624
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
4625
+ @index = cached.interval.end
4626
+ end
4260
4627
  return cached
4261
4628
  end
4262
4629
 
@@ -4433,7 +4800,10 @@ module WebIDL
4433
4800
  start_index = index
4434
4801
  if node_cache[:float].has_key?(index)
4435
4802
  cached = node_cache[:float][index]
4436
- @index = cached.interval.end if cached
4803
+ if cached
4804
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
4805
+ @index = cached.interval.end
4806
+ end
4437
4807
  return cached
4438
4808
  end
4439
4809
 
@@ -4751,7 +5121,10 @@ module WebIDL
4751
5121
  start_index = index
4752
5122
  if node_cache[:identifier].has_key?(index)
4753
5123
  cached = node_cache[:identifier][index]
4754
- @index = cached.interval.end if cached
5124
+ if cached
5125
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
5126
+ @index = cached.interval.end
5127
+ end
4755
5128
  return cached
4756
5129
  end
4757
5130
 
@@ -4802,7 +5175,10 @@ module WebIDL
4802
5175
  start_index = index
4803
5176
  if node_cache[:string].has_key?(index)
4804
5177
  cached = node_cache[:string][index]
4805
- @index = cached.interval.end if cached
5178
+ if cached
5179
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
5180
+ @index = cached.interval.end
5181
+ end
4806
5182
  return cached
4807
5183
  end
4808
5184
 
@@ -4866,7 +5242,10 @@ module WebIDL
4866
5242
  start_index = index
4867
5243
  if node_cache[:ws].has_key?(index)
4868
5244
  cached = node_cache[:ws][index]
4869
- @index = cached.interval.end if cached
5245
+ if cached
5246
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
5247
+ @index = cached.interval.end
5248
+ end
4870
5249
  return cached
4871
5250
  end
4872
5251
 
@@ -4997,7 +5376,10 @@ module WebIDL
4997
5376
  start_index = index
4998
5377
  if node_cache[:other].has_key?(index)
4999
5378
  cached = node_cache[:other][index]
5000
- @index = cached.interval.end if cached
5379
+ if cached
5380
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
5381
+ @index = cached.interval.end
5382
+ end
5001
5383
  return cached
5002
5384
  end
5003
5385
 
@@ -5023,7 +5405,10 @@ module WebIDL
5023
5405
  start_index = index
5024
5406
  if node_cache[:line_comment].has_key?(index)
5025
5407
  cached = node_cache[:line_comment][index]
5026
- @index = cached.interval.end if cached
5408
+ if cached
5409
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
5410
+ @index = cached.interval.end
5411
+ end
5027
5412
  return cached
5028
5413
  end
5029
5414
 
@@ -5103,7 +5488,10 @@ module WebIDL
5103
5488
  start_index = index
5104
5489
  if node_cache[:block_comment].has_key?(index)
5105
5490
  cached = node_cache[:block_comment][index]
5106
- @index = cached.interval.end if cached
5491
+ if cached
5492
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
5493
+ @index = cached.interval.end
5494
+ end
5107
5495
  return cached
5108
5496
  end
5109
5497