treetop 1.4.12 → 1.4.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/bin/tt CHANGED
@@ -77,7 +77,7 @@ end
77
77
  def protect_output?(filename, forced=false)
78
78
  if !forced and
79
79
  File.exist?(filename) and
80
- (l=File.open(filename) { |f| f.gets rescue "" }) != Treetop::Compiler::AUTOGENERATED
80
+ File.open(filename) { |f| ![(f.gets rescue ''), (f.gets rescue '')].include? Treetop::Compiler::AUTOGENERATED }
81
81
  puts "ERROR: '#{filename}' output already exists; skipping compilation...\n"
82
82
  return true
83
83
  end
data/doc/site/robots.txt CHANGED
File without changes
@@ -4,8 +4,13 @@ module Treetop
4
4
  class GrammarCompiler
5
5
  def compile(source_path, target_path = source_path.gsub(/\.(treetop|tt)\Z/, '.rb'))
6
6
  File.open(target_path, 'w') do |target_file|
7
- target_file.write(AUTOGENERATED+"\n\n")
8
- target_file.write(ruby_source(source_path))
7
+ ruby = ruby_source(source_path)
8
+ if ruby =~ /\A#.*\n/
9
+ ruby.sub!(/\n/, "\n"+AUTOGENERATED+"\n\n")
10
+ else
11
+ ruby = AUTOGENERATED+"\n\n"+ruby
12
+ end
13
+ target_file.write(ruby)
9
14
  end
10
15
  end
11
16
 
@@ -1140,36 +1140,22 @@ module Treetop
1140
1140
  end
1141
1141
 
1142
1142
  module Sequence0
1143
- def space
1143
+ def sequence_body
1144
1144
  elements[0]
1145
1145
  end
1146
1146
 
1147
- def labeled_sequence_primary
1147
+ def node_class_declarations
1148
1148
  elements[1]
1149
1149
  end
1150
1150
  end
1151
1151
 
1152
1152
  module Sequence1
1153
- def head
1154
- elements[0]
1155
- end
1156
-
1157
- def tail
1158
- elements[1]
1159
- end
1160
-
1161
- def node_class_declarations
1162
- elements[2]
1163
- end
1164
- end
1165
-
1166
- module Sequence2
1167
1153
  def sequence_elements
1168
- [head] + tail
1154
+ [sequence_body.head] + tail
1169
1155
  end
1170
1156
 
1171
1157
  def tail
1172
- super.elements.map {|elt| elt.labeled_sequence_primary }
1158
+ sequence_body.tail
1173
1159
  end
1174
1160
 
1175
1161
  def inline_modules
@@ -1195,7 +1181,95 @@ module Treetop
1195
1181
  end
1196
1182
 
1197
1183
  i0, s0 = index, []
1198
- r1 = _nt_labeled_sequence_primary
1184
+ r1 = _nt_sequence_body
1185
+ s0 << r1
1186
+ if r1
1187
+ r2 = _nt_node_class_declarations
1188
+ s0 << r2
1189
+ end
1190
+ if s0.last
1191
+ r0 = instantiate_node(Sequence,input, i0...index, s0)
1192
+ r0.extend(Sequence0)
1193
+ r0.extend(Sequence1)
1194
+ else
1195
+ @index = i0
1196
+ r0 = nil
1197
+ end
1198
+
1199
+ node_cache[:sequence][start_index] = r0
1200
+
1201
+ r0
1202
+ end
1203
+
1204
+ def _nt_sequence_body
1205
+ start_index = index
1206
+ if node_cache[:sequence_body].has_key?(index)
1207
+ cached = node_cache[:sequence_body][index]
1208
+ if cached
1209
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1210
+ @index = cached.interval.end
1211
+ end
1212
+ return cached
1213
+ end
1214
+
1215
+ i0 = index
1216
+ r1 = _nt_variable_length_sequence_body
1217
+ if r1
1218
+ r0 = r1
1219
+ else
1220
+ r2 = _nt_labeled_expression_sequence_body
1221
+ if r2
1222
+ r0 = r2
1223
+ else
1224
+ @index = i0
1225
+ r0 = nil
1226
+ end
1227
+ end
1228
+
1229
+ node_cache[:sequence_body][start_index] = r0
1230
+
1231
+ r0
1232
+ end
1233
+
1234
+ module VariableLengthSequenceBody0
1235
+ def space
1236
+ elements[0]
1237
+ end
1238
+
1239
+ def optionally_labeled_sequence_primary
1240
+ elements[1]
1241
+ end
1242
+ end
1243
+
1244
+ module VariableLengthSequenceBody1
1245
+ def head
1246
+ elements[0]
1247
+ end
1248
+
1249
+ def tail
1250
+ elements[1]
1251
+ end
1252
+ end
1253
+
1254
+ module VariableLengthSequenceBody2
1255
+ def tail
1256
+ super.elements.map {|elt| elt.optionally_labeled_sequence_primary }
1257
+ end
1258
+ end
1259
+
1260
+ def _nt_variable_length_sequence_body
1261
+ start_index = index
1262
+ if node_cache[:variable_length_sequence_body].has_key?(index)
1263
+ cached = node_cache[:variable_length_sequence_body][index]
1264
+ if cached
1265
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1266
+ @index = cached.interval.end
1267
+ end
1268
+ return cached
1269
+ end
1270
+
1271
+ i0, s0 = index, []
1272
+ r1 = _nt_optionally_labeled_sequence_primary
1199
1273
  s0 << r1
