melbourne 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (115) hide show
  1. data/HISTORY.md +9 -0
  2. data/LICENSE +0 -0
  3. data/README.md +43 -0
  4. data/Rakefile +20 -17
  5. data/ext/melbourne/bstring-license.txt +0 -0
  6. data/ext/melbourne/bstrlib.c +0 -0
  7. data/ext/melbourne/bstrlib.h +0 -0
  8. data/ext/melbourne/extconf.rb +0 -0
  9. data/ext/melbourne/grammar.cpp +0 -0
  10. data/ext/melbourne/grammar.hpp +0 -0
  11. data/ext/melbourne/grammar.y +0 -0
  12. data/ext/melbourne/internal.hpp +0 -0
  13. data/ext/melbourne/lex.c.tab +0 -0
  14. data/ext/melbourne/local_state.hpp +0 -0
  15. data/ext/melbourne/melbourne.cpp +0 -0
  16. data/ext/melbourne/node.hpp +0 -0
  17. data/ext/melbourne/node_types.cpp +0 -0
  18. data/ext/melbourne/node_types.hpp +0 -0
  19. data/ext/melbourne/node_types.rb +0 -0
  20. data/ext/melbourne/quark.cpp +0 -0
  21. data/ext/melbourne/quark.hpp +0 -0
  22. data/ext/melbourne/symbols.cpp +0 -0
  23. data/ext/melbourne/symbols.hpp +0 -0
  24. data/ext/melbourne/var_table.cpp +0 -0
  25. data/ext/melbourne/var_table.hpp +0 -0
  26. data/ext/melbourne/visitor.cpp +0 -0
  27. data/ext/melbourne/visitor.hpp +0 -0
  28. data/lib/melbourne.rb +16 -18
  29. data/lib/melbourne/ast.rb +14 -16
  30. data/lib/melbourne/ast/constants.rb +5 -5
  31. data/lib/melbourne/ast/control_flow.rb +18 -18
  32. data/lib/melbourne/ast/data.rb +1 -1
  33. data/lib/melbourne/ast/definitions.rb +37 -37
  34. data/lib/melbourne/ast/exceptions.rb +9 -9
  35. data/lib/melbourne/ast/file.rb +0 -0
  36. data/lib/melbourne/ast/grapher.rb +7 -1
  37. data/lib/melbourne/ast/literals.rb +14 -14
  38. data/lib/melbourne/ast/node.rb +1 -1
  39. data/lib/melbourne/ast/operators.rb +6 -6
  40. data/lib/melbourne/ast/self.rb +0 -0
  41. data/lib/melbourne/ast/sends.rb +23 -23
  42. data/lib/melbourne/ast/values.rb +6 -6
  43. data/lib/melbourne/ast/variables.rb +15 -15
  44. data/lib/melbourne/parser.rb +1 -1
  45. data/lib/melbourne/processor.rb +1 -1
  46. data/spec/helpers/ast/node.rb +0 -0
  47. data/spec/helpers/ast/reduced_graph.rb +0 -0
  48. data/spec/lib/parser/alias_spec.rb +0 -0
  49. data/spec/lib/parser/and_spec.rb +0 -0
  50. data/spec/lib/parser/array_spec.rb +0 -0
  51. data/spec/lib/parser/attrasgn_spec.rb +0 -0
  52. data/spec/lib/parser/back_ref_spec.rb +0 -0
  53. data/spec/lib/parser/call_spec.rb +0 -0
  54. data/spec/lib/parser/case_spec.rb +0 -0
  55. data/spec/lib/parser/cdecl_spec.rb +0 -0
  56. data/spec/lib/parser/class_spec.rb +0 -0
  57. data/spec/lib/parser/colon2_spec.rb +0 -0
  58. data/spec/lib/parser/colon3_spec.rb +0 -0
  59. data/spec/lib/parser/const_spec.rb +0 -0
  60. data/spec/lib/parser/cvar_spec.rb +0 -0
  61. data/spec/lib/parser/cvasgn_spec.rb +0 -0
  62. data/spec/lib/parser/cvdecl_spec.rb +0 -0
  63. data/spec/lib/parser/defined_spec.rb +0 -0
  64. data/spec/lib/parser/defn_spec.rb +0 -0
  65. data/spec/lib/parser/defs_spec.rb +0 -0
  66. data/spec/lib/parser/dot2_spec.rb +0 -0
  67. data/spec/lib/parser/dot3_spec.rb +0 -0
  68. data/spec/lib/parser/dregx_spec.rb +0 -0
  69. data/spec/lib/parser/dstr_spec.rb +0 -0
  70. data/spec/lib/parser/dsym_spec.rb +0 -0
  71. data/spec/lib/parser/dxstr_spec.rb +0 -0
  72. data/spec/lib/parser/ensure_spec.rb +0 -0
  73. data/spec/lib/parser/false_spec.rb +0 -0
  74. data/spec/lib/parser/flip2_spec.rb +0 -0
  75. data/spec/lib/parser/flip3_spec.rb +0 -0
  76. data/spec/lib/parser/for_spec.rb +0 -0
  77. data/spec/lib/parser/gasgn_spec.rb +0 -0
  78. data/spec/lib/parser/gvar_spec.rb +0 -0
  79. data/spec/lib/parser/hash_spec.rb +0 -0
  80. data/spec/lib/parser/iasgn_spec.rb +0 -0
  81. data/spec/lib/parser/if_spec.rb +0 -0
  82. data/spec/lib/parser/iter_spec.rb +0 -0
  83. data/spec/lib/parser/lasgn_spec.rb +0 -0
  84. data/spec/lib/parser/lit_spec.rb +0 -0
  85. data/spec/lib/parser/masgn_spec.rb +0 -0
  86. data/spec/lib/parser/match2_spec.rb +0 -0
  87. data/spec/lib/parser/match3_spec.rb +0 -0
  88. data/spec/lib/parser/match_spec.rb +0 -0
  89. data/spec/lib/parser/module_spec.rb +0 -0
  90. data/spec/lib/parser/nil_spec.rb +0 -0
  91. data/spec/lib/parser/not_spec.rb +0 -0
  92. data/spec/lib/parser/nth_ref_spec.rb +0 -0
  93. data/spec/lib/parser/op_asgn_spec.rb +0 -0
  94. data/spec/lib/parser/or_spec.rb +0 -0
  95. data/spec/lib/parser/postexe_spec.rb +0 -0
  96. data/spec/lib/parser/regex_spec.rb +0 -0
  97. data/spec/lib/parser/rescue_spec.rb +0 -0
  98. data/spec/lib/parser/return_spec.rb +0 -0
  99. data/spec/lib/parser/sclass_spec.rb +0 -0
  100. data/spec/lib/parser/str_spec.rb +0 -0
  101. data/spec/lib/parser/super_spec.rb +0 -0
  102. data/spec/lib/parser/true_spec.rb +0 -0
  103. data/spec/lib/parser/undef_spec.rb +0 -0
  104. data/spec/lib/parser/until_spec.rb +0 -0
  105. data/spec/lib/parser/valias_spec.rb +0 -0
  106. data/spec/lib/parser/while_spec.rb +0 -0
  107. data/spec/lib/parser/xstr_spec.rb +0 -0
  108. data/spec/lib/parser/yield_spec.rb +0 -0
  109. data/spec/lib/parser/zsuper_spec.rb +0 -0
  110. data/spec/matchers/parse_as.rb +0 -0
  111. data/spec/spec_helper.rb +0 -0
  112. metadata +19 -8
  113. data/HISTORY +0 -3
  114. data/README.rdoc +0 -38
  115. data/VERSION.yml +0 -4
