Start to transform SL into SM
This commit is contained in:
@ -8,5 +8,11 @@ module SlotLanguage
|
||||
raise "No Slot #{left}" unless left.is_a?(SlotMaker)
|
||||
raise "No Slot #{right}" unless right.is_a?(SlotMaker)
|
||||
end
|
||||
|
||||
def to_slot(compiler)
|
||||
left_d = @left.slot_def(compiler)
|
||||
right_d = @right.slot_def(compiler)
|
||||
SlotMachine::SlotLoad.new("source" , left_d , right_d)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -17,7 +17,19 @@ module SlotLanguage
|
||||
end
|
||||
|
||||
def to_slot(compiler)
|
||||
@source.first
|
||||
chain = do_link( @source.first , compiler)
|
||||
rest = @source.dup
|
||||
rest.shift
|
||||
rest.each do |link|
|
||||
chain << do_link(link , compiler)
|
||||
end
|
||||
chain
|
||||
end
|
||||
|
||||
private
|
||||
def do_link(link,compiler)
|
||||
return link if link.is_a?(SlotMachine::Instruction)
|
||||
link.to_slot(compiler)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -24,15 +24,15 @@ module SlotLanguage
|
||||
return goto(name,kids) if(name == :goto)
|
||||
return check(name,receiver, kids) if(name == :==)
|
||||
return assign(receiver, name , kids) if(name.to_s.end_with?("="))
|
||||
SlotMaker.new( name , receiver )
|
||||
SlotMaker.new( name )
|
||||
end
|
||||
def on_lvar(lvar)
|
||||
SlotMaker.new(lvar.children.first , nil)
|
||||
SlotMaker.new(lvar.children.first )
|
||||
end
|
||||
def on_lvasgn( expression)
|
||||
name = expression.children[0]
|
||||
value = process(expression.children[1])
|
||||
LoadMaker.new(SlotMaker.new(name,nil),value)
|
||||
LoadMaker.new(SlotMaker.new(name),value)
|
||||
end
|
||||
alias :on_ivasgn :on_lvasgn
|
||||
|
||||
@ -49,7 +49,7 @@ module SlotLanguage
|
||||
end
|
||||
end
|
||||
def on_ivar expression
|
||||
SlotMaker.new(expression.children.first,nil)
|
||||
SlotMaker.new(expression.children.first)
|
||||
end
|
||||
|
||||
private
|
||||
|
@ -1,22 +1,24 @@
|
||||
module SlotLanguage
|
||||
class SlotMaker
|
||||
attr_reader :name , :leaps
|
||||
attr_reader :leaps
|
||||
|
||||
def initialize(name , more)
|
||||
@name = name
|
||||
if(more.is_a?(Array))
|
||||
@leaps = more
|
||||
def initialize(leaps)
|
||||
case leaps
|
||||
when Array
|
||||
@leaps = leaps
|
||||
when nil
|
||||
raise "No leaps given"
|
||||
else
|
||||
@leaps = [more] if more
|
||||
@leaps = [leaps]
|
||||
end
|
||||
end
|
||||
|
||||
def add_slot_name(name)
|
||||
if(@leaps)
|
||||
@leaps << name
|
||||
else
|
||||
@leaps = [name]
|
||||
end
|
||||
@leaps << name
|
||||
end
|
||||
|
||||
def slot_def(compiler)
|
||||
SlotMachine::SlotDefinition.new(:message , leaps)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
Reference in New Issue
Block a user