From 1092bbfff0cf932ef14e5b92cd54133571ca4727 Mon Sep 17 00:00:00 2001 From: Lindsey Kuper Date: Thu, 7 Apr 2011 13:49:27 -0700 Subject: Support for self-calls that take arguments. Nicer parsing of self-calls (expr_self_method nodes inside expr_call nodes, rather than a separate expr_call_self) makes typechecking tractable. We can now write self-calls that take arguments and return values (see: test/run-pass/obj-self-*.rs). --- src/test/run-pass/obj-self-2.rs | 19 +++++++++++++++++++ src/test/run-pass/obj-self-3.rs | 31 +++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 src/test/run-pass/obj-self-2.rs create mode 100644 src/test/run-pass/obj-self-3.rs (limited to 'src/test') diff --git a/src/test/run-pass/obj-self-2.rs b/src/test/run-pass/obj-self-2.rs new file mode 100644 index 00000000..68e9ec55 --- /dev/null +++ b/src/test/run-pass/obj-self-2.rs @@ -0,0 +1,19 @@ +// xfail-boot +fn main() { + + obj foo() { + impure fn m1(mutable int i) { + i += 1; + log "hi!"; + } + impure fn m2(mutable int i) { + i += 1; + self.m1(i); + } + } + + auto a = foo(); + let int i = 0; + a.m1(i); + a.m2(i); +} diff --git a/src/test/run-pass/obj-self-3.rs b/src/test/run-pass/obj-self-3.rs new file mode 100644 index 00000000..183bb3c7 --- /dev/null +++ b/src/test/run-pass/obj-self-3.rs @@ -0,0 +1,31 @@ +// xfail-boot +fn main() { + + obj foo() { + impure fn m1(mutable int i) -> int { + i += 1; + ret i; + } + impure fn m2(mutable int i) -> int { + ret self.m1(i); + } + impure fn m3(mutable int i) -> int { + i += 1; + ret self.m1(i); + } + } + + auto a = foo(); + let int i = 0; + + // output should be: 0, 1, 2, 4 + log i; + i = a.m1(i); + log i; + i = a.m2(i); + log i; + i = a.m3(i); + log i; +} + + -- cgit v1.2.3