1200
1274
  if r1
1201
1275
  s2, i2 = [], index
@@ -1204,12 +1278,12 @@ module Treetop
1204
1278
  r4 = _nt_space
1205
1279
  s3 << r4
1206
1280
  if r4
1207
- r5 = _nt_labeled_sequence_primary
1281
+ r5 = _nt_optionally_labeled_sequence_primary
1208
1282
  s3 << r5
1209
1283
  end
1210
1284
  if s3.last
1211
1285
  r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
1212
- r3.extend(Sequence0)
1286
+ r3.extend(VariableLengthSequenceBody0)
1213
1287
  else
1214
1288
  @index = i3
1215
1289
  r3 = nil
@@ -1227,21 +1301,46 @@ module Treetop
1227
1301
  r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1228
1302
  end
1229
1303
  s0 << r2
1230
- if r2
1231
- r6 = _nt_node_class_declarations
1232
- s0 << r6
1233
- end
1234
1304
  end
1235
1305
  if s0.last
1236
- r0 = instantiate_node(Sequence,input, i0...index, s0)
1237
- r0.extend(Sequence1)
1238
- r0.extend(Sequence2)
1306
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1307
+ r0.extend(VariableLengthSequenceBody1)
1308
+ r0.extend(VariableLengthSequenceBody2)
1239
1309
  else
1240
1310
  @index = i0
1241
1311
  r0 = nil
1242
1312
  end
1243
1313
 
1244
- node_cache[:sequence][start_index] = r0
1314
+ node_cache[:variable_length_sequence_body][start_index] = r0
1315
+
1316
+ r0
1317
+ end
1318
+
1319
+ module LabeledExpressionSequenceBody0
1320
+ def head
1321
+ self
1322
+ end
1323
+
1324
+ def tail
1325
+ []
1326
+ end
1327
+ end
1328
+
1329
+ def _nt_labeled_expression_sequence_body
1330
+ start_index = index
1331
+ if node_cache[:labeled_expression_sequence_body].has_key?(index)
1332
+ cached = node_cache[:labeled_expression_sequence_body][index]
1333
+ if cached
1334
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1335
+ @index = cached.interval.end
1336
+ end
1337
+ return cached
1338
+ end
1339
+
1340
+ r0 = _nt_labeled_sequence_primary
1341
+ r0.extend(LabeledExpressionSequenceBody0)
1342
+
1343
+ node_cache[:labeled_expression_sequence_body][start_index] = r0
1245
1344
 
1246
1345
  r0
1247
1346
  end
@@ -1499,8 +1598,38 @@ module Treetop
1499
1598
  r0
1500
1599
  end
1501
1600
 
