more random code
This commit is contained in:
53
lib/vm/context.rb
Normal file
53
lib/vm/context.rb
Normal file
@@ -0,0 +1,53 @@
|
||||
require_relative "kernel"
|
||||
|
||||
module Vm
|
||||
class Context
|
||||
def initialize
|
||||
@locals = {}
|
||||
end
|
||||
def get name
|
||||
@locals[name]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# ast classes
|
||||
module Parser
|
||||
Expression.class_eval do
|
||||
def compile builder , context
|
||||
raise "abstract #{self.inspect}"
|
||||
end
|
||||
end
|
||||
|
||||
IntegerExpression.class_eval do
|
||||
end
|
||||
|
||||
NameExpression.class_eval do
|
||||
end
|
||||
|
||||
StringExpression.class_eval do
|
||||
def compile builder , context
|
||||
return string
|
||||
end
|
||||
end
|
||||
|
||||
FuncallExpression.class_eval do
|
||||
def compile builder , context
|
||||
arguments = args.collect{|arg| arg.compile(builder , context) }
|
||||
function = context.get(name)
|
||||
unless function
|
||||
function = Vm::Kernel.send(name)
|
||||
context.add_function( name , function )
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
ConditionalExpression.class_eval do
|
||||
end
|
||||
|
||||
AssignmentExpression.class_eval do
|
||||
end
|
||||
FunctionExpression.class_eval do
|
||||
end
|
||||
end
|
Reference in New Issue
Block a user