module Vm # collection of the simple ones, int and strings and such module BasicValues # Constant expressions can by definition be evaluated at compile time. # But that does not solve their storage, ie they need to be accessible at runtime from _somewhere_ # So expressions move the data into a Risc. # All expressions return registers # But in the future (in the one that holds great things) we optimize those unneccesay moves away def on_IntegerExpression expression int = expression.value reg = use_reg :Integer , int add_load_constant( expression, int , reg ) return reg end def on_TrueExpression expression reg = use_reg :Boolean add_load_constant( expression, true , reg ) return reg end def on_FalseExpression expression reg = use_reg :Boolean add_load_constant( expression, false , reg ) return reg end def on_NilExpression expression reg = use_reg :NilClass add_load_constant( expression, nil , reg ) return reg end def on_StringExpression expression value = Parfait.new_word expression.value.to_sym reg = use_reg :Word Risc.machine.constants << value add_load_constant( expression, value , reg ) return reg end def on_ClassExpression expression name = expression.value raise "No meta class #{name}" end end end