rubyx/lib/ast/basic_expressions.rb

69 lines
1.3 KiB
Ruby
Raw Normal View History

2014-05-05 09:02:02 +02:00
# collection of the simple ones, int and strings and such
2014-05-05 09:02:02 +02:00
module Ast
class IntegerExpression < Expression
attr_reader :value
def initialize val
@value = val
end
def inspect
self.class.name + ".new(" + value.to_s+ ")"
end
2014-05-13 09:49:26 +02:00
def to_s
value.to_s
end
def compile context , into
Vm::IntegerConstant.new value
2014-05-10 09:58:25 +02:00
end
def attributes
[:value]
2014-05-05 09:02:02 +02:00
end
end
class NameExpression < Expression
attr_reader :name
def initialize name
@name = name
end
# compiling a variable resolves it.
# if it wasn't defined, nli is returned
def compile context , into
context.locals[name]
end
def inspect
self.class.name + '.new("' + name + '")'
end
2014-05-13 09:49:26 +02:00
def to_s
name
end
def attributes
[:name]
2014-05-05 09:02:02 +02:00
end
end
class VariableExpression < NameExpression
end
class ModuleName < NameExpression
end
2014-05-05 09:02:02 +02:00
class StringExpression < Expression
attr_reader :string
def initialize str
@string = str
end
def inspect
self.class.name + '.new("' + string + '")'
end
def compile context , into
value = Vm::StringConstant.new(string)
2014-05-06 20:36:28 +02:00
context.program.add_object value
value
end
def attributes
[:string]
2014-05-05 09:02:02 +02:00
end
end
2014-05-05 09:02:02 +02:00
end