fix array in if_false

This commit is contained in:
Torsten Ruger 2015-09-19 17:11:15 +03:00
parent dab32bc307
commit 8e07a7568f
7 changed files with 99 additions and 94 deletions

View File

@ -40,7 +40,7 @@ module Parser
rule(:if => simple(:if), :conditional => simple(:conditional), rule(:if => simple(:if), :conditional => simple(:conditional),
:if_true => {:expressions => sequence(:if_true) , :else => simple(:else) }, :if_true => {:expressions => sequence(:if_true) , :else => simple(:else) },
:if_false => {:expressions => sequence(:if_false) , :end => simple(:e) }) do :if_false => {:expressions => sequence(:if_false) , :end => simple(:e) }) do
s(:if , s(:condition, conditional), s(:if_true, *if_true), s(:if_false , if_false)) s(:if , s(:condition, conditional), s(:if_true, *if_true), s(:if_false , *if_false))
end end
rule(:if => simple(:if), :conditional => simple(:conditional), rule(:if => simple(:if), :conditional => simple(:conditional),

View File

@ -8,21 +8,22 @@ class Ifi
end end
end end
-- -- -- -- -- --
s(:expressions, s(:expressions,
s(:class, :Ifi, s(:class, :Ifi,
s(:derives, nil), s(:derives, nil),
s(:function, :int, s(:function, :int,
s(:name, :ofthen), s(:name, :ofthen),
s(:parameters, s(:parameters,
s(:field, :int, :n)), s(:field, :int, :n)),
s(:expressions, s(:expressions,
s(:if, s(:if,
s(:condition, s(:condition,
s(:int, 0)), s(:int, 0)),
s(:if_true, s(:if_true,
s(:assign, s(:assign,
s(:name, :isit), s(:name, :isit),
s(:int, 42))), s(:int, 42))),
s(:if_false, [s(:assign, s(:if_false,
s(:name, :maybenot), s(:assign,
s(:int, 667))])))))) s(:name, :maybenot),
s(:int, 667))))))))

View File

@ -4,10 +4,11 @@ else
667 667
end end
-- -- -- -- -- --
s(:expressions, s(:expressions,
s(:if, s(:if,
s(:condition, s(:condition,
s(:int, 0)), s(:int, 0)),
s(:if_true, s(:if_true,
s(:int, 42)), s(:int, 42)),
s(:if_false, [s(:int, 667)]))) s(:if_false,
s(:int, 667))))

View File

@ -4,22 +4,22 @@ else
var.new(33) var.new(33)
end end
-- -- -- -- -- --
s(:expressions, s(:expressions,
s(:if, s(:if,
s(:condition, s(:condition,
s(:operator, ">", s(:operator, ">",
s(:int, 3), s(:int, 3),
s(:name, :var))), s(:name, :var))),
s(:if_true, s(:if_true,
s(:call, s(:call,
s(:name, :initialize), s(:name, :initialize),
s(:arguments, s(:arguments,
s(:int, 3)), s(:int, 3)),
s(:receiver, s(:receiver,
s(:module, "Object")))), s(:module, "Object")))),
s(:if_false, [s(:call, s(:if_false, s(:call,
s(:name, :new), s(:name, :new),
s(:arguments, s(:arguments,
s(:int, 33)), s(:int, 33)),
s(:receiver, s(:receiver,
s(:name, :var)))]))) s(:name, :var))))))

View File

@ -6,19 +6,20 @@ ref ofthen(int n)
end end
end end
-- -- -- -- -- --
s(:expressions, s(:expressions,
s(:function, :ref, s(:function, :ref,
s(:name, :ofthen), s(:name, :ofthen),
s(:parameters, s(:parameters,
s(:field, :int, :n)), s(:field, :int, :n)),
s(:expressions, s(:expressions,
s(:if, s(:if,
s(:condition, s(:condition,
s(:int, 0)), s(:int, 0)),
s(:if_true, s(:if_true,
s(:assign, s(:assign,
s(:name, :isit), s(:name, :isit),
s(:int, 42))), s(:int, 42))),
s(:if_false, [s(:assign, s(:if_false,
s(:name, :maybenot), s(:assign,
s(:int, 667))]))))) s(:name, :maybenot),
s(:int, 667)))))))

View File

@ -6,19 +6,20 @@ int retvar(int n)
end end
end end
-- -- -- -- -- --
s(:expressions, s(:expressions,
s(:function, :int, s(:function, :int,
s(:name, :retvar), s(:name, :retvar),
s(:parameters, s(:parameters,
s(:field, :int, :n)), s(:field, :int, :n)),
s(:expressions, s(:expressions,
s(:if, s(:if,
s(:condition, s(:condition,
s(:operator, ">", s(:operator, ">",
s(:name, :n), s(:name, :n),
s(:int, 5))), s(:int, 5))),
s(:if_true, s(:if_true,
s(:return, s(:return,
s(:int, 10))), s(:int, 10))),
s(:if_false, [s(:return, s(:if_false,
s(:int, 20))]))))) s(:return,
s(:int, 20)))))))

View File

@ -8,20 +8,21 @@ module Foo
end end
end end
-- -- -- -- -- --
s(:expressions, s(:expressions,
s(:module, :Foo, s(:module, :Foo,
s(:function, :ref, s(:function, :ref,
s(:name, :ofthen), s(:name, :ofthen),
s(:parameters, s(:parameters,
s(:field, :int, :n)), s(:field, :int, :n)),
s(:expressions, s(:expressions,
s(:if, s(:if,
s(:condition, s(:condition,
s(:int, 0)), s(:int, 0)),
s(:if_true, s(:if_true,
s(:assign, s(:assign,
s(:name, :isit), s(:name, :isit),
s(:int, 42))), s(:int, 42))),
s(:if_false, [s(:assign, s(:if_false,
s(:name, :maybenot), s(:assign,
s(:int, 667))])))))) s(:name, :maybenot),
s(:int, 667))))))))