From 9cc16d04958753a62474d13bd823f13a33a6a0a3 Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Wed, 18 Mar 2015 22:09:31 -0700 Subject: 956 Cleaner way to signal that a reagent's value has been computed. --- cpp/010vm | 5 +++-- cpp/012transform | 2 +- cpp/024brace | 13 +++++++------ 3 files changed, 11 insertions(+), 9 deletions(-) (limited to 'cpp') diff --git a/cpp/010vm b/cpp/010vm index 8bb1604b..d8394fdb 100644 --- a/cpp/010vm +++ b/cpp/010vm @@ -41,6 +41,7 @@ struct reagent { vector > > properties; string name; int value; + bool initialized; vector types; reagent(string s); reagent(type_number t); @@ -139,7 +140,7 @@ void setup_recipes() { void instruction::clear() { is_label=false; label.clear(); operation=IDLE; ingredients.clear(); products.clear(); } // Reagents have the form :::...///... - reagent::reagent(string s) :value(0) { + reagent::reagent(string s) :value(0), initialized(false) { istringstream in(s); // properties while (!in.eof()) { @@ -156,7 +157,7 @@ void setup_recipes() { types.push_back(Type_number[properties[0].second[i]]); } } - reagent::reagent(type_number t) :value(0) { + reagent::reagent(type_number t) :value(0), initialized(false) { types.push_back(t); } string reagent::to_string() { diff --git a/cpp/012transform b/cpp/012transform index 7a591a87..21bcf60f 100644 --- a/cpp/012transform +++ b/cpp/012transform @@ -46,7 +46,7 @@ void parse_int_reagents() { } void populate_value(reagent& r) { - if (r.name.empty()) return; + if (r.initialized) return; char* end = NULL; int result = strtol(r.name.c_str(), &end, /*any base*/0); if (*end != '\0') return; diff --git a/cpp/024brace b/cpp/024brace index d97f228f..aa8c7a4c 100644 --- a/cpp/024brace +++ b/cpp/024brace @@ -67,7 +67,7 @@ void transform_braces(const recipe_number r) { else { reagent ing(0); // literal ing.value = open_braces.top()-index; - ing.name.clear(); + ing.initialized = true; inst.ingredients.push_back(ing); trace("after-brace") << "jump " << ing.value << ":offset"; trace("after-brace") << index << ": " << ing.to_string(); @@ -83,7 +83,7 @@ void transform_braces(const recipe_number r) { else { reagent ing(0); // literal ing.value = matching_brace(open_braces.top(), braces) - index - 1; - ing.name.clear(); + ing.initialized = true; inst.ingredients.push_back(ing); trace("after-brace") << "jump " << ing.value << ":offset"; } @@ -97,7 +97,7 @@ void transform_braces(const recipe_number r) { else { reagent ing(0); // literal ing.value = open_braces.top()-index; - ing.name.clear(); + ing.initialized = true; inst.ingredients.push_back(ing); trace("after-brace") << "jump-if " << inst.ingredients[0].name << ", " << ing.value << ":offset"; } @@ -111,7 +111,7 @@ void transform_braces(const recipe_number r) { else { reagent ing(0); // literal ing.value = matching_brace(open_braces.top(), braces) - index - 1; - ing.name.clear(); + ing.initialized = true; inst.ingredients.push_back(ing); trace("after-brace") << "jump-if " << inst.ingredients[0].name << ", " << ing.value << ":offset"; } @@ -125,7 +125,7 @@ void transform_braces(const recipe_number r) { else { reagent ing(0); // literal ing.value = open_braces.top()-index; - ing.name.clear(); + ing.initialized = true; inst.ingredients.push_back(ing); trace("after-brace") << "jump-unless " << inst.ingredients[0].name << ", " << ing.value << ":offset"; } @@ -139,7 +139,7 @@ void transform_braces(const recipe_number r) { else { reagent ing(0); // literal ing.value = matching_brace(open_braces.top(), braces) - index - 1; - ing.name.clear(); + ing.initialized = true; inst.ingredients.push_back(ing); trace("after-brace") << "jump-unless " << inst.ingredients[0].name << ", " << ing.value << ":offset"; } @@ -359,6 +359,7 @@ recipe factorial [ { 3:boolean <- equal 1:integer 1:literal break-if 3:boolean +# $print 1:integer 2:integer <- multiply 2:integer, 1:integer 1:integer <- subtract 1:integer, 1:literal loop -- cgit 1.4.1-2-gfad0 'n52' href='#n52'>52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131