add field access with tests

This commit is contained in:
Torsten Ruger
2015-09-20 12:50:06 +03:00
parent 8e07a7568f
commit be444bc687
8 changed files with 84 additions and 50 deletions

View File

@ -0,0 +1,8 @@
message.self
-- -- --
s(:expressions,
s(:field_access,
s(:receiver,
s(:name, :message)),
s(:field,
s(:name, :self))))

View File

@ -1,22 +1,33 @@
class Pifi
ofthen(3 , var)
int ofthen(int n , ref m)
44
n = n + m.index
return n
end
end
-- -- --
s(:expressions,
s(:class, :Pifi,
s(:derives, nil),
s(:call,
s(:name, :ofthen),
s(:arguments,
s(:int, 3),
s(:name, :var))),
s(:function, :int,
s(:name, :ofthen),
s(:parameters,
s(:field, :int, :n),
s(:field, :ref, :m)),
s(:expressions,
s(:int, 44)))))
s(:expressions,
s(:class, :Pifi,
s(:derives, nil),
s(:call,
s(:name, :ofthen),
s(:arguments,
s(:int, 3),
s(:name, :var))),
s(:function, :int,
s(:name, :ofthen),
s(:parameters,
s(:field, :int, :n),
s(:field, :ref, :m)),
s(:expressions,
s(:assign,
s(:name, :n),
s(:operator, "+",
s(:name, :n),
s(:field_access,
s(:receiver,
s(:name, :m)),
s(:field,
s(:name, :index))))),
s(:return,
s(:name, :n))))))

View File

@ -1,17 +1,21 @@
int retvar(ref n)
int i = 5
int i = n.layout
return i
end
-- -- --
s(:expressions,
s(:function, :int,
s(:name, :retvar),
s(:parameters,
s(:field, :ref, :n)),
s(:expressions,
s(:name, :int),
s(:assign,
s(:name, :i),
s(:int, 5)),
s(:return,
s(:name, :i)))))
s(:expressions,
s(:function, :int,
s(:name, :retvar),
s(:parameters,
s(:field, :ref, :n)),
s(:expressions,
s(:name, :int),
s(:assign,
s(:name, :i),
s(:field_access,
s(:receiver,
s(:name, :n)),
s(:field,
s(:name, :layout)))),
s(:return,
s(:name, :i)))))

View File

@ -1,22 +1,28 @@
module Opers
int foo(int x)
int abba = 5
int abba = x + self.index
return abba + 5
end
end
-- -- --
s(:expressions,
s(:module, :Opers,
s(:function, :int,
s(:name, :foo),
s(:parameters,
s(:field, :int, :x)),
s(:expressions,
s(:name, :int),
s(:assign,
s(:name, :abba),
s(:int, 5)),
s(:return,
s(:operator, "+",
s(:name, :abba),
s(:int, 5)))))))
s(:expressions,
s(:module, :Opers,
s(:function, :int,
s(:name, :foo),
s(:parameters,
s(:field, :int, :x)),
s(:expressions,
s(:name, :int),
s(:assign,
s(:name, :abba),
s(:operator, "+",
s(:name, :x),
s(:field_access,
s(:receiver,
s(:name, :self)),
s(:field,
s(:name, :index))))),
s(:return,
s(:operator, "+",
s(:name, :abba),
s(:int, 5)))))))