diff options
Diffstat (limited to '044space_surround.cc')
-rw-r--r-- | 044space_surround.cc | 77 |
1 files changed, 43 insertions, 34 deletions
diff --git a/044space_surround.cc b/044space_surround.cc index 9957630d..5a4afb5e 100644 --- a/044space_surround.cc +++ b/044space_surround.cc @@ -4,36 +4,41 @@ //: //: (Surrounding spaces are like lexical scopes in other languages.) -:(scenario surrounding_space) -# location 2 in space 1 (remember that locations 0 and 1 are reserved in all -# spaces) refers to the space surrounding the default space, here 20. -def main [ - # prepare default-space address - 10:num/alloc-id, 11:num <- copy 0, 1000 - # prepare default-space payload - 1000:num <- copy 0 # alloc id of payload - 1001:num <- copy 5 # length - # prepare address of chained space - 20:num/alloc-id, 21:num <- copy 0, 2000 - # prepare payload of chained space - 2000:num <- copy 0 # alloc id of payload - 2001:num <- copy 5 # length - # actual start of this recipe - default-space:space <- copy 10:space - #: later layers will explain the /names: property - 0:space/names:dummy <- copy 20:space/raw - 2:num <- copy 94 - 2:num/space:1 <- copy 95 -] -def dummy [ # just for the /names: property above -] -# chain space: 1000 + (alloc id) 1 + (length) 1 -+mem: storing 0 in location 1002 -+mem: storing 2000 in location 1003 -# store to default space: 1000 + (alloc id) 1 + (length) 1 + (index) 2 -+mem: storing 94 in location 1004 -# store to chained space: (contents of location 1003) 2000 + (alloc id) 1 + (length) 1 + (index) 2 -+mem: storing 95 in location 2004 +void test_surrounding_space() { + run( + // location 2 in space 1 (remember that locations 0 and 1 are reserved in all + // spaces) refers to the space surrounding the default space, here 20. + "def main [\n" + // prepare default-space address + " 10:num/alloc-id, 11:num <- copy 0, 1000\n" + // prepare default-space payload + " 1000:num <- copy 0\n" // alloc id of payload + " 1001:num <- copy 5\n" // length + // prepare address of chained space + " 20:num/alloc-id, 21:num <- copy 0, 2000\n" + // prepare payload of chained space + " 2000:num <- copy 0\n" // alloc id of payload + " 2001:num <- copy 5\n" // length + // actual start of this recipe + " default-space:space <- copy 10:space\n" + // later layers will explain the /names: property + " 0:space/names:dummy <- copy 20:space/raw\n" + " 2:num <- copy 94\n" + " 2:num/space:1 <- copy 95\n" + "]\n" + "def dummy [\n" // just for the /names: property above + "]\n" + ); + CHECK_TRACE_CONTENTS( + // chain space: 1000 + (alloc id) 1 + (length) 1 + "mem: storing 0 in location 1002\n" + "mem: storing 2000 in location 1003\n" + // store to default space: 1000 + (alloc id) 1 + (length) 1 + (index) 2 + "mem: storing 94 in location 1004\n" + // store to chained space: (contents of location 1003) 2000 + (alloc id) 1 + (length) 1 + (index) 2 + "mem: storing 95 in location 2004\n" + ); +} //: If you think of a space as a collection of variables with a common //: lifetime, surrounding allows managing shorter lifetimes inside a longer @@ -64,7 +69,11 @@ int space_index(const reagent& x) { return 0; } -:(scenario permit_space_as_variable_name) -def main [ - space:num <- copy 0 -] +:(code) +void test_permit_space_as_variable_name() { + run( + "def main [\n" + " space:num <- copy 0\n" + "]\n" + ); +} |