about summary refs log tree commit diff stats
path: root/subx/035labels.cc
diff options
context:
space:
mode:
authorKartik Agaram <vc@akkartik.com>2018-09-23 11:17:11 -0700
committerKartik Agaram <vc@akkartik.com>2018-09-23 11:17:11 -0700
commitd48cfd0f36e21f6515285157b785a302932ed675 (patch)
treed965b4a82c18f1c8d70c42594d1639ebaf5e6a4f /subx/035labels.cc
parentaa00959024643a33f766ef3f060a934006fe7725 (diff)
downloadmu-d48cfd0f36e21f6515285157b785a302932ed675.tar.gz
4505
Extract a helper from the factorial unit test: check_ints_equal.

Start of a vocabulary for unit tests.

I *could* also start thinking of supporting multi-file programs, but I'm
going to resist the temptation for now. Copy helpers as necessary, and
allow them to mutate and diverge for a while before we pummel them into
a Procrustean "standard library". Extracting a body of shared code immediately
starts to discourage innovation in the shared code.
Diffstat (limited to 'subx/035labels.cc')
-rw-r--r--subx/035labels.cc10
1 files changed, 10 insertions, 0 deletions
diff --git a/subx/035labels.cc b/subx/035labels.cc
index fc2ccd8c..207b09b1 100644
--- a/subx/035labels.cc
+++ b/subx/035labels.cc
@@ -89,6 +89,8 @@ void compute_byte_indices_for_labels(const segment& code, map<string, int32_t>&
           raise << "'" << to_string(inst) << "': label definition (':') not allowed in operand\n" << end();
         if (j > 0)
           raise << "'" << to_string(inst) << "': labels can only be the first word in a line.\n" << end();
+        if (Dump_map)
+          cerr << "0x" << HEXWORD << (code.start + current_byte) << ' ' << label << '\n';
         put(byte_index, label, current_byte);
         trace(99, "transform") << "label '" << label << "' is at address " << (current_byte+code.start) << end();
         // no modifying current_byte; label definitions won't be in the final binary
@@ -97,6 +99,14 @@ void compute_byte_indices_for_labels(const segment& code, map<string, int32_t>&
   }
 }
 
+:(before "End Globals")
+bool Dump_map = false;  // currently used only by 'subx translate'
+:(before "End Commandline Options")
+else if (is_equal(*arg, "--map")) {
+  Dump_map = true;
+}
+
+:(code)
 void drop_labels(segment& code) {
   for (int i = 0;  i < SIZE(code.lines);  ++i) {
     line& inst = code.lines.at(i);