Mercurial > lcfOS
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)