From d24a9c7d21702a7eb16a06af6508bf922ca11d6a Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Thu, 31 May 2007 20:45:06 +0000 Subject: [PATCH] Make directives take parameters and use the directive function and not it's name --HG-- extra : convert_revision : fbc93ba592b0cc009696e8d7edead841ec2ea01c --- src/arch/micro_asm.py | 13 ++++++++++--- src/arch/micro_asm_test.py | 6 +++++- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/arch/micro_asm.py b/src/arch/micro_asm.py index 1fb04c185..e36daf862 100644 --- a/src/arch/micro_asm.py +++ b/src/arch/micro_asm.py @@ -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): diff --git a/src/arch/micro_asm_test.py b/src/arch/micro_asm_test.py index 816a74b71..858ac511e 100755 --- a/src/arch/micro_asm_test.py +++ b/src/arch/micro_asm_test.py @@ -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