melbourne 1.0.0

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.
Files changed (113) hide show
  1. data/HISTORY +3 -0
  2. data/LICENSE +27 -0
  3. data/README.rdoc +38 -0
  4. data/Rakefile +38 -0
  5. data/VERSION.yml +4 -0
  6. data/ext/melbourne/bstring-license.txt +29 -0
  7. data/ext/melbourne/bstrlib.c +2918 -0
  8. data/ext/melbourne/bstrlib.h +302 -0
  9. data/ext/melbourne/extconf.rb +76 -0
  10. data/ext/melbourne/grammar.cpp +11885 -0
  11. data/ext/melbourne/grammar.hpp +14 -0
  12. data/ext/melbourne/grammar.y +6013 -0
  13. data/ext/melbourne/internal.hpp +137 -0
  14. data/ext/melbourne/lex.c.tab +136 -0
  15. data/ext/melbourne/local_state.hpp +41 -0
  16. data/ext/melbourne/melbourne.cpp +37 -0
  17. data/ext/melbourne/node.hpp +262 -0
  18. data/ext/melbourne/node_types.cpp +245 -0
  19. data/ext/melbourne/node_types.hpp +135 -0
  20. data/ext/melbourne/node_types.rb +190 -0
  21. data/ext/melbourne/quark.cpp +52 -0
  22. data/ext/melbourne/quark.hpp +14 -0
  23. data/ext/melbourne/symbols.cpp +219 -0
  24. data/ext/melbourne/symbols.hpp +116 -0
  25. data/ext/melbourne/var_table.cpp +113 -0
  26. data/ext/melbourne/var_table.hpp +33 -0
  27. data/ext/melbourne/visitor.cpp +1052 -0
  28. data/ext/melbourne/visitor.hpp +20 -0
  29. data/lib/melbourne/ast/constants.rb +128 -0
  30. data/lib/melbourne/ast/control_flow.rb +382 -0
  31. data/lib/melbourne/ast/data.rb +19 -0
  32. data/lib/melbourne/ast/definitions.rb +561 -0
  33. data/lib/melbourne/ast/exceptions.rb +182 -0
  34. data/lib/melbourne/ast/file.rb +15 -0
  35. data/lib/melbourne/ast/grapher.rb +75 -0
  36. data/lib/melbourne/ast/literals.rb +268 -0
  37. data/lib/melbourne/ast/node.rb +21 -0
  38. data/lib/melbourne/ast/operators.rb +117 -0
  39. data/lib/melbourne/ast/self.rb +17 -0
  40. data/lib/melbourne/ast/sends.rb +451 -0
  41. data/lib/melbourne/ast/values.rb +74 -0
  42. data/lib/melbourne/ast/variables.rb +251 -0
  43. data/lib/melbourne/ast.rb +22 -0
  44. data/lib/melbourne/parser.rb +38 -0
  45. data/lib/melbourne/processor.rb +460 -0
  46. data/lib/melbourne.rb +46 -0
  47. data/spec/helpers/ast/node.rb +15 -0
  48. data/spec/helpers/ast/reduced_graph.rb +64 -0
  49. data/spec/lib/parser/alias_spec.rb +97 -0
  50. data/spec/lib/parser/and_spec.rb +63 -0
  51. data/spec/lib/parser/array_spec.rb +157 -0
  52. data/spec/lib/parser/attrasgn_spec.rb +401 -0
  53. data/spec/lib/parser/back_ref_spec.rb +20 -0
  54. data/spec/lib/parser/call_spec.rb +958 -0
  55. data/spec/lib/parser/case_spec.rb +577 -0
  56. data/spec/lib/parser/cdecl_spec.rb +108 -0
  57. data/spec/lib/parser/class_spec.rb +221 -0
  58. data/spec/lib/parser/colon2_spec.rb +13 -0
  59. data/spec/lib/parser/colon3_spec.rb +12 -0
  60. data/spec/lib/parser/const_spec.rb +12 -0
  61. data/spec/lib/parser/cvar_spec.rb +55 -0
  62. data/spec/lib/parser/cvasgn_spec.rb +71 -0
  63. data/spec/lib/parser/cvdecl_spec.rb +31 -0
  64. data/spec/lib/parser/defined_spec.rb +353 -0
  65. data/spec/lib/parser/defn_spec.rb +1409 -0
  66. data/spec/lib/parser/defs_spec.rb +247 -0
  67. data/spec/lib/parser/dot2_spec.rb +29 -0
  68. data/spec/lib/parser/dot3_spec.rb +29 -0
  69. data/spec/lib/parser/dregx_spec.rb +127 -0
  70. data/spec/lib/parser/dstr_spec.rb +453 -0
  71. data/spec/lib/parser/dsym_spec.rb +31 -0
  72. data/spec/lib/parser/dxstr_spec.rb +31 -0
  73. data/spec/lib/parser/ensure_spec.rb +279 -0
  74. data/spec/lib/parser/false_spec.rb +12 -0
  75. data/spec/lib/parser/flip2_spec.rb +138 -0
  76. data/spec/lib/parser/flip3_spec.rb +100 -0
  77. data/spec/lib/parser/for_spec.rb +279 -0
  78. data/spec/lib/parser/gasgn_spec.rb +34 -0
  79. data/spec/lib/parser/gvar_spec.rb +33 -0
  80. data/spec/lib/parser/hash_spec.rb +77 -0
  81. data/spec/lib/parser/iasgn_spec.rb +54 -0
  82. data/spec/lib/parser/if_spec.rb +439 -0
  83. data/spec/lib/parser/iter_spec.rb +2582 -0
  84. data/spec/lib/parser/lasgn_spec.rb +1066 -0
  85. data/spec/lib/parser/lit_spec.rb +75 -0
  86. data/spec/lib/parser/masgn_spec.rb +1970 -0
  87. data/spec/lib/parser/match2_spec.rb +47 -0
  88. data/spec/lib/parser/match3_spec.rb +54 -0
  89. data/spec/lib/parser/match_spec.rb +19 -0
  90. data/spec/lib/parser/module_spec.rb +102 -0
  91. data/spec/lib/parser/nil_spec.rb +13 -0
  92. data/spec/lib/parser/not_spec.rb +39 -0
  93. data/spec/lib/parser/nth_ref_spec.rb +12 -0
  94. data/spec/lib/parser/op_asgn_spec.rb +619 -0
  95. data/spec/lib/parser/or_spec.rb +155 -0
  96. data/spec/lib/parser/postexe_spec.rb +31 -0
  97. data/spec/lib/parser/regex_spec.rb +52 -0
  98. data/spec/lib/parser/rescue_spec.rb +1028 -0
  99. data/spec/lib/parser/return_spec.rb +151 -0
  100. data/spec/lib/parser/sclass_spec.rb +172 -0
  101. data/spec/lib/parser/str_spec.rb +162 -0
  102. data/spec/lib/parser/super_spec.rb +276 -0
  103. data/spec/lib/parser/true_spec.rb +12 -0
  104. data/spec/lib/parser/undef_spec.rb +222 -0
  105. data/spec/lib/parser/until_spec.rb +286 -0
  106. data/spec/lib/parser/valias_spec.rb +12 -0
  107. data/spec/lib/parser/while_spec.rb +458 -0
  108. data/spec/lib/parser/xstr_spec.rb +12 -0
  109. data/spec/lib/parser/yield_spec.rb +202 -0
  110. data/spec/lib/parser/zsuper_spec.rb +101 -0
  111. data/spec/matchers/parse_as.rb +27 -0
  112. data/spec/spec_helper.rb +10 -0
  113. metadata +168 -0