1601
+ def _nt_optionally_labeled_sequence_primary
1602
+ start_index = index
1603
+ if node_cache[:optionally_labeled_sequence_primary].has_key?(index)
1604
+ cached = node_cache[:optionally_labeled_sequence_primary][index]
1605
+ if cached
1606
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1607
+ @index = cached.interval.end
1608
+ end
1609
+ return cached
1610
+ end
1611
+
1612
+ i0 = index
1613
+ r1 = _nt_labeled_sequence_primary
1614
+ if r1
1615
+ r0 = r1
1616
+ else
1617
+ r2 = _nt_unlabeled_sequence_primary
1618
+ if r2
1619
+ r0 = r2
1620
+ else
1621
+ @index = i0
1622
+ r0 = nil
1623
+ end
1624
+ end
1625
+
1626
+ node_cache[:optionally_labeled_sequence_primary][start_index] = r0
1627
+
1628
+ r0
1629
+ end
1630
+
1502
1631
  module LabeledSequencePrimary0
1503
- def label
1632
+ def named_label
1504
1633
  elements[0]
1505
1634
  end
1506
1635
 
@@ -1519,13 +1648,7 @@ module Treetop
1519
1648
  end
1520
1649
 
1521
1650
  def label_name
1522
- if label.name
1523
- label.name
1524
- elsif sequence_primary.instance_of?(Nonterminal)
1525
- sequence_primary.text_value
1526
- else
1527
- nil
1528
- end
1651
+ named_label.name
1529
1652
  end
1530
1653
  end
1531
1654
 
@@ -1541,7 +1664,7 @@ module Treetop
1541
1664
  end
1542
1665
 
1543
1666
  i0, s0 = index, []
1544
- r1 = _nt_label
1667
+ r1 = _nt_named_label
1545
1668
  s0 << r1
1546
1669
  if r1
1547
1670
  r2 = _nt_sequence_primary
@@ -1561,26 +1684,64 @@ module Treetop
1561
1684
  r0
1562
1685
  end
1563
1686
 
1564
- module Label0
1565
- def alpha_char
1687
+ module UnlabeledSequencePrimary0
1688
+ def null_label
1566
1689
  elements[0]
1567
1690
  end
1568
1691
 
1692
+ def sequence_primary
1693
+ elements[1]
1694
+ end
1569
1695
  end
1570
1696
 
1571
- module Label1
1572
- end
1697
+ module UnlabeledSequencePrimary1
1698
+ def compile(lexical_address, builder)
1699
+ sequence_primary.compile(lexical_address, builder)
1700
+ end
1573
1701
 
1574
- module Label2
1575
- def name
1576
- elements[0].text_value
1702
+ def inline_modules
1703
+ sequence_primary.inline_modules
1704
+ end
1705
+
1706
+ def label_name
1707
+ if sequence_primary.instance_of?(Nonterminal)
1708
+ sequence_primary.text_value
1709
+ else
1710
+ nil
1711
+ end
1577
1712
  end
1578
1713
  end
1579
1714
 
1580
- module Label3
1581
- def name
1582
- nil
1715
+ def _nt_unlabeled_sequence_primary
1716
+ start_index = index
1717
+ if node_cache[:unlabeled_sequence_primary].has_key?(index)
1718
+ cached = node_cache[:unlabeled_sequence_primary][index]
1719
+ if cached
1720
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1721
+ @index = cached.interval.end
1722
+ end
1723
+ return cached
1724
+ end
1725
+
1726
+ i0, s0 = index, []
1727
+ r1 = _nt_null_label
1728
+ s0 << r1
1729
+ if r1
1730
+ r2 = _nt_sequence_primary
1731
+ s0 << r2
1732
+ end
1733
+ if s0.last
1734
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1735
+ r0.extend(UnlabeledSequencePrimary0)
1736
+ r0.extend(UnlabeledSequencePrimary1)
1737
+ else
1738
+ @index = i0
1739
+ r0 = nil
1583
1740
  end
1741
+
1742
+ node_cache[:unlabeled_sequence_primary][start_index] = r0
1743
+
1744
+ r0
1584
1745
  end
1585
1746
 
1586
1747
  def _nt_label
@@ -1595,69 +1756,127 @@ module Treetop
1595
1756
  end
1596
1757
 
1597
1758
  i0 = index
