implement assignment normalisation

especially when the value is a send that needs normalising
fixes several broken tests
This commit is contained in:
Torsten Ruger
2018-04-27 21:56:41 +03:00
parent 1685ba5a44
commit d84d208192
6 changed files with 134 additions and 12 deletions

View File

@ -7,9 +7,28 @@ module Vool
end
def normalize()
raise "not named left #{name.class}" unless @name.is_a?(Symbol)
raise "unsupported right #{value}" unless @value.is_a?(Named) or
@value.is_a?(SendStatement) or @value.is_a?(Constant)
raise "not named left #{name.class}" unless name.is_a?(Symbol)
case value
when Named , Constant
return copy
when SendStatement
return normalize_send
else
raise "unsupported right #{value}"
end
end
def copy(value = nil)
value ||= @value
self.class.new(name,value)
end
def normalize_send
statements = value.normalize()
return copy( statements ) if statements.is_a?(SendStatement)
assign = statements.statements.pop
statements << copy(assign)
statements
end
def chain_assign(assign , method)

View File

@ -2,11 +2,6 @@ module Vool
class LocalAssignment < Assignment
def normalize
super
return LocalAssignment.new(@name , @value)
end
def to_mom( method )
if method.arguments_type.variable_index(@name)
type = :arguments