about summary refs log tree commit diff stats
path: root/subx
diff options
context:
space:
mode:
Diffstat (limited to 'subx')
-rw-r--r--subx/011run.cc25
1 files changed, 25 insertions, 0 deletions
diff --git a/subx/011run.cc b/subx/011run.cc
index 9248ff84..b11dae90 100644
--- a/subx/011run.cc
+++ b/subx/011run.cc
@@ -153,6 +153,8 @@ void parse(istream& fin, program& out) {
         if (starts_with(segment_title, "0x")) {
           segment s;
           s.start = parse_int(segment_title);
+          sanity_check_program_segment(out, s.start);
+          if (trace_contains_errors()) continue;
           trace(99, "parse") << "new segment from 0x" << HEXWORD << s.start << end();
           out.segments.push_back(s);
         }
@@ -195,6 +197,29 @@ void parse_word(const string& data, word& out) {
   }
 }
 
+void sanity_check_program_segment(const program& p, uint32_t addr) {
+  for (int i = 0;  i < SIZE(p.segments);  ++i) {
+    if (p.segments.at(i).start == addr)
+      raise << "can't have multiple segments starting at address 0x" << std::hex << addr << '\n' << end();
+  }
+}
+
+// helper for tests
+void parse(const string& text_bytes) {
+  program p;
+  istringstream in(text_bytes);
+  parse(in, p);
+}
+
+:(scenarios parse)
+:(scenario detect_duplicate_segments)
+% Hide_errors = true;
+== 0xee
+ab
+== 0xee
+cd
++error: can't have multiple segments starting at address 0xee
+
 //:: transform
 
 :(before "End Types")
hor Ben Morrison <ben@gbmor.dev> 2019-05-27 18:25:30 -0400 committer Ben Morrison <ben@gbmor.dev> 2019-05-27 18:26:58 -0400 modified POST test' href='/gbmor/getwtxt/commit/post_test.go?h=v0.4.10&id=6f9383517d8dbee557d2b52113e20e08207b533e'>6f93835 ^
a6c8162 ^




a6c8162 ^
6f93835 ^
a6c8162 ^












b957093 ^



















1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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