1759
+ r1 = _nt_named_label
1760
+ if r1
1761
+ r0 = r1
1762
+ else
1763
+ r2 = _nt_null_label
1764
+ if r2
1765
+ r0 = r2
1766
+ else
1767
+ @index = i0
1768
+ r0 = nil
1769
+ end
1770
+ end
1771
+
1772
+ node_cache[:label][start_index] = r0
1773
+
1774
+ r0
1775
+ end
1776
+
1777
+ module NamedLabel0
1778
+ def alpha_char
1779
+ elements[0]
1780
+ end
1781
+
1782
+ end
1783
+
1784
+ module NamedLabel1
1785
+ end
1786
+
1787
+ module NamedLabel2
1788
+ def name
1789
+ elements[0].text_value
1790
+ end
1791
+ end
1792
+
1793
+ def _nt_named_label
1794
+ start_index = index
1795
+ if node_cache[:named_label].has_key?(index)
1796
+ cached = node_cache[:named_label][index]
1797
+ if cached
1798
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1799
+ @index = cached.interval.end
1800
+ end
1801
+ return cached
1802
+ end
1803
+
1804
+ i0, s0 = index, []
1598
1805
  i1, s1 = index, []
1599
- i2, s2 = index, []
1600
- r3 = _nt_alpha_char
1601
- s2 << r3
1602
- if r3
1603
- s4, i4 = [], index
1806
+ r2 = _nt_alpha_char
1807
+ s1 << r2
1808
+ if r2
1809
+ s3, i3 = [], index
1604
1810
  loop do
1605
- r5 = _nt_alphanumeric_char
1606
- if r5
1607
- s4 << r5
1811
+ r4 = _nt_alphanumeric_char
1812
+ if r4
1813
+ s3 << r4
1608
1814
  else
1609
1815
  break
1610
1816
  end
1611
1817
  end
1612
- r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
1613
- s2 << r4
1818
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
1819
+ s1 << r3
1614
1820
  end
1615
- if s2.last
1616
- r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1617
- r2.extend(Label0)
1821
+ if s1.last
1822
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
1823
+ r1.extend(NamedLabel0)
1618
1824
  else
1619
- @index = i2
1620
- r2 = nil
1825
+ @index = i1
1826
+ r1 = nil
1621
1827
  end
1622
- s1 << r2
1623
- if r2
1828
+ s0 << r1
1829
+ if r1
1624
1830
  if has_terminal?(':', false, index)
1625
- r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
1831
+ r5 = instantiate_node(SyntaxNode,input, index...(index + 1))
1626
1832
  @index += 1
1627
1833
  else
1628
1834
  terminal_parse_failure(':')
1629
- r6 = nil
1835
+ r5 = nil
1630
1836
  end
1631
- s1 << r6
1837
+ s0 << r5
1632
1838
  end
1633
- if s1.last
1634
- r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
1635
- r1.extend(Label1)
1636
- r1.extend(Label2)
1839
+ if s0.last
1840
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1841
+ r0.extend(NamedLabel1)
1842
+ r0.extend(NamedLabel2)
1637
1843
  else
1638
- @index = i1
1639
- r1 = nil
1844
+ @index = i0
1845
+ r0 = nil
1640
1846
  end
1641
- if r1
1642
- r0 = r1
1643
- else
1644
- if has_terminal?('', false, index)
1645
- r7 = instantiate_node(SyntaxNode,input, index...(index + 0))
1646
- r7.extend(Label3)
1647
- @index += 0
1648
- else
1649
- terminal_parse_failure('')
1650
- r7 = nil
1651
- end
1652
- if r7
1653
- r0 = r7
1654
- else
1655
- @index = i0
1656
- r0 = nil
1847
+
1848
+ node_cache[:named_label][start_index] = r0
1849
+
1850
+ r0
1851
+ end
1852
+
1853
+ module NullLabel0
1854
+ def name
1855
+ nil
1856
+ end
1857
+ end
1858
+
1859
+ def _nt_null_label
1860
+ start_index = index
1861
+ if node_cache[:null_label].has_key?(index)
1862
+ cached = node_cache[:null_label][index]
1863
+ if cached
1864
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1865
+ @index = cached.interval.end
1657
1866
  end
