From c56ec7b02a96131967a16907bb8b24aa3790ca9e Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Fri, 23 Mar 2012 15:28:47 -0700 Subject: [PATCH] test: Add a version of the "mock-trans" regions test case that uses impls --- src/test/run-pass/regions-mock-trans-impls.rs | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 src/test/run-pass/regions-mock-trans-impls.rs diff --git a/src/test/run-pass/regions-mock-trans-impls.rs b/src/test/run-pass/regions-mock-trans-impls.rs new file mode 100644 index 00000000000..566e1892bcb --- /dev/null +++ b/src/test/run-pass/regions-mock-trans-impls.rs @@ -0,0 +1,46 @@ +import libc, sys, unsafe; + +enum arena = (); + +type bcx = { + fcx: &fcx +}; + +type fcx = { + arena: &arena, + ccx: &ccx +}; + +type ccx = { + x: int +}; + +impl arena for arena { + fn alloc(sz: uint, _align: uint) -> *() unsafe { + ret unsafe::reinterpret_cast(libc::malloc(sz)); + } +} + +fn h(bcx : &bcx) -> &bcx { + ret new(*bcx.fcx.arena) { fcx: fcx }; +} + +fn g(fcx : &fcx) { + let bcx = { fcx: fcx }; + let bcx2 = h(&bcx); + unsafe { + libc::free(unsafe::reinterpret_cast(bcx2)); + } +} + +fn f(ccx : &ccx) { + let a = arena(()); + let fcx = { arena: &a, ccx: ccx }; + ret g(&fcx); +} + +fn main() { + let ccx = { x: 0 }; + f(&ccx); +} +