Make directives take parameters and use the directive function and not it's name
--HG-- extra : convert_revision : fbc93ba592b0cc009696e8d7edead841ec2ea01c
This commit is contained in:
parent
ace2890f9f
commit
d24a9c7d21
2 changed files with 15 additions and 4 deletions
|
@ -91,6 +91,7 @@ class Statement(object):
|
|||
def __init__(self):
|
||||
self.is_microop = False
|
||||
self.is_directive = False
|
||||
self.params = ""
|
||||
|
||||
class Microop(Statement):
|
||||
def __init__(self):
|
||||
|
@ -98,7 +99,6 @@ class Microop(Statement):
|
|||
self.mnemonic = ""
|
||||
self.labels = []
|
||||
self.is_microop = True
|
||||
self.params = ""
|
||||
|
||||
class Directive(Statement):
|
||||
def __init__(self):
|
||||
|
@ -136,7 +136,7 @@ def handle_statement(parser, container, statement):
|
|||
raise
|
||||
elif statement.is_directive:
|
||||
try:
|
||||
eval('container.%s()' % statement.name)
|
||||
eval('container.directives[statement.name](%s)' % statement.params)
|
||||
except:
|
||||
print_error("Error executing directive.")
|
||||
print container.directives
|
||||
|
@ -415,12 +415,19 @@ def p_label_1(t):
|
|||
label.text = t[2]
|
||||
t[0] = label
|
||||
|
||||
def p_directive(t):
|
||||
def p_directive_0(t):
|
||||
'directive : DOT ID'
|
||||
directive = Directive()
|
||||
directive.name = t[2]
|
||||
t[0] = directive
|
||||
|
||||
def p_directive_1(t):
|
||||
'directive : DOT ID PARAMS'
|
||||
directive = Directive()
|
||||
directive.name = t[2]
|
||||
directive.params = t[3]
|
||||
t[0] = directive
|
||||
|
||||
# Parse error handler. Note that the argument here is the offending
|
||||
# *token*, not a grammar symbol (hence the need to use t.value)
|
||||
def p_error(t):
|
||||
|
|
|
@ -57,12 +57,15 @@ class TestMacroop(Macroop):
|
|||
microops["bah"] = Bah_Tweaked
|
||||
def untweak(self):
|
||||
microops["bah"] = Bah
|
||||
def print_debug(self, message):
|
||||
print message
|
||||
|
||||
def __init__(self, name):
|
||||
super(TestMacroop, self).__init__(name)
|
||||
self.directives = {
|
||||
"tweak": self.tweak,
|
||||
"untweak": self.untweak
|
||||
"untweak": self.untweak,
|
||||
"print": self.print_debug
|
||||
}
|
||||
|
||||
assembler = MicroAssembler(TestMacroop, microops, Rom('main ROM'))
|
||||
|
@ -82,6 +85,7 @@ def macroop squishy {
|
|||
.tweak
|
||||
bah
|
||||
.untweak
|
||||
.print "In the midst"
|
||||
bah
|
||||
dah # single line comment after something
|
||||
.tweak
|
||||
|
|
Loading…
Reference in a new issue