@@ -0,0 +1,9 @@
1
+ 1.0.1
2
+ -----
3
+
4
+ * fixed the `require` statements
5
+
6
+ 1.0.0
7
+ -----
8
+
9
+ * initial release
data/LICENSE CHANGED
File without changes
@@ -0,0 +1,43 @@
1
+ Melbourne
2
+ =========
3
+
4
+ Melbourne is [Rubinius](http://rubini.us)' parser component. The +melbourne+ gem extracts
5
+ this parser component for stand-alone use under MRI and other environments.
6
+
7
+ For Melbourne's full RDoc, see [rdoc.info](http://rdoc.info/projects/simplabs/melbourne).
8
+
9
+ Usage
10
+ -----
11
+
12
+ Melbourne generates abstract syntax trees (ASTs) from Ruby source code:
13
+
14
+ require 'melbourne'
15
+
16
+ 'class Test; end'.to_ast # => <AST::Class:0x1017800f8
17
+ @line=1,
18
+ @body=#<AST::EmptyBody:0x101780058 @line=1>,
19
+ @name=#<AST::ClassName:0x101780080 @line=1, @superclass=#<AST::Nil:0x1017800a8 @line=1>, @name=:Test>,
20
+ @superclass=#<AST::Nil:0x1017800a8 @line=1>>
21
+
22
+ Abstract Syntax Trees
23
+ ---------------------
24
+
25
+ Abstract syntax trees allow for deep introspection of Ruby source code and are far
26
+ easier to handle than e.g. S-expressions as provided by [ParseTree](http://parsetree.rubyforge.org/)
27
+ and other gems.
28
+
29
+ For more information on abstract syntax trees, see [Wikipedia](http://en.wikipedia.org/wiki/Abstract_syntax_trees).
30
+
31
+ Authors
32
+ -------
33
+
34
+ The original code of Melbourne is part of the [Rubinius project](http://rubini.us/) and
35
+ was written by and is &copy; [Evan Phoenix](http://github.com/evanphx/).
36
+
37
+ Melbourne was extracted from Rubinius into this gem by [Marco Otte-Witte](http://simplabs.com).
38
+
39
+ Bugs/ Feature Requests
40
+ ----------------------
41
+
42
+ the +melbourne+ gem is <b>not</b> maintained by the [Rubinius](http://rubini.us) team! If you encounter
43
+ bugs or have feature requests, refer to the [Github repository](http://simplabs.github.com/melbourne).
data/Rakefile CHANGED
@@ -1,6 +1,12 @@
1
- require 'rake'
2
- require 'rake/rdoctask'
1
+ require 'rubygems'
2
+ require 'bundler'
3
+
4
+ Bundler.setup
5
+ Bundler.require
6
+
3
7
  require 'spec/rake/spectask'
8
+ require 'simplabs/excellent/rake'
9
+ require 'rake/extensiontask'
4
10
 
5
11
  desc 'Default: run specs.'
6
12
  task :default => :spec
@@ -17,22 +23,19 @@ Spec::Rake::SpecTask.new(:spec) do |t|
17
23
  end
18
24
 
19
25
  desc 'Generate documentation for the Melbourne gem.'
20
- Rake::RDocTask.new(:rdoc) do |t|
21
- t.rdoc_dir = 'doc'
22
- t.title = 'Melbourne'
23
- t.options << '--line-numbers' << '--inline-source'
24
- t.rdoc_files.include('README.rdoc')
25
- t.rdoc_files.include('lib/**/*.rb')
26
+ YARD::Rake::YardocTask.new(:doc) do |t|
27
+ t.files = ['lib/**/*.rb', '-', 'HISTORY.md']
28
+ t.options = ['--no-private', '--title', 'Melbourne Documentation']
26
29
  end
27
30
 
28
- begin
29
- require 'simplabs/excellent/rake'
31
+ desc 'compile the C extension'
32
+ Rake::ExtensionTask.new('melbourne') do |ext|
33
+ ext.lib_dir = File.join('lib', 'ext')
34
+ end
35
+ Rake::Task[:spec].prerequisites << :compile
30
36
 
31
- desc 'Analyse the Melbourne source with Excellent.'
32
- Simplabs::Excellent::Rake::ExcellentTask.new(:excellent) do |t|
33
- t.html = 'doc/excellent.html'
34
- t.paths = ['lib']
35
- end
36
- rescue LoadError
37
- puts "Install the excellent gem for source code analysis."
37
+ desc 'Analyse the Melbourne source with Excellent.'
38
+ Simplabs::Excellent::Rake::ExcellentTask.new(:excellent) do |t|
39
+ t.html = 'doc/excellent.html'
40
+ t.paths = ['lib']
38
41
  end
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -1,24 +1,22 @@
1
- base = File.dirname(__FILE__)
1
+ require 'ext/melbourne'
2
+ require 'melbourne/parser'
3
+ require 'melbourne/processor'
2
4
 
3
- require File.join(base, 'ext/melbourne')
4
- require File.join(base, 'melbourne/parser')
5
- require File.join(base, 'melbourne/processor')
6
-
7
- module Melbourne #:nodoc:
5
+ module Melbourne
8
6
  end
9
7
 
10
8
  class String
11
9
 
12
10
  # Creates an AST for a +String+ containing Ruby source code.
13
11
  #
14
- # === Example
15
- #
16
- # 'class Test; end'.to_ast # => <AST::Class:0x1017800f8...
12
+ # @param [String] name+
13
+ # the name of the source (this is usuall the name of the file the code was read from); defaults to +(eval)+
14
+ # @param [Fixnum] line
15
+ # the starting line (if it's not 1 for some reason); defaults to +1+
17
16
  #
18
- # === Arguments
17
+ # @example Converting Ruby code in a string to an AST
19
18
  #
20
- # * +name+: the name of the source (this is usuall the name of the file the code was read from); defaults to <tt>(eval)</tt>
21
- # * +line+: the starting line (if it's not 1 for some reason); defaults to <tt>1</tt>
19
+ # 'class Test; end'.to_ast # => <AST::Class:0x1017800f8...
22
20
  #
23
21
  def to_ast(name = '(eval)', line = 1)
24
22
  Melbourne::Parser.parse_string(self, name, line)
@@ -30,14 +28,14 @@ class File
30
28
 
31
29
  # Creates an AST for Ruby source code read from a file.
32
30
  #
33
- # === Example
31
+ # @param [String] name
32
+ # the name of the file to read the source code from.
33
+ # @param [Fixnum] line
34
+ # the starting line (if it's not 1 for some reason); defaults to +1+
34
35
  #
35
- # File.to_ast('user.rb') # => <AST::Class:0x1017800f8...
36
- #
37
- # === Arguments
36
+ # @example Converting Ruby code from a file to an AST
38
37
  #
39
- # * +name+: the name of the file to read the source code from.
40
- # * +line+: the starting line (if it's not 1 for some reason); defaults to <tt>1</tt>
38
+ # File.to_ast('user.rb') # => <AST::Class:0x1017800f8...
41
39
  #
42
40
  def self.to_ast(name, line = 1)
43
41
  Melbourne::Parser.parse_file(name, line)
@@ -1,22 +1,20 @@
1
- base = File.dirname(__FILE__)
2
-
3
1
  module Melbourne
4
2
 
5
- module AST #:nodoc:
3
+ module AST
6
4
  end
7
5
 
8
6
  end
9
7
 
10
- require File.join(base, 'ast/node')
11
- require File.join(base, 'ast/self')
12
- require File.join(base, 'ast/constants')
13
- require File.join(base, 'ast/control_flow')
14
- require File.join(base, 'ast/definitions')
15
- require File.join(base, 'ast/exceptions')
16
- require File.join(base, 'ast/file')
17
- require File.join(base, 'ast/grapher')
18
- require File.join(base, 'ast/literals')
19
- require File.join(base, 'ast/operators')
20
- require File.join(base, 'ast/sends')
21
- require File.join(base, 'ast/values')
22
- require File.join(base, 'ast/variables')
8
+ require 'melbourne/ast/node'
9
+ require 'melbourne/ast/self'
10
+ require 'melbourne/ast/constants'
11
+ require 'melbourne/ast/control_flow'
12
+ require 'melbourne/ast/definitions'
13
+ require 'melbourne/ast/exceptions'
14
+ require 'melbourne/ast/file'
15
+ require 'melbourne/ast/grapher'
16
+ require 'melbourne/ast/literals'
17
+ require 'melbourne/ast/operators'
18
+ require 'melbourne/ast/sends'
19
+ require 'melbourne/ast/values'
20
+ require 'melbourne/ast/variables'
@@ -16,7 +16,7 @@ module Melbourne
16
16
  #
17
17
  attr_accessor :name
18
18
 
19
- def initialize(line, parent, name) #:nodoc:
19
+ def initialize(line, parent, name)
20
20
  @line = line
21
21
  @parent = parent
22
22
  @name = name
@@ -38,7 +38,7 @@ module Melbourne
38
38
  #
39
39
  attr_accessor :name
40
40
 
41
- def initialize(line, name) #:nodoc:
41
+ def initialize(line, name)
42
42
  @line = line
43
43
  @name = name
44
44
  @parent = TopLevel.new line
@@ -66,7 +66,7 @@ module Melbourne
66
66
  #
67
67
  attr_accessor :name
68
68
 
69
- def initialize(line, name) #:nodoc:
69
+ def initialize(line, name)
70
70
  @line = line
71
71
  @name = name
72
72
  end
@@ -91,7 +91,7 @@ module Melbourne
91
91
  #
92
92
  attr_accessor :name
93
93
 
94
- def initialize(line, name, value) #:nodoc:
94
+ def initialize(line, name, value)
95
95
  @line = line
96
96
  @value = value
97
97
  @parent = nil
@@ -116,7 +116,7 @@ module Melbourne
116
116
  #
117
117
  attr_accessor :name
118
118
 
119
- def initialize(line, name) #:nodoc:
119
+ def initialize(line, name)
120
120
  @line = line
121
121
  @name = name
122
122
  end
@@ -21,7 +21,7 @@ module Melbourne
21
21
  #
22
22
  attr_accessor :else
23
23
 
24
- def initialize(line, whens, else_body) #:nodoc:
24
+ def initialize(line, whens, else_body)
25
25
  @line = line
26
26
  @whens = whens
27
27
  @else = else_body || Nil.new(line)
@@ -44,7 +44,7 @@ module Melbourne
44
44
  #
45
45
  attr_accessor :receiver
46
46
 
47
- def initialize(line, receiver, whens, else_body) #:nodoc:
47
+ def initialize(line, receiver, whens, else_body)
48
48
  @line = line
49
49
  @receiver = receiver
50
50
  @whens = whens
@@ -76,11 +76,11 @@ module Melbourne
76
76
  #
77
77
  attr_accessor :single
78
78
 
79
- # Any splat (<tt>*something</tt>) that is specified as a condition for the +when+ statement or +nil+ of no splat is specified
79
+ # Any splat (+*something+) that is specified as a condition for the +when+ statement or +nil+ of no splat is specified
80
80
  #
81
81
  attr_accessor :splat
82
82
 
83
- def initialize(line, conditions, body) #:nodoc:
83
+ def initialize(line, conditions, body)
84
84
  @line = line
85
85
  @body = body || Nil.new(line)
86
86
  @splat = nil
@@ -110,7 +110,7 @@ module Melbourne
110
110
 
111
111
  end
112
112
 
113
- # A splat (<tt>*something</tt>) inside a condition of a +when+ statement as in:
113
+ # A splat (+*something+) inside a condition of a +when+ statement as in:
114
114
  #
115
115
  # case a
116
116
  # when *c then
@@ -123,7 +123,7 @@ module Melbourne
123
123
  #
124
124
  attr_accessor :condition
125
125
 
126
- def initialize(line, condition) #:nodoc:
126
+ def initialize(line, condition)
127
127
  @line = line
128
128
  @condition = condition
129
129
  end
@@ -136,7 +136,7 @@ module Melbourne
136
136
  #
137
137
  class Flip2 < Node
138
138
 
139
- def initialize(line, start, finish) #:nodoc:
139
+ def initialize(line, start, finish)
140
140
  @line = line
141
141
  @start = start
142
142
  @finish = finish
@@ -150,7 +150,7 @@ module Melbourne
150
150
  #
151
151
  class Flip3 < Node
152
152
 
153
- def initialize(line, start, finish) #:nodoc:
153
+ def initialize(line, start, finish)
154
154
  @line = line
155
155
  @start = start
156
156
  @finish = finish
@@ -176,7 +176,7 @@ module Melbourne
176
176
  #
177
177
  attr_accessor :else
178
178
 
179
- def initialize(line, condition, body, else_body) #:nodoc:
179
+ def initialize(line, condition, body, else_body)
180
180
  @line = line
181
181
  @condition = condition
182
182
  @body = body || Nil.new(line)
@@ -203,7 +203,7 @@ module Melbourne
203
203
  #
204
204
  attr_accessor :check_first
205
205
 
206
- def initialize(line, condition, body, check_first) #:nodoc:
206
+ def initialize(line, condition, body, check_first)
207
207
  @line = line
208
208
  @condition = condition
209
209
  @body = body || Nil.new(line)
@@ -230,7 +230,7 @@ module Melbourne
230
230
  #
231
231
  attr_accessor :pattern
232
232
 
233
- def initialize(line, pattern, flags) #:nodoc:
233
+ def initialize(line, pattern, flags)
234
234
  @line = line
235
235
  @pattern = RegexLiteral.new line, pattern, flags
236
236
  end
@@ -251,7 +251,7 @@ module Melbourne
251
251
  #
252
252
  attr_accessor :value
253
253
 
254
- def initialize(line, pattern, value) #:nodoc:
254
+ def initialize(line, pattern, value)
255
255
  @line = line
256
256
  @pattern = pattern
257
257
  @value = value
@@ -273,7 +273,7 @@ module Melbourne
273
273
  #
274
274
  attr_accessor :value
275
275
 
276
- def initialize(line, pattern, value) #:nodoc:
276
+ def initialize(line, pattern, value)
277
277
  @line = line
278
278
  @pattern = pattern
279
279
  @value = value
@@ -297,7 +297,7 @@ module Melbourne
297
297
  #
298
298
  attr_accessor :value
299
299
 
300
- def initialize(line, expr) #:nodoc:
300
+ def initialize(line, expr)
301
301
  @line = line
302
302
  @value = expr || Nil.new(line)
303
303
  end
@@ -313,7 +313,7 @@ module Melbourne
313
313
  #
314
314
  class Next < Break
315
315
 
316
- def initialize(line, value) #:nodoc:
316
+ def initialize(line, value)
317
317
  @line = line
318
318
  @value = value
319
319
  end
@@ -332,7 +332,7 @@ module Melbourne
332
332
  #
333
333
  class Redo < Break
334
334
 
335
- def initialize(line) #:nodoc:
335
+ def initialize(line)
336
336
  @line = line
337
337
  end
338
338
 
@@ -351,7 +351,7 @@ module Melbourne
351
351
  #
352
352
  class Retry < Break
353
353
 
354
- def initialize(line) #:nodoc:
354
+ def initialize(line)
355
355
  @line = line
356
356
  end
357
357
 
@@ -369,7 +369,7 @@ module Melbourne
369
369
  #
370
370
  attr_accessor :value
371
371
 
372
- def initialize(line, expr) #:nodoc:
372
+ def initialize(line, expr)
373
373
  @line = line
374
374
  @value = expr
375
375
  @splat = nil
@@ -3,7 +3,7 @@ module Melbourne
3
3
  module AST
4
4
 
5
5
  # TODO: document!
6
- class EndData < Node #:nodoc:
6
+ class EndData < Node
7
7
 
8
8
  attr_accessor :data
9
9