about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2015-02-21 21:53:41 -0800
committerKartik K. Agaram <vc@akkartik.com>2015-02-21 21:53:41 -0800
commitfe67d47aa4598497e295510cf27f702a3e118632 (patch)
treeda8d72108543168dc6c0ceee252fa82158639582
parent35e535712d43031d97a5da5fcbc38fb946c0b9dd (diff)
downloadmu-fe67d47aa4598497e295510cf27f702a3e118632.tar.gz
810
-rw-r--r--cpp/010vm3
-rw-r--r--cpp/012run6
-rw-r--r--cpp/018address4
3 files changed, 7 insertions, 6 deletions
diff --git a/cpp/010vm b/cpp/010vm
index cf064581..2f2268ba 100644
--- a/cpp/010vm
+++ b/cpp/010vm
@@ -99,7 +99,8 @@ struct type_info {
   bool is_record;
   bool is_array;
   vector<type_number> target;  // only if is_address
-  vector<vector<type_number> > elements;  // only if is_record or is_array
+  vector<vector<type_number> > elements;  // only if is_record
+  vector<type_number> element;  // only if is_array
   type_info() :size(0), is_address(false), is_record(false), is_array(false) {}
 };
 
diff --git a/cpp/012run b/cpp/012run
index 63ffdff1..946b01d1 100644
--- a/cpp/012run
+++ b/cpp/012run
@@ -59,7 +59,7 @@ vector<int> read_memory(reagent x) {
 
 void write_memory(reagent x, vector<int> data) {
   int base = to_int(x.name);
-  size_t size = size_of(x.types[0]);
+  size_t size = size_of(x);
   if (size != data.size()) raise << "size mismatch in storing to " << x.to_string();
   for (size_t offset = 0; offset < size; ++offset) {
     trace("mem") << "storing in location " << base+offset;
@@ -75,8 +75,8 @@ int to_int(string n) {
   return result;
 }
 
-int size_of(type_number x) {
-  type_info t = Type[x];
+int size_of(reagent r) {
+  type_info t = Type[r.types[0]];
   if (!t.is_record && !t.is_array) return t.size;
   return t.size;  // TODO
 }
diff --git a/cpp/018address b/cpp/018address
index bb173f94..32214761 100644
--- a/cpp/018address
+++ b/cpp/018address
@@ -20,7 +20,7 @@ vector<int> read_memory(reagent x) {
   }
   x = canonize(x);
   int base = to_int(x.name);
-  size_t size = size_of(x.types[0]);
+  size_t size = size_of(x);
   for (size_t offset = 0; offset < size; ++offset) {
     int val = Memory[base+offset];
     trace("mem") << "location " << base+offset << " is " << val;
@@ -43,7 +43,7 @@ recipe main [
 void write_memory(reagent x, vector<int> data) {
   x = canonize(x);
   int base = to_int(x.name);
-  size_t size = size_of(x.types[0]);
+  size_t size = size_of(x);
   if (size != data.size()) raise << "size mismatch in storing to " << x.to_string();
   for (size_t offset = 0; offset < size; ++offset) {
     trace("mem") << "storing in location " << base+offset;