1867
+ return cached
1658
1868
  end
1659
1869
 
1660
- node_cache[:label][start_index] = r0
1870
+ if has_terminal?('', false, index)
1871
+ r0 = instantiate_node(SyntaxNode,input, index...(index + 0))
1872
+ r0.extend(NullLabel0)
1873
+ @index += 0
1874
+ else
1875
+ terminal_parse_failure('')
1876
+ r0 = nil
1877
+ end
1878
+
1879
+ node_cache[:null_label][start_index] = r0
1661
1880
 
1662
1881
  r0
1663
1882
  end
@@ -91,13 +91,13 @@ module Treetop
91
91
  end
92
92
 
93
93
  rule sequence
94
- head:labeled_sequence_primary tail:(space labeled_sequence_primary)+ node_class_declarations <Sequence> {
94
+ sequence_body node_class_declarations <Sequence> {
95
95
  def sequence_elements
96
- [head] + tail
96
+ [sequence_body.head] + tail
97
97
  end
98
98
 
99
99
  def tail
100
- super.elements.map {|elt| elt.labeled_sequence_primary }
100
+ sequence_body.tail
101
101
  end
102
102
 
103
103
  def inline_modules
@@ -112,6 +112,30 @@ module Treetop
112
112
  }
113
113
  end
114
114
 
115
+ rule sequence_body
116
+ variable_length_sequence_body / labeled_expression_sequence_body
117
+ end
118
+
119
+ rule variable_length_sequence_body
120
+ head:optionally_labeled_sequence_primary tail:(space optionally_labeled_sequence_primary)+ {
121
+ def tail
122
+ super.elements.map {|elt| elt.optionally_labeled_sequence_primary }
123
+ end
124
+ }
125
+ end
126
+
127
+ rule labeled_expression_sequence_body
128
+ labeled_sequence_primary {
129
+ def head
130
+ self
131
+ end
132
+
133
+ def tail
134
+ []
135
+ end
136
+ }
137
+ end
138
+
115
139
  rule alternative
116
140
  sequence / primary
117
141
  end
@@ -188,8 +212,12 @@ module Treetop
188
212
  }
189
213
  end
190
214
 
215
+ rule optionally_labeled_sequence_primary
216
+ labeled_sequence_primary / unlabeled_sequence_primary
217
+ end
218
+
191
219
  rule labeled_sequence_primary
