class UbyInterpreter
Constants
- INTERNAL_METHODS
- VERSION
Attributes
env[RW]
parser[RW]
Public Class Methods
new()
click to toggle source
Calls superclass method
# File lib/uby_interpreter.rb, line 38 def initialize super self.parser = Ruby19Parser.new self.env = Environment.new end
Public Instance Methods
eval(src)
click to toggle source
# File lib/uby_interpreter.rb, line 45 def eval src process parse src end
parse(src)
click to toggle source
# File lib/uby_interpreter.rb, line 49 def parse src self.parser.process src end
process_array(s)
click to toggle source
# File lib/uby_interpreter.rb, line 150 def process_array s _, *args = s args.map {|arg| arg.last} end
process_block(s)
click to toggle source
# File lib/uby_interpreter.rb, line 108 def process_block s result = nil s.rest.each do |sub| result = process sub end result end
process_call(s)
click to toggle source
# File lib/uby_interpreter.rb, line 81 def process_call s _, recv, msg, *args = s recv = process recv args.map! {|sub| process sub} if recv then recv.send(msg, *args) else if INTERNAL_METHODS.include? "#{msg}" process_internal(msg, args) return end self.env.scope do decls, body = self.env[msg] decls.rest.zip(args).each do |name, val| self.env[name] = val end process_block s(:block, *body) end end end
process_defn(s)
click to toggle source
# File lib/uby_interpreter.rb, line 127 def process_defn s _, name, args, *body = s self.env[name] = [args, body] nil end
process_false(s)
click to toggle source
# File lib/uby_interpreter.rb, line 77 def process_false s false end
process_hash(s)
click to toggle source
# File lib/uby_interpreter.rb, line 156 def process_hash s _, *args = s args.each_slice(2).inject({}) do |hash, pair| (_, key), (_, value) = pair hash[key] = value hash end end
process_if(s)
click to toggle source
# File lib/uby_interpreter.rb, line 57 def process_if s _, c, t, f = s c = process c if c then process t else process f end end
process_internal(msg, *args)
click to toggle source
# File lib/uby_interpreter.rb, line 167 def process_internal(msg, *args) send("process_#{msg}", args.join) end
process_lasgn(s)
click to toggle source
# File lib/uby_interpreter.rb, line 116 def process_lasgn s _, n, v = s self.env[n] = process v end
process_lit(s)
click to toggle source
# File lib/uby_interpreter.rb, line 53 def process_lit s s.last end
process_lvar(s)
click to toggle source
# File lib/uby_interpreter.rb, line 122 def process_lvar s _, n = s self.env[n] end
process_nil(s)
click to toggle source
# File lib/uby_interpreter.rb, line 69 def process_nil s nil end
process_p(s)
click to toggle source
# File lib/uby_interpreter.rb, line 179 def process_p s p s end
process_print(s)
click to toggle source
# File lib/uby_interpreter.rb, line 175 def process_print s print s end
process_puts(s)
click to toggle source
# File lib/uby_interpreter.rb, line 171 def process_puts s puts s end
process_str(s)
click to toggle source
# File lib/uby_interpreter.rb, line 144 def process_str s _, string = s string end
process_true(s)
click to toggle source
# File lib/uby_interpreter.rb, line 73 def process_true s true end
process_while(s)
click to toggle source
# File lib/uby_interpreter.rb, line 135 def process_while s _, cond, *body = s body.pop while process cond process_block s(:block, *body) end end