diff python/ppci/assembler.py @ 346:3bb7dcfe5529

expanded arm target
author Windel Bouwman
date Fri, 07 Mar 2014 17:05:32 +0100
parents b4882ff0ed06
children 19eacf4f7270
line wrap: on
line diff
--- a/python/ppci/assembler.py	Sun Mar 02 17:12:08 2014 +0100
+++ b/python/ppci/assembler.py	Fri Mar 07 17:05:32 2014 +0100
@@ -3,7 +3,6 @@
 import pyyacc
 from . import Token, CompilerError, SourceLocation
 from .target import Target, Label
-from .asmnodes import ALabel, AInstruction, ABinop, AUnop, ASymbol, ANumber
 
 
 def bit_type(value):
@@ -176,11 +175,13 @@
 
 
 class Assembler:
-    def __init__(self, target, stream):
+    def __init__(self, target):
         self.target = target
         assert isinstance(target, Target)
-        self.stream = stream
-        self.parser = Parser(target.asm_keywords, target.assembler_rules, self.stream.emit)
+        self.parser = Parser(target.asm_keywords, target.assembler_rules, self.emit)
+
+    def emit(self, *args):
+        self.stream.emit(*args)
 
     # Top level interface:
     def parse_line(self, line):
@@ -188,7 +189,7 @@
         tokens = Lexer(line, self.target.asm_keywords)
         self.parser.parse(tokens)
 
-    def assemble(self, asmsrc):
+    def assemble(self, asmsrc, stream):
         """ Assemble this source snippet """
         if hasattr(asmsrc, 'read'):
             asmsrc2 = asmsrc.read()
@@ -196,9 +197,8 @@
             asmsrc = asmsrc2
         # TODO: use generic newline??
         # TODO: the bothersome newline ...
+        self.stream = stream
         for line in asmsrc.split('\n'):
             self.parse_line(line)
+        self.stream = None
 
-    def assemble_line(self, line):
-        """ Assemble a single assembly line. """
-        self.parse_line(line)