192
- label sequence_primary {
220
+ named_label sequence_primary {
193
221
  def compile(lexical_address, builder)
194
222
  sequence_primary.compile(lexical_address, builder)
195
223
  end
@@ -199,9 +227,23 @@ module Treetop
199
227
  end
200
228
 
201
229
  def label_name
202
- if label.name
203
- label.name
204
- elsif sequence_primary.instance_of?(Nonterminal)
230
+ named_label.name
231
+ end
232
+ }
233
+ end
234
+
235
+ rule unlabeled_sequence_primary
236
+ null_label sequence_primary {
237
+ def compile(lexical_address, builder)
238
+ sequence_primary.compile(lexical_address, builder)
239
+ end
240
+
241
+ def inline_modules
242
+ sequence_primary.inline_modules
243
+ end
244
+
245
+ def label_name
246
+ if sequence_primary.instance_of?(Nonterminal)
205
247
  sequence_primary.text_value
206
248
  else
207
249
  nil
@@ -211,12 +253,18 @@ module Treetop
211
253
  end
212
254
 
213
255
  rule label
256
+ named_label / null_label
257
+ end
258
+
259
+ rule named_label
214
260
  (alpha_char alphanumeric_char*) ':' {
215
261
  def name
216
262
  elements[0].text_value
217
263
  end
218
264
  }
219
- /
265
+ end
266
+
267
+ rule null_label
220
268
  '' {
221
269
  def name
222
270
  nil
@@ -28,11 +28,13 @@ class String
28
28
  end
29
29
  end
30
30
 
31
- def indent(n)
32
- if n >= 0
33
- gsub(/^/, ' ' * n)
34
- else
35
- gsub(/^ {0,#{-n}}/, "")
31
+ unless method_defined?(:indent)
32
+ def indent(n)
33
+ if n >= 0
34
+ gsub(/^/, ' ' * n)
35
+ else
36
+ gsub(/^ {0,#{-n}}/, "")
37
+ end
36
38
  end
37
39
  end
38
40
 
@@ -2,7 +2,7 @@ module Treetop #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 1
4
4
  MINOR = 4
5
- TINY = 12
5
+ TINY = 14
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
@@ -1,4 +1,3 @@
1
- #!ruby19
2
1
  # encoding: utf-8
3
2
 
4
3
  require 'spec_helper'
@@ -60,6 +60,20 @@ module SequenceSpec
60
60
  end
61
61
  end
62
62
 
63
+ describe "a labeled single element sequence followed by a node module declaration and a block" do
64
+ testing_expression 'foo:"foo"+ <SequenceSpec::ModFoo> { def a_method; end }'
65
+ it "upon successfully matching input, instantiates a syntax node and extends it with the declared module, element accessor methods, and the method from the inline module" do
66
+ parse('foofoofoo') do |result|
67
+ result.should_not be_nil
68
+ result.should respond_to(:mod_method)
69
+ result.should be_an_instance_of(Treetop::Runtime::SyntaxNode)
70
+ result.should be_a_kind_of(ModFoo)
71
+ result.should respond_to(:a_method)
72
+ result.foo.text_value.should == 'foofoofoo'
73
+ end
74
+ end
75
+ end
76
+
63
77
  describe "a sequence of non-terminals" do
64
78
  testing_grammar %{
65
79
  grammar TestGrammar
File without changes
File without changes
@@ -20,6 +20,7 @@ describe "The 'tt' comand line compiler" do
20
20
  @test_grammar = "#{@test_path}.tt"
21
21
  @test_ruby = "#{@test_path}.rb"
22
22
  File.open(@test_grammar, 'w+') do |f|
23
+ f.print("# Encoding: UTF-8\n")
23
24
  f.print("grammar Dumb\n")
24
25
  f.print("end\n")
25
26
  end unless File.exists?(@test_grammar)
@@ -96,8 +97,14 @@ describe "The 'tt' comand line compiler" do
96
97
  File.exists?(pf).should be_true
97
98
  File.zero?(pf).should_not be_true
98
99
 
99
- # Modify the file and make sure it remains unchanged:
100
- File.open(pf, "r+") { |f| f.write("# Changed...") }
100
+ # Check that the magic comment is preserved:
101
+ written = File.open(pf, "r") { |f| s = f.read }
102
+ written.should =~ /\A# Encoding: UTF-8/
103
+
104
+ # Modify the file's auto-generated comment and make sure it doesn't get overwritten:
105
+ written.sub!(/generated/, 'broken');
106
+ File.open(pf, "w") { |f| f.write(written) }
107
+ # File.open(pf, "r+") { |f| s = f.read; s.sub!(/generated/, 'broken'); f.rewind; f.write(s) }
101
108
  orig_file_hash = Digest::SHA1.hexdigest(File.read(pf))
102
109
 
103
110
  Kernel.open("|ruby -S tt -o #{pf} #{@test_path}") do |io|
File without changes
File without changes
File without changes
data/treetop.gemspec CHANGED
@@ -5,12 +5,12 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "treetop"
8
- s.version = "1.4.12"
8
+ s.version = "1.4.14"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Nathan Sobo", "Clifford Heath"]
12
12
  s.autorequire = "treetop"
13
- s.date = "2012-10-29"
13
+ s.date = "2013-06-04"
14
14
  s.email = "cliffordheath@gmail.com"
15
15
  s.executables = ["tt"]
16
16
  s.extra_rdoc_files = [
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: treetop
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.12
4
+ version: 1.4.14
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire: treetop
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-10-29 00:00:00.000000000 Z
13
+ date: 2013-06-04 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: polyglot
@@ -289,7 +289,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
289
289
  version: '0'
290
290
  segments:
291
291
  - 0
292
- hash: 292037797696699893
292
+ hash: 622706517614693275
293
293
  required_rubygems_version: !ruby/object:Gem::Requirement
294
294
  none: false
295
295
  requirements: