Skip to content

Commit 5c3eeb8

Browse files
committed
remove no-longer-needed pass dependent code from SymbolTable
SymbolTable used the pass number to handle some special cases in pass 1 of assembling, by returning dummy values. Since the first pass no longer creates actual instructions, the SymbolTable no longer needs to do this and no longer needs to be aware of the pass the assembler is in.
1 parent 219f939 commit 5c3eeb8

File tree

2 files changed

+17
-31
lines changed

2 files changed

+17
-31
lines changed

esp32_ulp/assemble.py

+2-19
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,6 @@ def __init__(self, symbols, bases, globals):
1616
self._symbols = symbols
1717
self._bases = bases
1818
self._globals = globals
19-
self._pass = None
20-
21-
def set_pass(self, _pass):
22-
self._pass = _pass
2319

2420
def set_bases(self, bases):
2521
self._bases = bases
@@ -40,13 +36,7 @@ def has_sym(self, symbol):
4036
return symbol in self._symbols
4137

4238
def get_sym(self, symbol):
43-
try:
44-
entry = self._symbols[symbol]
45-
except KeyError:
46-
if self._pass == 1:
47-
entry = (REL, TEXT, 0) # for a dummy, this is good enough
48-
else:
49-
raise
39+
entry = self._symbols[symbol]
5040
return entry
5141

5242
def dump(self):
@@ -60,13 +50,7 @@ def export(self, incl_non_globals=False):
6050
return sorted(addrs_syms)
6151

6252
def to_abs_addr(self, section, offset):
63-
try:
64-
base = self._bases[section]
65-
except KeyError:
66-
if self._pass == 1:
67-
base = 0 # for a dummy this is good enough
68-
else:
69-
raise
53+
base = self._bases[section]
7054
return base + offset
7155

7256
def resolve_absolute(self, symbol):
@@ -109,7 +93,6 @@ def __init__(self, symbols=None, bases=None, globls=None):
10993

11094
def init(self, a_pass):
11195
self.a_pass = a_pass
112-
self.symbols.set_pass(a_pass)
11396
self.sections = dict(text=[], data=[])
11497
self.offsets = dict(text=0, data=0, bss=0)
11598
self.section = TEXT

tests/assemble.py

+15-12
Original file line numberDiff line numberDiff line change
@@ -199,25 +199,28 @@ def test_symbols():
199199
]:
200200
st.set_sym(*entry)
201201
# PASS 1 ========================================================
202-
st.set_pass(1)
203202
assert st.has_sym('abs_t4')
204203
assert st.get_sym('abs_t4') == (ABS, TEXT, 4)
205204
assert not st.has_sym('notexist')
206-
assert st.get_sym('notexist') == (REL, TEXT, 0) # pass1 -> dummy
205+
try:
206+
st.get_sym('notexist') # pass1 -> raises
207+
except KeyError:
208+
raised = True
209+
else:
210+
raised = False
211+
assert raised
207212
assert st.resolve_absolute('abs_t4') == 4
208-
assert st.resolve_absolute('abs_d4') == 4
209-
assert st.resolve_absolute('rel_t4') == 4
210-
assert st.resolve_absolute('rel_d4') == 4
211-
assert st.resolve_absolute('const') == 123
212-
st.set_from(TEXT, 8)
213-
assert st.resolve_relative('abs_t4') == -4
214-
assert st.resolve_relative('abs_d4') == -4
215-
assert st.resolve_relative('rel_t4') == -4
216-
assert st.resolve_relative('rel_d4') == -4
213+
try:
214+
# relative symbols cannot be resolved, because in pass 1 section bases are not yet defined
215+
st.resolve_absolute('rel_t4')
216+
except KeyError:
217+
raised = True
218+
else:
219+
raised = False
220+
assert raised
217221
assert st.resolve_absolute('const') == 123
218222
# PASS 2 ========================================================
219223
st.set_bases({TEXT: 100, DATA: 200})
220-
st.set_pass(2)
221224
assert st.has_sym('abs_t4')
222225
assert st.get_sym('abs_t4') == (ABS, TEXT, 4)
223226
assert not st.has_sym('notexist')

0 commit comments

Comments
 (0)