diff options
-rw-r--r-- | 043space.cc | 24 | ||||
-rw-r--r-- | 044space_surround.cc | 4 | ||||
-rw-r--r-- | 045closure_name.cc | 26 | ||||
-rw-r--r-- | 046global.cc | 6 | ||||
-rw-r--r-- | 047check_type_by_name.cc | 2 | ||||
-rw-r--r-- | 057immutable.cc | 8 | ||||
-rw-r--r-- | 072scheduler.cc | 10 | ||||
-rw-r--r-- | counters.mu | 10 | ||||
-rw-r--r-- | global.mu | 2 |
9 files changed, 49 insertions, 43 deletions
diff --git a/043space.cc b/043space.cc index 4f6d2c35..211d7630 100644 --- a/043space.cc +++ b/043space.cc @@ -2,6 +2,12 @@ //: and all addresses in arguments are implicitly based on the 'default-space' //: (unless they have the /raw property) +//: A space is just an array of any scalar location. +:(before "End Mu Types Initialization") +put(Type_abbreviations, "space", new_type_tree("address:array:location")); +//: Spaces are often called 'scopes' in other languages. +put(Type_abbreviations, "scope", new_type_tree("address:array:location")); + :(scenario set_default_space) # if default-space is 10, and if an array of 5 locals lies from location 12 to 16 (inclusive), # then local 0 is really location 12, local 1 is really location 13, and so on. @@ -9,7 +15,7 @@ def main [ # pretend address:array:location; in practice we'll use new 10:num <- copy 0 # refcount 11:num <- copy 5 # length - default-space:&:@:location <- copy 10/unsafe + default-space:space <- copy 10/unsafe 1:num <- copy 23 ] +mem: storing 23 in location 13 @@ -22,7 +28,7 @@ def main [ 1000:num <- copy 0 # refcount 1001:num <- copy 5 # length # actual start of this recipe - default-space:&:@:location <- copy 1000/unsafe + default-space:space <- copy 1000/unsafe 1:&:num <- copy 2000/unsafe # even local variables always contain raw addresses 8:num/raw <- copy *1:&:num ] @@ -95,8 +101,8 @@ bool is_space(const reagent& r) { :(scenario get_default_space) def main [ - default-space:&:@:location <- copy 10/unsafe - 1:&:@:location/raw <- copy default-space:&:@:location + default-space:space <- copy 10/unsafe + 1:space/raw <- copy default-space:space ] +mem: storing 10 in location 1 @@ -118,7 +124,7 @@ def main [ 1000:num <- copy 0 # refcount 1001:num <- copy 5 # length # actual start of this recipe - default-space:&:@:location <- copy 1000/unsafe + default-space:space <- copy 1000/unsafe 1:&:point <- copy 2000/unsafe 9:num/raw <- get *1:&:point, 1:offset ] @@ -139,7 +145,7 @@ def main [ 1000:num <- copy 0 # refcount 1001:num <- copy 5 # length # actual start of this recipe - default-space:&:@:location <- copy 1000/unsafe + default-space:space <- copy 1000/unsafe 1:&:@:num <- copy 2000/unsafe 9:num/raw <- index *1:&:@:num, 1 ] @@ -168,7 +174,7 @@ if (s == "number-of-locals") return true; :(before "End Rewrite Instruction(curr, recipe result)") // rewrite `new-default-space` to -// `default-space:&:@:location <- new location:type, number-of-locals:literal` +// `default-space:space <- new location:type, number-of-locals:literal` // where N is Name[recipe][""] if (curr.name == "new-default-space") { rewrite_default_space_instruction(curr); @@ -199,7 +205,7 @@ def main [ def foo [ local-scope x:num <- copy 34 - return default-space:&:@:location + return default-space:space ] # both calls to foo should have received the same default-space +mem: storing 1 in location 3 @@ -304,7 +310,7 @@ void rewrite_default_space_instruction(instruction& curr) { curr.ingredients.push_back(reagent("number-of-locals:literal")); if (!curr.products.empty()) raise << "new-default-space can't take any results\n" << end(); - curr.products.push_back(reagent("default-space:&:@:location")); + curr.products.push_back(reagent("default-space:space")); } :(scenario local_scope_frees_up_addresses_inside_containers) diff --git a/044space_surround.cc b/044space_surround.cc index 5506afa9..b25a2c09 100644 --- a/044space_surround.cc +++ b/044space_surround.cc @@ -14,8 +14,8 @@ def main [ 20:num <- copy 0 # refcount 21:num <- copy 5 # length # actual start of this recipe - default-space:&:@:location <- copy 10/unsafe - 0:&:@:location/names:dummy <- copy 20/unsafe # later layers will explain the /names: property + default-space:space <- copy 10/unsafe + 0:space/names:dummy <- copy 20/unsafe # later layers will explain the /names: property 1:num <- copy 32 1:num/space:1 <- copy 33 ] diff --git a/045closure_name.cc b/045closure_name.cc index de44ba57..cf96d7c6 100644 --- a/045closure_name.cc +++ b/045closure_name.cc @@ -5,20 +5,20 @@ :(scenario closure) def main [ - default-space:&:@:location <- new location:type, 30 - 1:&:@:location/names:new-counter <- new-counter - 2:num/raw <- increment-counter 1:&:@:location/names:new-counter - 3:num/raw <- increment-counter 1:&:@:location/names:new-counter + default-space:space <- new location:type, 30 + 1:space/names:new-counter <- new-counter + 2:num/raw <- increment-counter 1:space/names:new-counter + 3:num/raw <- increment-counter 1:space/names:new-counter ] def new-counter [ - default-space:&:@:location <- new location:type, 30 + default-space:space <- new location:type, 30 x:num <- copy 23 y:num <- copy 3 # variable that will be incremented - return default-space:&:@:location + return default-space:space ] def increment-counter [ - default-space:&:@:location <- new location:type, 30 - 0:&:@:location/names:new-counter <- next-ingredient # outer space must be created by 'new-counter' above + default-space:space <- new location:type, 30 + 0:space/names:new-counter <- next-ingredient # outer space must be created by 'new-counter' above y:num/space:1 <- add y:num/space:1, 1 # increment y:num <- copy 234 # dummy return y:num/space:1 @@ -153,16 +153,16 @@ def new-scope [ new-default-space x:&:num <- new number:type *x:&:num <- copy 34 - return default-space:&:@:location + return default-space:space ] def use-scope [ local-scope - outer:&:@:location <- next-ingredient - 0:&:@:location/names:new-scope <- copy outer:&:@:location + outer:space <- next-ingredient + 0:space/names:new-scope <- copy outer:space return *x:&:num/space:1 ] def main [ - 1:&:@:location/raw <- new-scope - 2:num/raw <- use-scope 1:&:@:location/raw + 1:space/raw <- new-scope + 2:num/raw <- use-scope 1:space/raw ] +mem: storing 34 in location 2 diff --git a/046global.cc b/046global.cc index 39cc3a6b..6990844b 100644 --- a/046global.cc +++ b/046global.cc @@ -18,8 +18,8 @@ def main [ 20:num <- copy 0 # refcount 21:num <- copy 5 # length # actual start of this recipe - global-space:&:@:location <- copy 20/unsafe - default-space:&:@:location <- copy 10/unsafe + global-space:space <- copy 20/unsafe + default-space:space <- copy 10/unsafe 1:num <- copy 23 1:num/space:global <- copy 24 ] @@ -63,7 +63,7 @@ if (x.name == "global-space") { :(scenario global_space_with_names) def main [ - global-space:&:@:location <- new location:type, 10 + global-space:space <- new location:type, 10 x:num <- copy 23 1:num/space:global <- copy 24 ] diff --git a/047check_type_by_name.cc b/047check_type_by_name.cc index e4f70eac..b10f657c 100644 --- a/047check_type_by_name.cc +++ b/047check_type_by_name.cc @@ -119,7 +119,7 @@ def foo [ # dummy ] def main [ local-scope - 0:&:@:location/names:foo <- copy 0 # specify surrounding space + 0:space/names:foo <- copy 0 # specify surrounding space x:bool <- copy 1/true x:num/space:1 <- copy 34 x/space:1 <- copy 35 diff --git a/057immutable.cc b/057immutable.cc index 9d9f71d4..06f8f601 100644 --- a/057immutable.cc +++ b/057immutable.cc @@ -309,19 +309,19 @@ def bar [ //: when checking for immutable ingredients, remember to take space into account :(scenario check_space_of_reagents_in_immutability_checks) def main [ - a:&:@:location <- new-closure + a:space <- new-closure b:&:num <- new number:type - run-closure b:&:num, a:&:@:location + run-closure b:&:num, a:space ] def new-closure [ new-default-space x:&:num <- new number:type return default-space ] -def run-closure x:&:num, s:&:@:location [ +def run-closure x:&:num, s:space [ local-scope load-ingredients - 0:&:@:location/names:new-closure <- copy s + 0:space/names:new-closure <- copy s # different space; always mutable *x:&:num/space:1 <- copy 34 ] diff --git a/072scheduler.cc b/072scheduler.cc index c5e6ac95..0496d2b1 100644 --- a/072scheduler.cc +++ b/072scheduler.cc @@ -281,13 +281,13 @@ if (inst.operation == NEXT_INGREDIENT || inst.operation == NEXT_INGREDIENT_WITHO } :(scenario next_ingredient_never_leaks_refcounts) -def create-scope n:&:num -> default-space:&:@:location [ +def create-space n:&:num -> default-space:space [ default-space <- new location:type, 2 load-ingredients ] -def use-scope [ +def use-space [ local-scope - 0:&:@:location/names:create-scope <- next-ingredient + 0:space/names:create-space <- next-ingredient n:&:num/space:1 <- next-ingredient # should decrement refcount *n/space:1 <- copy 34 n2:num <- add *n/space:1, 1 @@ -297,9 +297,9 @@ def main [ local-scope n:&:num <- copy 12000/unsafe # pretend allocation with a known address *n <- copy 23 - scope:&:@:location <- create-scope n + space:space <- create-space n n2:&:num <- copy 13000/unsafe - n3:num <- use-scope scope, n2 + n3:num <- use-space space, n2 ] +run: {n: ("address" "number"), "space": "1"} <- next-ingredient +mem: decrementing refcount of 12000: 2 -> 1 diff --git a/counters.mu b/counters.mu index f45ea095..b7df8cd8 100644 --- a/counters.mu +++ b/counters.mu @@ -1,24 +1,24 @@ # example program: maintain multiple counters with isolated lexical scopes # (spaces) -def new-counter n:num -> default-space:&:@:location [ +def new-counter n:num -> default-space:space [ default-space <- new location:type, 30 load-ingredients ] -def increment-counter outer:&:@:location/names:new-counter, x:num -> n:num/space:1 [ +def increment-counter outer:space/names:new-counter, x:num -> n:num/space:1 [ local-scope load-ingredients - 0:&:@:location/names:new-counter <- copy outer # setup outer space; it *must* come from 'new-counter' + 0:space/names:new-counter <- copy outer # setup outer space; it *must* come from 'new-counter' n/space:1 <- add n/space:1, x ] def main [ local-scope # counter A - a:&:@:location <- new-counter 34 + a:space <- new-counter 34 # counter B - b:&:@:location <- new-counter 23 + b:space <- new-counter 23 # increment both by 2 but in different ways increment-counter a, 1 b-value:num <- increment-counter b, 2 diff --git a/global.mu b/global.mu index b186fb8d..7e0c042f 100644 --- a/global.mu +++ b/global.mu @@ -2,7 +2,7 @@ def main [ # allocate 5 locations for globals - global-space:&:@:location <- new location:type, 5 + global-space:space <- new location:type, 5 # read to globals by using /space:global 1:num/space:global <- copy 3 foo |