Skip to content

Commit 1370dd6

Browse files
committed
Refactorize TMP_ATTRs
1 parent 53a3ef3 commit 1370dd6

2 files changed

Lines changed: 37 additions & 6 deletions

File tree

src/arch/zx48k/backend/runtime/io.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
class IOLabels:
88
# Screen and attributes
99
CLS = f"{NAMESPACE}CLS"
10+
COPY_ATTR = f"{NAMESPACE}COPY_ATTR"
11+
1012
BOLD = f"{NAMESPACE}BOLD"
1113
BRIGHT = f"{NAMESPACE}BRIGHT"
1214
FLASH = f"{NAMESPACE}FLASH"
@@ -16,6 +18,15 @@ class IOLabels:
1618
OVER = f"{NAMESPACE}OVER"
1719
PAPER = f"{NAMESPACE}PAPER"
1820

21+
BOLD_TMP = f"{NAMESPACE}BOLD_TMP"
22+
BRIGHT_TMP = f"{NAMESPACE}BRIGHT_TMP"
23+
FLASH_TMP = f"{NAMESPACE}FLASH_TMP"
24+
INK_TMP = f"{NAMESPACE}INK_TMP"
25+
INVERSE_TMP = f"{NAMESPACE}INVERSE_TMP"
26+
ITALIC_TMP = f"{NAMESPACE}ITALIC_TMP"
27+
OVER_TMP = f"{NAMESPACE}OVER_TMP"
28+
PAPER_TMP = f"{NAMESPACE}PAPER_TMP"
29+
1930
# Drawing primitives
2031
CIRCLE = f"{NAMESPACE}CIRCLE"
2132
DRAW = f"{NAMESPACE}DRAW"
@@ -45,6 +56,8 @@ class IOLabels:
4556

4657
REQUIRED_MODULES = {
4758
IOLabels.CLS: 'cls.asm',
59+
IOLabels.COPY_ATTR: 'copy_attr.asm',
60+
4861
IOLabels.BOLD: 'bold.asm',
4962
IOLabels.BRIGHT: 'bright.asm',
5063
IOLabels.FLASH: 'flash.asm',
@@ -54,6 +67,15 @@ class IOLabels:
5467
IOLabels.OVER: 'over.asm',
5568
IOLabels.PAPER: 'paper.asm',
5669

70+
IOLabels.BOLD_TMP: 'bold.asm',
71+
IOLabels.BRIGHT_TMP: 'bright.asm',
72+
IOLabels.FLASH_TMP: 'flash.asm',
73+
IOLabels.INK_TMP: 'ink.asm',
74+
IOLabels.INVERSE_TMP: 'inverse.asm',
75+
IOLabels.ITALIC_TMP: 'italic.asm',
76+
IOLabels.OVER_TMP: 'over.asm',
77+
IOLabels.PAPER_TMP: 'paper.asm',
78+
5779
IOLabels.CIRCLE: 'circle.asm',
5880
IOLabels.DRAW: 'draw.asm',
5981
IOLabels.DRAW3: 'draw3.asm',

src/arch/zx48k/translatorvisitor.py

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
from src.symbols.type_ import Type
1616

1717
from . import backend
18+
from .backend.runtime import Labels as RuntimeLabel
19+
1820
from src import symbols
1921

2022
from src.api.errors import InvalidOperatorError
@@ -113,10 +115,18 @@ def visit_BLOCK(self, node):
113115
def visit_ATTR_TMP(self, node):
114116
yield node.children[0]
115117
self.ic_fparam(node.children[0].type_, node.children[0].t)
116-
self.ic_call(node.token, 0) # Procedure call. Discard return
117-
ifile = node.token.lower()
118-
ifile = ifile[:ifile.index('_')]
119-
backend.REQUIRES.add(ifile + '.asm')
118+
119+
label = {
120+
'INK_TMP': RuntimeLabel.INK_TMP,
121+
'PAPER_TMP': RuntimeLabel.PAPER_TMP,
122+
'FLASH_TMP': RuntimeLabel.FLASH_TMP,
123+
'BRIGHT_TMP': RuntimeLabel.BRIGHT_TMP,
124+
'INVERSE_TMP': RuntimeLabel.INVERSE_TMP,
125+
'OVER_TMP': RuntimeLabel.OVER_TMP,
126+
'BOLD_TMP': RuntimeLabel.BOLD_TMP,
127+
'ITALIC_TMP': RuntimeLabel.ITALIC_TMP
128+
}[node.token]
129+
self.runtime_call(label, 0) # Procedure call. Discard return
120130

121131
def runtime_call(self, label: str, num: int):
122132
assert label in RUNTIME_LABELS, f"Unknown label {label}"
@@ -184,8 +194,7 @@ def norm_attr(self):
184194
return
185195

186196
self.HAS_ATTR = False
187-
self.ic_call('COPY_ATTR', 0)
188-
backend.REQUIRES.add('copy_attr.asm')
197+
self.runtime_call(RuntimeLabel.COPY_ATTR, 0)
189198

190199
@staticmethod
191200
def traverse_const(node):

0 commit comments

Comments
 (0)