rubinius-melbourne 1.0.0.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,10 @@
1
+ #ifndef MEL_VISITOR_HPP
2
+ #define MEL_VISITOR_HPP
3
+
4
+ namespace MELBOURNE {
5
+ void create_error(rb_parser_state *parser_state, char *msg);
6
+ NODE *parser_node_newnode(rb_parser_state*, enum node_type, VALUE, VALUE, VALUE);
7
+ VALUE process_parse_tree(rb_parser_state*, VALUE, NODE*, QUID*);
8
+ };
9
+
10
+ #endif
@@ -0,0 +1,5 @@
1
+ module Rubinius::ToolSet.current::TS
2
+ class Melbourne
3
+ VERSION = "1.0.0.8"
4
+ end
5
+ end
@@ -0,0 +1,100 @@
1
+ require "rubinius/melbourne/melbourne"
2
+ require "rubinius/melbourne/version"
3
+
4
+ class String
5
+ def to_ast(name="(eval)", line=1)
6
+ Rubinius::ToolSet.get(:runtime)::Melbourne.parse_string self, name, line
7
+ end
8
+
9
+ def to_sexp(name="(eval)", line=1)
10
+ to_ast(name, line).to_sexp
11
+ end
12
+ end
13
+
14
+ class File
15
+ def self.to_ast(name, line=1)
16
+ Rubinius::ToolSet.get(:runtime)::Melbourne.parse_file name, line
17
+ end
18
+
19
+ def self.to_sexp(name, line=1)
20
+ to_ast(name, line).to_sexp
21
+ end
22
+ end
23
+
24
+ module Rubinius::ToolSet.current::TS
25
+ class Melbourne
26
+ attr_accessor :transforms
27
+ attr_accessor :magic_handler
28
+ attr_accessor :references
29
+ attr_reader :pre_exe
30
+
31
+ def self.parse_string(string, name="(eval)", line=1)
32
+ new(name, line).parse_string string
33
+ end
34
+
35
+ def self.parse_file(name, line=1)
36
+ new(name, line).parse_file
37
+ end
38
+
39
+ def initialize(name, line, transforms=[])
40
+ @name = name
41
+ @line = line
42
+ @transforms = transforms
43
+ @magic_handler = nil
44
+ @data_offset = nil
45
+ @pre_exe = []
46
+
47
+ # There can be multiple reported, we need to track them all.
48
+ @syntax_errors = []
49
+ end
50
+
51
+ attr_reader :syntax_errors
52
+
53
+ def add_pre_exe(node)
54
+ @pre_exe << node if node
55
+ end
56
+
57
+ def add_magic_comment(str)
58
+ if @magic_handler
59
+ @magic_handler.add_magic_comment str
60
+ end
61
+ end
62
+
63
+ def process_data(offset)
64
+ @data_offset = offset
65
+ end
66
+
67
+ def syntax_error
68
+ raise @syntax_errors[0] unless @syntax_errors.empty?
69
+ end
70
+
71
+ def parse_string(string)
72
+ syntax_error unless ast = string_to_ast(string, @name, @line)
73
+ ast
74
+ end
75
+
76
+ def parse_file
77
+ unless @name and File.exists? @name
78
+ raise Errno::ENOENT, @name.inspect
79
+ end
80
+
81
+ syntax_error unless ast = file_to_ast(@name, @line)
82
+ ast = AST::EndData.new @data_offset, ast if @data_offset
83
+ ast
84
+ end
85
+
86
+ def process_transforms(line, receiver, name, arguments, privately=false)
87
+ @transforms.each do |transform|
88
+ next unless transform.transform_kind == :call
89
+
90
+ if node = transform.match?(line, receiver, name, arguments, privately)
91
+ unless node.kind_of? AST::Node
92
+ node = transform.new line, receiver, name, arguments, privately
93
+ end
94
+ return node
95
+ end
96
+ end
97
+ nil
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,25 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'rubinius/toolset'
3
+ require './lib/rubinius/melbourne/version'
4
+
5
+ Gem::Specification.new do |gem|
6
+ gem.authors = ["Brian Shirai"]
7
+ gem.email = ["brixen@gmail.com"]
8
+ gem.description = %q{Ruby parser extracted from MRI.}
9
+ gem.summary = %q{Rubinius Ruby Parser.}
10
+ gem.homepage = "https://github.com/rubinius/rubinius-melbourne"
11
+ gem.license = "BSD"
12
+
13
+ gem.files = `git ls-files`.split($\)
14
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
15
+ gem.extensions = ["ext/rubinius/melbourne/extconf.rb"]
16
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
17
+ gem.name = "rubinius-melbourne"
18
+ gem.require_paths = ["lib"]
19
+ gem.version = Rubinius::ToolSet.current::TS::Melbourne::VERSION
20
+
21
+ gem.add_runtime_dependency "rubinius-toolset"
22
+
23
+ gem.add_development_dependency "mspec", "~> 1.5"
24
+ gem.add_development_dependency "rake", "~> 10.0"
25
+ end
metadata ADDED
@@ -0,0 +1,119 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rubinius-melbourne
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0.8
5
+ platform: ruby
6
+ authors:
7
+ - Brian Shirai
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-08-29 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rubinius-toolset
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: mspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '1.5'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '1.5'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '10.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '10.0'
55
+ description: Ruby parser extracted from MRI.
56
+ email:
57
+ - brixen@gmail.com
58
+ executables: []
59
+ extensions:
60
+ - ext/rubinius/melbourne/extconf.rb
61
+ extra_rdoc_files: []
62
+ files:
63
+ - .gitignore
64
+ - Gemfile
65
+ - LICENSE
66
+ - README.md
67
+ - Rakefile
68
+ - ext/rubinius/melbourne/bstring-license.txt
69
+ - ext/rubinius/melbourne/bstrlib.cpp
70
+ - ext/rubinius/melbourne/bstrlib.h
71
+ - ext/rubinius/melbourne/extconf.rb
72
+ - ext/rubinius/melbourne/grammar.cpp
73
+ - ext/rubinius/melbourne/grammar.hpp
74
+ - ext/rubinius/melbourne/grammar.y
75
+ - ext/rubinius/melbourne/lex.c.tab
76
+ - ext/rubinius/melbourne/local_state.hpp
77
+ - ext/rubinius/melbourne/melbourne.cpp
78
+ - ext/rubinius/melbourne/melbourne.hpp
79
+ - ext/rubinius/melbourne/node.hpp
80
+ - ext/rubinius/melbourne/node_types.cpp
81
+ - ext/rubinius/melbourne/node_types.hpp
82
+ - ext/rubinius/melbourne/node_types.rb
83
+ - ext/rubinius/melbourne/parser_state.hpp
84
+ - ext/rubinius/melbourne/quark.cpp
85
+ - ext/rubinius/melbourne/quark.hpp
86
+ - ext/rubinius/melbourne/symbols.cpp
87
+ - ext/rubinius/melbourne/symbols.hpp
88
+ - ext/rubinius/melbourne/var_table.cpp
89
+ - ext/rubinius/melbourne/var_table.hpp
90
+ - ext/rubinius/melbourne/visitor.cpp
91
+ - ext/rubinius/melbourne/visitor.hpp
92
+ - lib/rubinius/melbourne.rb
93
+ - lib/rubinius/melbourne/version.rb
94
+ - rubinius-melbourne.gemspec
95
+ homepage: https://github.com/rubinius/rubinius-melbourne
96
+ licenses:
97
+ - BSD
98
+ metadata: {}
99
+ post_install_message:
100
+ rdoc_options: []
101
+ require_paths:
102
+ - lib
103
+ required_ruby_version: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - '>='
106
+ - !ruby/object:Gem::Version
107
+ version: '0'
108
+ required_rubygems_version: !ruby/object:Gem::Requirement
109
+ requirements:
110
+ - - '>='
111
+ - !ruby/object:Gem::Version
112
+ version: '0'
113
+ requirements: []
114
+ rubyforge_project:
115
+ rubygems_version: 2.0.7
116
+ signing_key:
117
+ specification_version: 4
118
+ summary: Rubinius Ruby Parser.
119
+ test_files: []