about summary refs log tree commit diff stats
path: root/022arithmetic.cc
diff options
context:
space:
mode:
Diffstat (limited to '022arithmetic.cc')
-rw-r--r--022arithmetic.cc15
1 files changed, 11 insertions, 4 deletions
diff --git a/022arithmetic.cc b/022arithmetic.cc
index 530541aa..50a54578 100644
--- a/022arithmetic.cc
+++ b/022arithmetic.cc
@@ -95,18 +95,25 @@ case SUBTRACT: {
   }
   break;
 }
+:(code)
+bool is_raw(const reagent& r) {
+  return has_property(r, "raw");
+}
+
 :(before "End Primitive Recipe Implementations")
 case SUBTRACT: {
-  double result = ingredients.at(0).at(0);
+  double result = scalar_ingredient(ingredients, 0);
   for (int i = 1;  i < SIZE(ingredients);  ++i)
-    result -= ingredients.at(i).at(0);
+    result -= scalar_ingredient(ingredients, i);
   products.resize(1);
   products.at(0).push_back(result);
   break;
 }
 :(code)
-bool is_raw(const reagent& r) {
-  return has_property(r, "raw");
+double scalar_ingredient(const vector<vector<double> >& ingredients, int i) {
+  if (is_mu_address(current_instruction().ingredients.at(i)))
+    return ingredients.at(i).at(1);  // skip alloc id
+  return ingredients.at(i).at(0);
 }
 
 :(scenario subtract_literal)