@@ -0,0 +1,155 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe Melbourne::Parser do
4
+
5
+ it 'should correctly parse "(a or b)"' do
6
+ ruby = '(a or b)'
7
+ ast = {:or=>
8
+ {:@line=>1,
9
+ :@left=>
10
+ {:send=>
11
+ {:@block=>nil,
12
+ :@name=>:a,
13
+ :@line=>1,
14
+ :@privately=>true,
15
+ :@receiver=>{:self=>{:@line=>1}},
16
+ :@check_for_local=>false}},
17
+ :@right=>
18
+ {:send=>
19
+ {:@block=>nil,
20
+ :@name=>:b,
21
+ :@line=>1,
22
+ :@privately=>true,
23
+ :@receiver=>{:self=>{:@line=>1}},
24
+ :@check_for_local=>false}}}}
25
+
26
+ ruby.should parse_as(ast)
27
+ end
28
+
29
+ it 'should correctly parse "((a || b) || (c && d))"' do
30
+ ruby = '((a || b) || (c && d))'
31
+ ast = {:or=>
32
+ {:@line=>1,
33
+ :@left=>
34
+ {:or=>
35
+ {:@line=>1,
36
+ :@left=>
37
+ {:send=>
38
+ {:@block=>nil,
39
+ :@name=>:a,
40
+ :@line=>1,
41
+ :@privately=>true,
42
+ :@receiver=>{:self=>{:@line=>1}},
43
+ :@check_for_local=>false}},
44
+ :@right=>
45
+ {:send=>
46
+ {:@block=>nil,
47
+ :@name=>:b,
48
+ :@line=>1,
49
+ :@privately=>true,
50
+ :@receiver=>{:self=>{:@line=>1}},
51
+ :@check_for_local=>false}}}},
52
+ :@right=>
53
+ {:and=>
54
+ {:@line=>1,
55
+ :@left=>
56
+ {:send=>
57
+ {:@block=>nil,
58
+ :@name=>:c,
59
+ :@line=>1,
60
+ :@privately=>true,
61
+ :@receiver=>{:self=>{:@line=>1}},
62
+ :@check_for_local=>false}},
63
+ :@right=>
64
+ {:send=>
65
+ {:@block=>nil,
66
+ :@name=>:d,
67
+ :@line=>1,
68
+ :@privately=>true,
69
+ :@receiver=>{:self=>{:@line=>1}},
70
+ :@check_for_local=>false}}}}}}
71
+
72
+ ruby.should parse_as(ast)
73
+ end
74
+
75
+ it 'should correctly parse "((a or b) or (c and d))"' do
76
+ ruby = '((a or b) or (c and d))'
77
+ ast = {:or=>
78
+ {:@line=>1,
79
+ :@left=>
80
+ {:or=>
81
+ {:@line=>1,
82
+ :@left=>
83
+ {:send=>
84
+ {:@block=>nil,
85
+ :@name=>:a,
86
+ :@line=>1,
87
+ :@privately=>true,
88
+ :@receiver=>{:self=>{:@line=>1}},
89
+ :@check_for_local=>false}},
90
+ :@right=>
91
+ {:send=>
92
+ {:@block=>nil,
93
+ :@name=>:b,
94
+ :@line=>1,
95
+ :@privately=>true,
96
+ :@receiver=>{:self=>{:@line=>1}},
97
+ :@check_for_local=>false}}}},
98
+ :@right=>
99
+ {:and=>
100
+ {:@line=>1,
101
+ :@left=>
102
+ {:send=>
103
+ {:@block=>nil,
104
+ :@name=>:c,
105
+ :@line=>1,
106
+ :@privately=>true,
107
+ :@receiver=>{:self=>{:@line=>1}},
108
+ :@check_for_local=>false}},
109
+ :@right=>
110
+ {:send=>
111
+ {:@block=>nil,
112
+ :@name=>:d,
113
+ :@line=>1,
114
+ :@privately=>true,
115
+ :@receiver=>{:self=>{:@line=>1}},
116
+ :@check_for_local=>false}}}}}}
117
+
118
+ ruby.should parse_as(ast)
119
+ end
120
+
121
+ it 'should correctly parse "() or a"' do
122
+ ruby = '() or a'
123
+ ast = {:or=>
124
+ {:@line=>1,
125
+ :@left=>{},
126
+ :@right=>
127
+ {:send=>
128
+ {:@block=>nil,
129
+ :@name=>:a,
130
+ :@line=>1,
131
+ :@privately=>true,
132
+ :@receiver=>{:self=>{:@line=>1}},
133
+ :@check_for_local=>false}}}}
134
+
135
+ ruby.should parse_as(ast)
136
+ end
137
+
138
+ it 'should correctly parse "a or ()"' do
139
+ ruby = 'a or ()'
140
+ ast = {:or=>
141
+ {:@line=>1,
142
+ :@left=>
143
+ {:send=>
144
+ {:@block=>nil,
145
+ :@name=>:a,
146
+ :@line=>1,
147
+ :@privately=>true,
148
+ :@receiver=>{:self=>{:@line=>1}},
149
+ :@check_for_local=>false}},
150
+ :@right=>{}}}
151
+
152
+ ruby.should parse_as(ast)
153
+ end
154
+
155
+ end
@@ -0,0 +1,31 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe Melbourne::Parser do
4
+
5
+ it 'should correctly parse "END { 1 }"' do
6
+ ruby = 'END { 1 }'
7
+ ast = {:send=>
8
+ {:@block=>
9
+ {:iter=>
10
+ {:@body=>{:fixnumliteral=>{:@line=>1, :@value=>1}},
11
+ :@line=>1,
12
+ :@arguments=>
13
+ {:iterarguments=>
14
+ {:@block=>nil,
15
+ :@arity=>-1,
16
+ :@prelude=>nil,
17
+ :@optional=>0,
18
+ :@splat=>nil,
19
+ :@line=>1,
20
+ :@splat_index=>-2,
21
+ :@required_args=>0}}}},
22
+ :@name=>:at_exit,
23
+ :@line=>1,
24
+ :@privately=>true,
25
+ :@receiver=>{:self=>{:@line=>1}},
26
+ :@check_for_local=>false}}
27
+
28
+ ruby.should parse_as(ast)
29
+ end
30
+
31
+ end
@@ -0,0 +1,52 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe Melbourne::Parser do
4
+
5
+ it 'should correctly parse "str.split(//i)"' do
6
+ ruby = 'str.split(//i)'
7
+ ast = {:sendwitharguments=>
8
+ {:@block=>nil,
9
+ :@name=>:split,
10
+ :@line=>1,
11
+ :@privately=>false,
12
+ :@receiver=>
13
+ {:send=>
14
+ {:@block=>nil,
15
+ :@name=>:str,
16
+ :@line=>1,
17
+ :@privately=>true,
18
+ :@receiver=>{:self=>{:@line=>1}},
19
+ :@check_for_local=>false}},
20
+ :@check_for_local=>false,
21
+ :@arguments=>
22
+ {:actualarguments=>
23
+ {:@array=>
24
+ [{:regexliteral=>{:@source=>:"<blank>", :@options=>1, :@line=>1}}],
25
+ :@splat=>nil,
26
+ :@line=>1}}}}
27
+
28
+ ruby.should parse_as(ast)
29
+ end
30
+
31
+ it 'should correctly parse "/x/n"' do
32
+ ruby = '/x/n'
33
+ ast = {:regexliteral=>{:@source=>:x, :@options=>16, :@line=>1}}
34
+
35
+ ruby.should parse_as(ast)
36
+ end
37
+
38
+ it 'should correctly parse "/x/o"' do
39
+ ruby = '/x/o'
40
+ ast = {:regexliteral=>{:@source=>:x, :@options=>0, :@line=>1}}
41
+
42
+ ruby.should parse_as(ast)
43
+ end
44
+
45
+ it 'should correctly parse "/x/"' do
46
+ ruby = '/x/'
47
+ ast = {:regexliteral=>{:@source=>:x, :@options=>0, :@line=>1}}
48
+
49
+ ruby.should parse_as(ast)
50
+ end
51
+
52
+ end