lib/starlark_compiler/ast.rb in starlark_compiler-0.3.0 vs lib/starlark_compiler/ast.rb in starlark_compiler-0.4.0

- old
+ new

@@ -44,10 +44,12 @@ def self.build(&blk) Builder.new.instance_exec(&blk) end class Node + TYPE = :Expression + %i[- + / * % == < <= >= >].each do |op| define_method(op) { |rhs| BinaryOperator.new(self, rhs, operator: op) } end # TODO: ==, eql?, hash @@ -71,11 +73,11 @@ when FalseClass False.new when Numeric Number.new(obj) else - raise Error, "#{obj.inspect} not convertible to Node" + raise Error, "Ruby stdlib type #{obj.inspect} not convertible to Node" end end end class None < Node @@ -99,13 +101,37 @@ def initialize(str) @str = str end end + class VariableReference < Node + attr_reader :var + def initialize(var) + unless var.is_a?(::String) + raise "Variable Reference must be a string, not #{var.class}" + end + + @var = var + end + end + class Array < Node attr_reader :elements def initialize(elements) @elements = elements.map(&method(:node)) + end + end + + class VariableAssignment < Node + TYPE = :Statement + attr_reader :name, :var + def initialize(name, var) + @name = name + if node(var).class::TYPE != :Expression + raise "Unsupported type on rhs for assignment: #{var.class}" + end + + @var = node(var) end end class FunctionCall < Node attr_reader :name, :args, :kwargs