From 2f02189ddcdeb7d25b0ca9bd5b955b764d41a1a7 Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Sat, 21 May 2016 17:44:53 -0700 Subject: 2996 --- html/045closure_name.cc.html | 42 +++++++++++++++++++++++++++++++----------- 1 file changed, 31 insertions(+), 11 deletions(-) (limited to 'html/045closure_name.cc.html') diff --git a/html/045closure_name.cc.html b/html/045closure_name.cc.html index 4338d824..66b899f0 100644 --- a/html/045closure_name.cc.html +++ b/html/045closure_name.cc.html @@ -91,28 +91,28 @@ Transform.push_back(->right->right || type->right->right->value != get(Type_ordinal, "location") || type->right->right->right) { - raise << "slot 0 should always have type address:array:location, but is " << to_string(inst.products.at(j)) << '\n' << end(); + raise << "slot 0 should always have type address:array:location, but is '" << to_string(inst.products.at(j)) << "'\n" << end(); continue; } string_tree* s = property(inst.products.at(j), "names"); if (!s) { - raise << "slot 0 requires a /names property in recipe " << get(Recipe, r).name << end(); + raise << "slot 0 requires a /names property in recipe '" << get(Recipe, r).name << "'\n" << end(); continue; } - if (s->right) raise << "slot 0 should have a single value in /names, but got " << to_string(inst.products.at(j)) << '\n' << end(); + if (s->right) raise << "slot 0 should have a single value in /names, but got '" << to_string(inst.products.at(j)) << "'\n" << end(); const string& surrounding_recipe_name = s->value; if (surrounding_recipe_name.empty()) { - raise << "slot 0 doesn't initialize its /names property in recipe " << get(Recipe, r).name << end(); + raise << "slot 0 doesn't initialize its /names property in recipe '" << get(Recipe, r).name << "'\n" << end(); continue; } if (contains_key(Surrounding_space, r) && get(Surrounding_space, r) != get(Recipe_ordinal, surrounding_recipe_name)) { - raise << "recipe " << get(Recipe, r).name << " can have only one 'surrounding' recipe but has " << get(Recipe, get(Surrounding_space, r)).name << " and " << surrounding_recipe_name << '\n' << end(); + raise << "recipe '" << get(Recipe, r).name << "' can have only one 'surrounding' recipe but has '" << get(Recipe, get(Surrounding_space, r)).name << "' and '" << surrounding_recipe_name << "'\n" << end(); continue; } trace(9993, "name") << "lexically surrounding space for recipe " << get(Recipe, r).name << " comes from " << surrounding_recipe_name << end(); if (!contains_key(Recipe_ordinal, surrounding_recipe_name)) { - raise << "can't find recipe providing surrounding space for " << get(Recipe, r).name << ": " << surrounding_recipe_name << '\n' << end(); + raise << "can't find recipe providing surrounding space for '" << get(Recipe, r).name << "'; looking for '" << surrounding_recipe_name << "'\n" << end(); continue; } put(Surrounding_space, r, get(Recipe_ordinal, surrounding_recipe_name)); @@ -145,7 +145,7 @@ Transform.push_back(int lookup_name(const reagent& x, const recipe_ordinal r, set<recipe_ordinal>& done, vector<recipe_ordinal>& path) { if (!Name[r].empty()) return Name[r][x.name]; if (contains_key(done, r)) { - raise << "can't compute address of " << to_string(x) << " because " << end(); + raise << "can't compute address of '" << to_string(x) << "' because\n" << end(); for (int i = 1; i < SIZE(path); ++i) { raise << path.at(i-1) << " requires computing names of " << path.at(i) << '\n' << end(); } @@ -162,7 +162,7 @@ Transform.push_back((const recipe_ordinal r, int n) { if (n == 0) return r; if (!contains_key(Surrounding_space, r)) { - raise << "don't know surrounding recipe of " << get(Recipe, r).name << '\n' << end(); + raise << "don't know surrounding recipe of '" << get(Recipe, r).name << "'\n" << end(); return -1; } assert(contains_key(Surrounding_space, r)); @@ -175,7 +175,7 @@ recipe_ordinal lookup_surrounding_recipe(if (has_property(r, "space")) { string_tree* p = property(r, "space"); if (!p || p->right) { - raise << "/space property should have exactly one (non-negative integer) value in " << r.original_string << '\n' << end(); + raise << "/space property should have exactly one (non-negative integer) value in '" << r.original_string << "'\n" << end(); return false; } if (p->value != "0") return true; @@ -189,8 +189,28 @@ def f [ local-scope x:number/space:1 <- copy 34 ] -+error: don't know surrounding recipe of f -+error: f: can't find a place to store x ++error: don't know surrounding recipe of 'f' ++error: f: can't find a place to store 'x' + +//: extra test for try_reclaim_locals() from previous layers +:(scenario local_scope_ignores_nonlocal_spaces) +def new-scope [ + new-default-space + x:address:number <- new number:type + *x:address:number <- copy 34 + return default-space:address:array:location +] +def use-scope [ + local-scope + outer:address:array:location <- next-ingredient + 0:address:array:location/names:new-scope <- copy outer:address:array:location + return *x:address:number/space:1 +] +def main [ + 1:address:array:location/raw <- new-scope + 2:number/raw <- use-scope 1:address:array:location/raw +] ++mem: storing 34 in location 2 -- cgit 1.4.1-2-gfad0