fastruby 0.0.20 → 0.0.21
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +1 -1
- data/lib/fastruby/builder.rb~ +5 -1
- data/lib/fastruby/corelib/fixnum.rb +1 -1
- data/lib/fastruby/corelib/fixnum.rb~ +0 -71
- data/lib/fastruby/corelib.rb~ +1 -1
- data/lib/fastruby/modules/inliner/call.rb~ +3 -1
- data/lib/fastruby/modules/translator/call.rb +1 -1
- data/lib/fastruby/modules/translator/call.rb~ +1 -1
- data/lib/fastruby/object.rb~ +0 -6
- data/lib/fastruby.rb +1 -1
- data/lib/fastruby.rb~ +1 -1
- data/spec/corelib/numeric/fixnum_spec.rb +1 -1
- data/spec/corelib/numeric/fixnum_spec.rb~ +7 -1
- metadata +12 -40
- data/lib/fastruby/builder/inference_updater.rb~ +0 -76
- data/lib/fastruby/builder/inliner.rb~ +0 -60
- data/lib/fastruby/builder/lvar_type.rb~ +0 -44
- data/lib/fastruby/builder/pipeline.rb~ +0 -43
- data/lib/fastruby/builder/reductor.rb~ +0 -42
- data/lib/fastruby/corelib/integer.rb~ +0 -96
- data/lib/fastruby/modules/inliner/defn.rb~ +0 -29
- data/lib/fastruby/modules/inliner/recursive.rb~ +0 -40
- data/lib/fastruby/modules/lvar_type/call.rb~ +0 -36
- data/lib/fastruby/modules/lvar_type/defn.rb~ +0 -42
- data/lib/fastruby/modules/lvar_type/lasgn.rb~ +0 -42
- data/lib/fastruby/modules/lvar_type/recursive.rb~ +0 -33
- data/lib/fastruby/modules/reductor/nontree.rb~ +0 -32
- data/lib/fastruby/modules/reductor/recursive.rb~ +0 -31
- data/lib/fastruby/modules/translator/defn.rb~ +0 -267
- data/lib/fastruby/modules/translator/directive.rb~ +0 -44
- data/lib/fastruby/modules/translator/exceptions.rb~ +0 -120
- data/lib/fastruby/modules/translator/iter.rb~ +0 -745
- data/lib/fastruby/modules/translator/literal.rb~ +0 -150
- data/lib/fastruby/modules/translator/nonlocal.rb~ +0 -298
- data/lib/fastruby/modules/translator/static.rb~ +0 -291
- data/lib/fastruby/modules/translator/variable.rb~ +0 -280
- data/lib/fastruby/set_tree.rb~ +0 -71
- data/lib/fastruby/sexp_extension.rb~ +0 -262
- data/lib/fastruby/translator/scope_mode_helper.rb~ +0 -138
- data/lib/fastruby/translator/translator.rb~ +0 -1600
- data/lib/fastruby/translator/translator_modules.rb~ +0 -53
- data/lib/fastruby_only/base.rb +0 -1
data/Rakefile
CHANGED
data/lib/fastruby/builder.rb~
CHANGED
@@ -159,7 +159,7 @@ module FastRuby
|
|
159
159
|
alt_options = options.dup
|
160
160
|
alt_options.delete(:self)
|
161
161
|
|
162
|
-
require "pry"; binding.pry
|
162
|
+
#require "pry"; binding.pry
|
163
163
|
code_sha1 = FastRuby.cache.hash_snippet(inlined_tree.inspect, FastRuby::VERSION + signature.map(&:to_s).join('-') + alt_options.inspect)
|
164
164
|
|
165
165
|
paths = FastRuby.cache.retrieve(code_sha1)
|
@@ -181,6 +181,10 @@ module FastRuby
|
|
181
181
|
context.locals = FastRuby::GetLocalsProcessor.get_locals(inlined_tree)
|
182
182
|
|
183
183
|
FastRuby.logger.info "Compiling #{@owner}::#{@method_name} for signature #{signature.inspect}"
|
184
|
+
|
185
|
+
if @method_name == :bar
|
186
|
+
print inlined_tree.to_ruby
|
187
|
+
end
|
184
188
|
c_code = context.to_c_method(inlined_tree,signature)
|
185
189
|
|
186
190
|
unless options[:main]
|
@@ -22,7 +22,7 @@ require "fastruby/sexp_extension"
|
|
22
22
|
|
23
23
|
class Fixnum
|
24
24
|
fastruby(:fastruby_only => true, :skip_reduce => true) do
|
25
|
-
if RUBY_VERSION =~ /^1
|
25
|
+
if RUBY_VERSION =~ /^1\.9/
|
26
26
|
def +(b)
|
27
27
|
if b._class == Fixnum
|
28
28
|
_static{LONG2NUM(FIX2LONG(self)+FIX2LONG(b))}
|
@@ -22,77 +22,6 @@ require "fastruby/sexp_extension"
|
|
22
22
|
|
23
23
|
class Fixnum
|
24
24
|
fastruby(:fastruby_only => true, :skip_reduce => true) do
|
25
|
-
def times
|
26
|
-
unless block_given?
|
27
|
-
return _static{rb_enumeratorize(self, _dynamic{:times}, inline_c("0"), inline_c("0") ) }
|
28
|
-
end
|
29
|
-
|
30
|
-
if self._class == Fixnum
|
31
|
-
i = 0
|
32
|
-
while _static{FIX2LONG(i) < FIX2LONG(self)}
|
33
|
-
yield(i)
|
34
|
-
i = _static{LONG2FIX(FIX2LONG(i)+1)}
|
35
|
-
end
|
36
|
-
else
|
37
|
-
i = 0
|
38
|
-
while i < self
|
39
|
-
yield(i)
|
40
|
-
i = i + 1
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
def upto(x)
|
46
|
-
unless block_given?
|
47
|
-
return _static{rb_enumeratorize(self, _dynamic{:upto}, inline_c("1"), c_address_of(x)) }
|
48
|
-
end
|
49
|
-
if self._class == Fixnum
|
50
|
-
if x._class == Fixnum
|
51
|
-
i = self
|
52
|
-
while _static{FIX2LONG(i) <= FIX2LONG(x)}
|
53
|
-
yield(i)
|
54
|
-
i = _static{LONG2FIX(FIX2LONG(i)+1)}
|
55
|
-
end
|
56
|
-
|
57
|
-
return self
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
i = self
|
62
|
-
while i <= x
|
63
|
-
yield(i)
|
64
|
-
i = i + 1
|
65
|
-
end
|
66
|
-
|
67
|
-
self
|
68
|
-
end
|
69
|
-
|
70
|
-
def downto(x)
|
71
|
-
unless block_given?
|
72
|
-
return _static{rb_enumeratorize(self, _dynamic{:downto}, inline_c("1"), c_address_of(x)) }
|
73
|
-
end
|
74
|
-
|
75
|
-
if self._class == Fixnum
|
76
|
-
if x._class == Fixnum
|
77
|
-
i = self
|
78
|
-
while _static{FIX2LONG(i) >= FIX2LONG(x)}
|
79
|
-
yield(i)
|
80
|
-
i = _static{LONG2FIX(FIX2LONG(i)-1)}
|
81
|
-
end
|
82
|
-
|
83
|
-
return self
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
i = self
|
88
|
-
while i >= x
|
89
|
-
yield(i)
|
90
|
-
i = i - 1
|
91
|
-
end
|
92
|
-
|
93
|
-
self
|
94
|
-
end
|
95
|
-
|
96
25
|
if RUBY_VERSION =~ /^1\\.9/
|
97
26
|
def +(b)
|
98
27
|
if b._class == Fixnum
|
data/lib/fastruby/corelib.rb~
CHANGED
@@ -18,6 +18,6 @@ you should have received a copy of the gnu general public license
|
|
18
18
|
along with fastruby. if not, see <http://www.gnu.org/licenses/>.
|
19
19
|
|
20
20
|
=end
|
21
|
-
Dir.glob(FastRuby.fastruby_load_path + "/fastruby/
|
21
|
+
Dir.glob(FastRuby.fastruby_load_path + "/fastruby/corelib/**/*.rb").each do |path|
|
22
22
|
require path
|
23
23
|
end
|
@@ -154,7 +154,7 @@ module FastRuby
|
|
154
154
|
if subtree.node_type == :call
|
155
155
|
if subtree[1] == nil
|
156
156
|
if subtree[2] == :block_given?
|
157
|
-
subtree[0..-1] = fs(:false)
|
157
|
+
subtree[0..-1] = block_tree ? fs(:true) : fs(:false)
|
158
158
|
else
|
159
159
|
subtree[1] = recv_tree.duplicate
|
160
160
|
end
|
@@ -282,6 +282,8 @@ module FastRuby
|
|
282
282
|
recv_tree = tree[1] || fs(:self)
|
283
283
|
method_name = tree[2]
|
284
284
|
args_tree = tree[3]
|
285
|
+
|
286
|
+
p method_name
|
285
287
|
|
286
288
|
if method_name == :lvar_type
|
287
289
|
next tree
|
@@ -79,7 +79,7 @@ module FastRuby
|
|
79
79
|
recvtype = infer_type(recv)
|
80
80
|
|
81
81
|
if args.size > 1
|
82
|
-
if (not recvtype) or args.last[0] == :splat or (not RUBY_VERSION =~ /^1
|
82
|
+
if (not recvtype) or args.last[0] == :splat or (not RUBY_VERSION =~ /^1\.9/)
|
83
83
|
if block_pass_arg
|
84
84
|
call_tree = tree.dup
|
85
85
|
call_tree[3] = args.select{|arg| if arg == :arglist
|
@@ -79,7 +79,7 @@ module FastRuby
|
|
79
79
|
recvtype = infer_type(recv)
|
80
80
|
|
81
81
|
if args.size > 1
|
82
|
-
if (not recvtype) or args.last[0] == :splat or
|
82
|
+
if (not recvtype) or args.last[0] == :splat or (not RUBY_VERSION =~ /^1\\.9/)
|
83
83
|
if block_pass_arg
|
84
84
|
call_tree = tree.dup
|
85
85
|
call_tree[3] = args.select{|arg| if arg == :arglist
|
data/lib/fastruby/object.rb~
CHANGED
@@ -83,12 +83,6 @@ class Object
|
|
83
83
|
m = instance_method(mname)
|
84
84
|
if fastruby_options[:fastruby_only]
|
85
85
|
tree = FastRuby::FastRubySexp.parse m.source
|
86
|
-
|
87
|
-
unless FastRuby.acceptable_tree?(tree)
|
88
|
-
_self.class_eval(m.source)
|
89
|
-
return
|
90
|
-
end
|
91
|
-
|
92
86
|
FastRuby.set_tree(_self, tree[1], tree, fastruby_options)
|
93
87
|
else
|
94
88
|
@_self.fastruby m.source, fastruby_options
|
data/lib/fastruby.rb
CHANGED
data/lib/fastruby.rb~
CHANGED
@@ -80,7 +80,13 @@ describe FastRuby, "fastruby fixnum corelib" do
|
|
80
80
|
end
|
81
81
|
end
|
82
82
|
|
83
|
-
|
83
|
+
|
84
|
+
test_methods = [:-@, :abs, :to_f, :size, :zero?, :odd?, :even?, :succ]
|
85
|
+
if RUBY_VERSION =~ /^1\\.9/
|
86
|
+
test_methods << :magnitude
|
87
|
+
end
|
88
|
+
|
89
|
+
test_methods.each do |op|
|
84
90
|
test_unary_op(31,op)
|
85
91
|
test_unary_op(-31,op)
|
86
92
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fastruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.21
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-04-
|
12
|
+
date: 2012-04-24 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: RubyInline
|
16
|
-
requirement: &
|
16
|
+
requirement: &73515840 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - =
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 3.11.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *73515840
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: ruby_parser
|
27
|
-
requirement: &
|
27
|
+
requirement: &73515590 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 2.0.6
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *73515590
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: define_method_handler
|
38
|
-
requirement: &
|
38
|
+
requirement: &73515350 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 0.0.6
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *73515350
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: method_source
|
49
|
-
requirement: &
|
49
|
+
requirement: &73515110 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 0.6.7
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *73515110
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: ruby2ruby
|
60
|
-
requirement: &
|
60
|
+
requirement: &73514880 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,7 +65,7 @@ dependencies:
|
|
65
65
|
version: 1.3.1
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *73514880
|
69
69
|
description:
|
70
70
|
email: robertodarioseminara@gmail.com
|
71
71
|
executables: []
|
@@ -92,67 +92,45 @@ files:
|
|
92
92
|
- examples/example3.rb
|
93
93
|
- examples/example4.rb
|
94
94
|
- examples/example1.rb
|
95
|
-
- lib/fastruby/sexp_extension.rb~
|
96
95
|
- lib/fastruby/corelib.rb
|
97
96
|
- lib/fastruby/sexp_extension.rb
|
98
97
|
- lib/fastruby/object.rb
|
99
98
|
- lib/fastruby/builder/inliner.rb
|
100
99
|
- lib/fastruby/builder/lvar_type.rb
|
101
100
|
- lib/fastruby/builder/pipeline.rb
|
102
|
-
- lib/fastruby/builder/pipeline.rb~
|
103
|
-
- lib/fastruby/builder/inliner.rb~
|
104
|
-
- lib/fastruby/builder/lvar_type.rb~
|
105
101
|
- lib/fastruby/builder/locals_inference.rb
|
106
102
|
- lib/fastruby/builder/inference_updater.rb
|
107
|
-
- lib/fastruby/builder/inference_updater.rb~
|
108
103
|
- lib/fastruby/builder/inferencer.rb
|
109
|
-
- lib/fastruby/builder/reductor.rb~
|
110
104
|
- lib/fastruby/builder/reductor.rb
|
111
105
|
- lib/fastruby/builder.rb~
|
112
106
|
- lib/fastruby/modules/translator/defn.rb
|
113
|
-
- lib/fastruby/modules/translator/iter.rb~
|
114
|
-
- lib/fastruby/modules/translator/literal.rb~
|
115
|
-
- lib/fastruby/modules/translator/nonlocal.rb~
|
116
107
|
- lib/fastruby/modules/translator/iter.rb
|
117
108
|
- lib/fastruby/modules/translator/directive.rb
|
118
109
|
- lib/fastruby/modules/translator/exceptions.rb
|
119
110
|
- lib/fastruby/modules/translator/static.rb
|
120
|
-
- lib/fastruby/modules/translator/static.rb~
|
121
111
|
- lib/fastruby/modules/translator/method_group.rb
|
122
|
-
- lib/fastruby/modules/translator/exceptions.rb~
|
123
112
|
- lib/fastruby/modules/translator/nonlocal.rb
|
124
|
-
- lib/fastruby/modules/translator/variable.rb~
|
125
113
|
- lib/fastruby/modules/translator/variable.rb
|
126
114
|
- lib/fastruby/modules/translator/call.rb
|
127
|
-
- lib/fastruby/modules/translator/defn.rb~
|
128
115
|
- lib/fastruby/modules/translator/block.rb
|
129
116
|
- lib/fastruby/modules/translator/call.rb~
|
130
117
|
- lib/fastruby/modules/translator/flow.rb
|
131
118
|
- lib/fastruby/modules/translator/logical.rb
|
132
|
-
- lib/fastruby/modules/translator/directive.rb~
|
133
119
|
- lib/fastruby/modules/translator/literal.rb
|
134
120
|
- lib/fastruby/modules/inferencer/infer.rb
|
135
121
|
- lib/fastruby/modules/inferencer/literal.rb
|
136
122
|
- lib/fastruby/modules/lvar_type/recursive.rb
|
137
|
-
- lib/fastruby/modules/lvar_type/recursive.rb~
|
138
123
|
- lib/fastruby/modules/lvar_type/defn.rb
|
139
124
|
- lib/fastruby/modules/lvar_type/lasgn.rb
|
140
|
-
- lib/fastruby/modules/lvar_type/lasgn.rb~
|
141
125
|
- lib/fastruby/modules/lvar_type/call.rb
|
142
|
-
- lib/fastruby/modules/lvar_type/defn.rb~
|
143
|
-
- lib/fastruby/modules/lvar_type/call.rb~
|
144
126
|
- lib/fastruby/modules/inliner/recursive.rb
|
145
|
-
- lib/fastruby/modules/inliner/recursive.rb~
|
146
127
|
- lib/fastruby/modules/inliner/defn.rb
|
147
128
|
- lib/fastruby/modules/inliner/call.rb
|
148
|
-
- lib/fastruby/modules/inliner/defn.rb~
|
149
129
|
- lib/fastruby/modules/inliner/call.rb~
|
150
130
|
- lib/fastruby/modules/reductor/for.rb
|
151
131
|
- lib/fastruby/modules/reductor/recursive.rb
|
152
|
-
- lib/fastruby/modules/reductor/recursive.rb~
|
153
132
|
- lib/fastruby/modules/reductor/nontree.rb
|
154
133
|
- lib/fastruby/modules/reductor/fastruby_flag.rb
|
155
|
-
- lib/fastruby/modules/reductor/nontree.rb~
|
156
134
|
- lib/fastruby/modules/reductor/case.rb
|
157
135
|
- lib/fastruby/builder.rb
|
158
136
|
- lib/fastruby/inline_extension.rb
|
@@ -162,25 +140,19 @@ files:
|
|
162
140
|
- lib/fastruby/exceptions.rb
|
163
141
|
- lib/fastruby/translator/scope_mode_helper.rb
|
164
142
|
- lib/fastruby/translator/translator.rb
|
165
|
-
- lib/fastruby/translator/translator_modules.rb~
|
166
143
|
- lib/fastruby/translator/translator_modules.rb
|
167
|
-
- lib/fastruby/translator/translator.rb~
|
168
|
-
- lib/fastruby/translator/scope_mode_helper.rb~
|
169
144
|
- lib/fastruby/set_tree.rb
|
170
145
|
- lib/fastruby/object.rb~
|
171
146
|
- lib/fastruby/cache/cache.rb
|
172
147
|
- lib/fastruby/modules.rb
|
173
148
|
- lib/fastruby/method_extension.rb
|
174
149
|
- lib/fastruby/custom_require.rb
|
175
|
-
- lib/fastruby/set_tree.rb~
|
176
150
|
- lib/fastruby/getlocals.rb
|
177
151
|
- lib/fastruby/corelib/fixnum.rb~
|
178
152
|
- lib/fastruby/corelib/integer.rb
|
179
|
-
- lib/fastruby/corelib/integer.rb~
|
180
153
|
- lib/fastruby/corelib/fixnum.rb
|
181
154
|
- lib/fastruby/fastruby_sexp.rb
|
182
155
|
- lib/fastruby.rb~
|
183
|
-
- lib/fastruby_only/base.rb
|
184
156
|
- lib/fastruby_load_path.rb
|
185
157
|
- lib/fastruby.rb
|
186
158
|
- spec/edges_helper.rb
|
@@ -1,76 +0,0 @@
|
|
1
|
-
=begin
|
2
|
-
|
3
|
-
This file is part of the fastruby project, http://github.com/tario/fastruby
|
4
|
-
|
5
|
-
Copyright (c) 2011 Roberto Dario Seminara <robertodarioseminara@gmail.com>
|
6
|
-
|
7
|
-
fastruby is free software: you can redistribute it and/or modify
|
8
|
-
it under the terms of the gnu general public license as published by
|
9
|
-
the free software foundation, either version 3 of the license, or
|
10
|
-
(at your option) any later version.
|
11
|
-
|
12
|
-
fastruby is distributed in the hope that it will be useful,
|
13
|
-
but without any warranty; without even the implied warranty of
|
14
|
-
merchantability or fitness for a particular purpose. see the
|
15
|
-
gnu general public license for more details.
|
16
|
-
|
17
|
-
you should have received a copy of the gnu general public license
|
18
|
-
along with fastruby. if not, see <http://www.gnu.org/licenses/>.
|
19
|
-
|
20
|
-
=end
|
21
|
-
module FastRuby
|
22
|
-
class InferenceUpdater
|
23
|
-
class AddInfer
|
24
|
-
attr_accessor :variable_hash
|
25
|
-
|
26
|
-
define_method_handler(:process, :priority => 1) {|tree|
|
27
|
-
tree
|
28
|
-
}.condition{|tree| (tree.node_type == :iter and tree[1][2] == :_static) or (tree.node_type == :call and tree[2] == :infer) }
|
29
|
-
|
30
|
-
define_method_handler(:process, :priority => -1) {|tree|
|
31
|
-
tree.map &method(:process)
|
32
|
-
}.condition{|tree| tree.respond_to?(:node_type) }
|
33
|
-
|
34
|
-
define_method_handler(:process, :priority => 1) {|tree|
|
35
|
-
tree
|
36
|
-
}.condition{|tree| not tree.respond_to?(:node_type) }
|
37
|
-
|
38
|
-
define_method_handler(:process) {|tree|
|
39
|
-
fs(:call, tree, :infer, fs(:arglist, fs(:const, variable_hash[tree[1]].to_s.to_sym)))
|
40
|
-
}.condition{|tree| tree.node_type == :lvar and variable_hash[tree[1]] and variable_hash[tree[1]] != :dynamic}
|
41
|
-
|
42
|
-
end
|
43
|
-
|
44
|
-
def initialize(inferencer)
|
45
|
-
@inferencer = inferencer
|
46
|
-
end
|
47
|
-
|
48
|
-
def call(tree)
|
49
|
-
variable_hash = Hash.new
|
50
|
-
|
51
|
-
# search variable assignments
|
52
|
-
tree.walk_tree do |subtree|
|
53
|
-
if subtree.node_type == :lasgn and subtree[2]
|
54
|
-
types = @inferencer.infer(subtree[2])
|
55
|
-
lname = subtree[1]
|
56
|
-
if types.size == 1
|
57
|
-
if variable_hash[lname]
|
58
|
-
if variable_hash[lname] != types.first
|
59
|
-
variable_hash[lname] = :dynamic
|
60
|
-
end
|
61
|
-
else
|
62
|
-
variable_hash[lname] = types.first
|
63
|
-
end
|
64
|
-
elsif types.size == 0
|
65
|
-
variable_hash[lname] = :dynamic
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
add_infer = AddInfer.new
|
71
|
-
add_infer.variable_hash = variable_hash
|
72
|
-
|
73
|
-
add_infer.process(tree)
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
@@ -1,60 +0,0 @@
|
|
1
|
-
=begin
|
2
|
-
|
3
|
-
This file is part of the fastruby project, http://github.com/tario/fastruby
|
4
|
-
|
5
|
-
Copyright (c) 2011 Roberto Dario Seminara <robertodarioseminara@gmail.com>
|
6
|
-
|
7
|
-
fastruby is free software: you can redistribute it and/or modify
|
8
|
-
it under the terms of the gnu general public license as published by
|
9
|
-
the free software foundation, either version 3 of the license, or
|
10
|
-
(at your option) any later version.
|
11
|
-
|
12
|
-
fastruby is distributed in the hope that it will be useful,
|
13
|
-
but without any warranty; without even the implied warranty of
|
14
|
-
merchantability or fitness for a particular purpose. see the
|
15
|
-
gnu general public license for more details.
|
16
|
-
|
17
|
-
you should have received a copy of the gnu general public license
|
18
|
-
along with fastruby. if not, see <http://www.gnu.org/licenses/>.
|
19
|
-
|
20
|
-
=end
|
21
|
-
require "define_method_handler"
|
22
|
-
require "fastruby/modules"
|
23
|
-
|
24
|
-
module FastRuby
|
25
|
-
class Inliner
|
26
|
-
attr_reader :inlined_methods
|
27
|
-
|
28
|
-
def initialize(inferencer)
|
29
|
-
@inlined_methods = Array.new
|
30
|
-
@inferencer = inferencer
|
31
|
-
end
|
32
|
-
|
33
|
-
define_method_handler(:inline, :priority => -1000) do |tree|
|
34
|
-
FastRubySexp.from_sexp(tree)
|
35
|
-
end
|
36
|
-
|
37
|
-
def call(*args)
|
38
|
-
|
39
|
-
return args.first
|
40
|
-
|
41
|
-
if args.first.find_tree{|tree| tree.node_type == :call && tree[2] != :infer && infer_type(tree[1] || fs(:self))}
|
42
|
-
inline *args
|
43
|
-
else
|
44
|
-
args.first
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
FastRuby::Modules.load_all("inliner")
|
49
|
-
|
50
|
-
def infer_type(recv)
|
51
|
-
array = @inferencer.infer(recv).to_a
|
52
|
-
|
53
|
-
if array.size == 1
|
54
|
-
array[0]
|
55
|
-
else
|
56
|
-
nil
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
@@ -1,44 +0,0 @@
|
|
1
|
-
=begin
|
2
|
-
|
3
|
-
This file is part of the fastruby project, http://github.com/tario/fastruby
|
4
|
-
|
5
|
-
Copyright (c) 2011 Roberto Dario Seminara <robertodarioseminara@gmail.com>
|
6
|
-
|
7
|
-
fastruby is free software: you can redistribute it and/or modify
|
8
|
-
it under the terms of the gnu general public license as published by
|
9
|
-
the free software foundation, either version 3 of the license, or
|
10
|
-
(at your option) any later version.
|
11
|
-
|
12
|
-
fastruby is distributed in the hope that it will be useful,
|
13
|
-
but without any warranty; without even the implied warranty of
|
14
|
-
merchantability or fitness for a particular purpose. see the
|
15
|
-
gnu general public license for more details.
|
16
|
-
|
17
|
-
you should have received a copy of the gnu general public license
|
18
|
-
along with fastruby. if not, see <http://www.gnu.org/licenses/>.
|
19
|
-
|
20
|
-
=end
|
21
|
-
require "set"
|
22
|
-
require "sexp"
|
23
|
-
require "define_method_handler"
|
24
|
-
require "fastruby/modules"
|
25
|
-
|
26
|
-
module FastRuby
|
27
|
-
class LvarType
|
28
|
-
def initialize(inferencer)
|
29
|
-
@infer_lvar_map = Hash.new
|
30
|
-
@inferencer = inferencer
|
31
|
-
end
|
32
|
-
|
33
|
-
def call(*args)
|
34
|
-
p args.first
|
35
|
-
# if args.first.find_tree{|tree| tree.node_type == :call && tree[2] == :lvar_type}
|
36
|
-
# process *args
|
37
|
-
# else
|
38
|
-
args.first
|
39
|
-
# end
|
40
|
-
end
|
41
|
-
|
42
|
-
FastRuby::Modules.load_all("lvar_type")
|
43
|
-
end
|
44
|
-
end
|
@@ -1,43 +0,0 @@
|
|
1
|
-
=begin
|
2
|
-
|
3
|
-
This file is part of the fastruby project, http://github.com/tario/fastruby
|
4
|
-
|
5
|
-
Copyright (c) 2011 Roberto Dario Seminara <robertodarioseminara@gmail.com>
|
6
|
-
|
7
|
-
fastruby is free software: you can redistribute it and/or modify
|
8
|
-
it under the terms of the gnu general public license as published by
|
9
|
-
the free software foundation, either version 3 of the license, or
|
10
|
-
(at your option) any later version.
|
11
|
-
|
12
|
-
fastruby is distributed in the hope that it will be useful,
|
13
|
-
but without any warranty; without even the implied warranty of
|
14
|
-
merchantability or fitness for a particular purpose. see the
|
15
|
-
gnu general public license for more details.
|
16
|
-
|
17
|
-
you should have received a copy of the gnu general public license
|
18
|
-
along with fastruby. if not, see <http://www.gnu.org/licenses/>.
|
19
|
-
|
20
|
-
=end
|
21
|
-
require "define_method_handler"
|
22
|
-
|
23
|
-
module FastRuby
|
24
|
-
class Pipeline
|
25
|
-
def initialize
|
26
|
-
@array = Array.new
|
27
|
-
end
|
28
|
-
|
29
|
-
def << (object)
|
30
|
-
@array << object
|
31
|
-
end
|
32
|
-
|
33
|
-
def call(arg)
|
34
|
-
|
35
|
-
last_result = arg
|
36
|
-
@array.each do |processor|
|
37
|
-
last_result = processor.call(last_result)
|
38
|
-
end
|
39
|
-
|
40
|
-
last_result
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
@@ -1,42 +0,0 @@
|
|
1
|
-
=begin
|
2
|
-
|
3
|
-
This file is part of the fastruby project, http://github.com/tario/fastruby
|
4
|
-
|
5
|
-
Copyright (c) 2011 Roberto Dario Seminara <robertodarioseminara@gmail.com>
|
6
|
-
|
7
|
-
fastruby is free software: you can redistribute it and/or modify
|
8
|
-
it under the terms of the gnu general public license as published by
|
9
|
-
the free software foundation, either version 3 of the license, or
|
10
|
-
(at your option) any later version.
|
11
|
-
|
12
|
-
fastruby is distributed in the hope that it will be useful,
|
13
|
-
but without any warranty; without even the implied warranty of
|
14
|
-
merchantability or fitness for a particular purpose. see the
|
15
|
-
gnu general public license for more details.
|
16
|
-
|
17
|
-
you should have received a copy of the gnu general public license
|
18
|
-
along with fastruby. if not, see <http://www.gnu.org/licenses/>.
|
19
|
-
|
20
|
-
=end
|
21
|
-
require "set"
|
22
|
-
require "sexp"
|
23
|
-
require "define_method_handler"
|
24
|
-
require "fastruby/modules"
|
25
|
-
|
26
|
-
module FastRuby
|
27
|
-
class Reductor
|
28
|
-
def self.reduce_for(ntype, options = {}, &blk)
|
29
|
-
define_method_handler(:reduce, options, &blk).condition{|*x| tree = x.first; tree.respond_to?(:node_type) && tree.node_type == ntype}
|
30
|
-
end
|
31
|
-
|
32
|
-
def call(*args)
|
33
|
-
reduce args.first
|
34
|
-
end
|
35
|
-
|
36
|
-
define_method_handler(:reduce, :priority => -1000) do |*x| tree = x.first;
|
37
|
-
FastRubySexp.from_sexp(tree)
|
38
|
-
end
|
39
|
-
|
40
|
-
FastRuby::Modules.load_all("reductor")
|
41
|
-
end
|
42
|
-
end
|