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,101 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe Melbourne::Parser do
4
+
5
+ it 'should correctly parse "def x; super; end"' do
6
+ ruby = <<-ruby
7
+ def x
8
+ super
9
+ end
10
+ ruby
11
+ ast = {:define=>
12
+ {:@body=>
13
+ {:block=>{:@array=>[{:zsuper=>{:@block=>nil, :@line=>2}}], :@line=>1}},
14
+ :@name=>:x,
15
+ :@line=>1,
16
+ :@arguments=>
17
+ {:formalarguments=>
18
+ {:@block_arg=>nil,
19
+ :@names=>[],
20
+ :@defaults=>nil,
21
+ :@optional=>[],
22
+ :@splat=>nil,
23
+ :@line=>1,
24
+ :@required=>[]}}}}
25
+
26
+ ruby.should parse_as(ast)
27
+ end
28
+
29
+ it 'should correctly parse "def x(a); super; end"' do
30
+ ruby = <<-ruby
31
+ def x(a)
32
+ super
33
+ end
34
+ ruby
35
+ ast = {:define=>
36
+ {:@body=>
37
+ {:block=>{:@array=>[{:zsuper=>{:@block=>nil, :@line=>2}}], :@line=>1}},
38
+ :@name=>:x,
39
+ :@line=>1,
40
+ :@arguments=>
41
+ {:formalarguments=>
42
+ {:@block_arg=>nil,
43
+ :@names=>[:a],
44
+ :@defaults=>nil,
45
+ :@optional=>[],
46
+ :@splat=>nil,
47
+ :@line=>1,
48
+ :@required=>[:a]}}}}
49
+
50
+ ruby.should parse_as(ast)
51
+ end
52
+
53
+ it 'should correctly parse "def x(&block); super; end"' do
54
+ ruby = <<-ruby
55
+ def x(&block)
56
+ super
57
+ end
58
+ ruby
59
+ ast = {:define=>
60
+ {:@body=>
61
+ {:block=>{:@array=>[{:zsuper=>{:@block=>nil, :@line=>2}}], :@line=>1}},
62
+ :@name=>:x,
63
+ :@line=>1,
64
+ :@arguments=>
65
+ {:formalarguments=>
66
+ {:@block_arg=>{:blockargument=>{:@name=>:block, :@line=>1}},
67
+ :@names=>[:block],
68
+ :@defaults=>nil,
69
+ :@optional=>[],
70
+ :@splat=>nil,
71
+ :@line=>1,
72
+ :@required=>[]}}}}
73
+
74
+ ruby.should parse_as(ast)
75
+ end
76
+
77
+ it 'should correctly parse "def x(a, *as); super; end"' do
78
+ ruby = <<-ruby
79
+ def x(a, *as)
80
+ super
81
+ end
82
+ ruby
83
+ ast = {:define=>
84
+ {:@body=>
85
+ {:block=>{:@array=>[{:zsuper=>{:@block=>nil, :@line=>2}}], :@line=>1}},
86
+ :@name=>:x,
87
+ :@line=>1,
88
+ :@arguments=>
89
+ {:formalarguments=>
90
+ {:@block_arg=>nil,
91
+ :@names=>[:a, :as],
92
+ :@defaults=>nil,
93
+ :@optional=>[],
94
+ :@splat=>:as,
95
+ :@line=>1,
96
+ :@required=>[:a]}}}}
97
+
98
+ ruby.should parse_as(ast)
99
+ end
100
+
101
+ end
@@ -0,0 +1,27 @@
1
+ # The ParseAsMatcher wraps the logic for checking that a string of Ruby code
2
+ # is parsed to the expected AST.
3
+ #
4
+ class ParseAsMatcher
5
+
6
+ def initialize(expected)
7
+ @expected = expected
8
+ end
9
+
10
+ def matches?(actual)
11
+ @actual = actual.to_ast.reduced_graph
12
+ @actual == @expected
13
+ end
14
+
15
+ def failure_message
16
+ ["Expected:\n#{@actual.inspect}\n", "to equal:\n#{@expected.inspect}"]
17
+ end
18
+
19
+ end
20
+
21
+ class Object
22
+
23
+ def parse_as(ast)
24
+ ParseAsMatcher.new(ast)
25
+ end
26
+
27
+ end
@@ -0,0 +1,10 @@
1
+ $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + "/../lib"))
2
+
3
+ require 'rubygems'
4
+ require 'spec'
5
+
6
+ require 'lib/melbourne'
7
+
8
+ %w(matchers helpers).each do |directory|
9
+ Dir["#{File.dirname(__FILE__)}/#{directory}/**/*.rb"].each { |file| require file }
10
+ end
metadata ADDED
@@ -0,0 +1,168 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: melbourne
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Evan Phoenix
8
+ - Marco Otte-Witte
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2010-01-06 00:00:00 +01:00
14
+ default_executable:
15
+ dependencies: []
16
+
17
+ description: Malbourne makes it possible to generate abstract syntax trees (AST) from arbitrary Ruby source code by leveraging Rubinius' parser component (without the need to actually run Rubinius).
18
+ email: marco.otte-witte@simplabs.com
19
+ executables: []
20
+
21
+ extensions:
22
+ - ext/melbourne/extconf.rb
23
+ extra_rdoc_files: []
24
+
25
+ files:
26
+ - LICENSE
27
+ - README.rdoc
28
+ - HISTORY
29
+ - VERSION.yml
30
+ - Rakefile
31
+ - lib/melbourne/ast/constants.rb
32
+ - lib/melbourne/ast/control_flow.rb
33
+ - lib/melbourne/ast/data.rb
34
+ - lib/melbourne/ast/definitions.rb
35
+ - lib/melbourne/ast/exceptions.rb
36
+ - lib/melbourne/ast/file.rb
37
+ - lib/melbourne/ast/grapher.rb
38
+ - lib/melbourne/ast/literals.rb
39
+ - lib/melbourne/ast/node.rb
40
+ - lib/melbourne/ast/operators.rb
41
+ - lib/melbourne/ast/self.rb
42
+ - lib/melbourne/ast/sends.rb
43
+ - lib/melbourne/ast/values.rb
44
+ - lib/melbourne/ast/variables.rb
45
+ - lib/melbourne/ast.rb
46
+ - lib/melbourne/parser.rb
47
+ - lib/melbourne/processor.rb
48
+ - lib/melbourne.rb
49
+ - spec/helpers/ast/node.rb
50
+ - spec/helpers/ast/reduced_graph.rb
51
+ - spec/lib/parser/alias_spec.rb
52
+ - spec/lib/parser/and_spec.rb
53
+ - spec/lib/parser/array_spec.rb
54
+ - spec/lib/parser/attrasgn_spec.rb
55
+ - spec/lib/parser/back_ref_spec.rb
56
+ - spec/lib/parser/call_spec.rb
57
+ - spec/lib/parser/case_spec.rb
58
+ - spec/lib/parser/cdecl_spec.rb
59
+ - spec/lib/parser/class_spec.rb
60
+ - spec/lib/parser/colon2_spec.rb
61
+ - spec/lib/parser/colon3_spec.rb
62
+ - spec/lib/parser/const_spec.rb
63
+ - spec/lib/parser/cvar_spec.rb
64
+ - spec/lib/parser/cvasgn_spec.rb
65
+ - spec/lib/parser/cvdecl_spec.rb
66
+ - spec/lib/parser/defined_spec.rb
67
+ - spec/lib/parser/defn_spec.rb
68
+ - spec/lib/parser/defs_spec.rb
69
+ - spec/lib/parser/dot2_spec.rb
70
+ - spec/lib/parser/dot3_spec.rb
71
+ - spec/lib/parser/dregx_spec.rb
72
+ - spec/lib/parser/dstr_spec.rb
73
+ - spec/lib/parser/dsym_spec.rb
74
+ - spec/lib/parser/dxstr_spec.rb
75
+ - spec/lib/parser/ensure_spec.rb
76
+ - spec/lib/parser/false_spec.rb
77
+ - spec/lib/parser/flip2_spec.rb
78
+ - spec/lib/parser/flip3_spec.rb
79
+ - spec/lib/parser/for_spec.rb
80
+ - spec/lib/parser/gasgn_spec.rb
81
+ - spec/lib/parser/gvar_spec.rb
82
+ - spec/lib/parser/hash_spec.rb
83
+ - spec/lib/parser/iasgn_spec.rb
84
+ - spec/lib/parser/if_spec.rb
85
+ - spec/lib/parser/iter_spec.rb
86
+ - spec/lib/parser/lasgn_spec.rb
87
+ - spec/lib/parser/lit_spec.rb
88
+ - spec/lib/parser/masgn_spec.rb
89
+ - spec/lib/parser/match2_spec.rb
90
+ - spec/lib/parser/match3_spec.rb
91
+ - spec/lib/parser/match_spec.rb
92
+ - spec/lib/parser/module_spec.rb
93
+ - spec/lib/parser/nil_spec.rb
94
+ - spec/lib/parser/not_spec.rb
95
+ - spec/lib/parser/nth_ref_spec.rb
96
+ - spec/lib/parser/op_asgn_spec.rb
97
+ - spec/lib/parser/or_spec.rb
98
+ - spec/lib/parser/postexe_spec.rb
99
+ - spec/lib/parser/regex_spec.rb
100
+ - spec/lib/parser/rescue_spec.rb
101
+ - spec/lib/parser/return_spec.rb
102
+ - spec/lib/parser/sclass_spec.rb
103
+ - spec/lib/parser/str_spec.rb
104
+ - spec/lib/parser/super_spec.rb
105
+ - spec/lib/parser/true_spec.rb
106
+ - spec/lib/parser/undef_spec.rb
107
+ - spec/lib/parser/until_spec.rb
108
+ - spec/lib/parser/valias_spec.rb
109
+ - spec/lib/parser/while_spec.rb
110
+ - spec/lib/parser/xstr_spec.rb
111
+ - spec/lib/parser/yield_spec.rb
112
+ - spec/lib/parser/zsuper_spec.rb
113
+ - spec/matchers/parse_as.rb
114
+ - spec/spec_helper.rb
115
+ - ext/melbourne/bstring-license.txt
116
+ - ext/melbourne/bstrlib.c
117
+ - ext/melbourne/bstrlib.h
118
+ - ext/melbourne/extconf.rb
119
+ - ext/melbourne/grammar.cpp
120
+ - ext/melbourne/grammar.hpp
121
+ - ext/melbourne/grammar.y
122
+ - ext/melbourne/internal.hpp
123
+ - ext/melbourne/lex.c.tab
124
+ - ext/melbourne/local_state.hpp
125
+ - ext/melbourne/melbourne.cpp
126
+ - ext/melbourne/node.hpp
127
+ - ext/melbourne/node_types.cpp
128
+ - ext/melbourne/node_types.hpp
129
+ - ext/melbourne/node_types.rb
130
+ - ext/melbourne/quark.cpp
131
+ - ext/melbourne/quark.hpp
132
+ - ext/melbourne/symbols.cpp
133
+ - ext/melbourne/symbols.hpp
134
+ - ext/melbourne/var_table.cpp
135
+ - ext/melbourne/var_table.hpp
136
+ - ext/melbourne/visitor.cpp
137
+ - ext/melbourne/visitor.hpp
138
+ has_rdoc: true
139
+ homepage: http://github.com/marcoow/melbourne
140
+ licenses: []
141
+
142
+ post_install_message:
143
+ rdoc_options:
144
+ - --inline-source
145
+ - --charset=UTF-8
146
+ require_paths:
147
+ - lib
148
+ required_ruby_version: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: "0"
153
+ version:
154
+ required_rubygems_version: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ version: "0"
159
+ version:
160
+ requirements: []
161
+
162
+ rubyforge_project:
163
+ rubygems_version: 1.3.5
164
+ signing_key:
165
+ specification_version: 3
166
+ summary: Rubinius' melbourne parser extracted into a gem (without the actual Rubinius)
167
+ test_files: []
168
+