Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions arch/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
# -*- coding: utf-8 -*-
# vim:ts=4:et:sw=4:

import importlib

from . import zx48k


Expand All @@ -10,3 +12,13 @@
]

AVAILABLE_ARCHITECTURES = __all__
target = None


def set_target_arch(target_arch: str):
global target
assert target_arch in AVAILABLE_ARCHITECTURES
target = importlib.import_module(f'.{target_arch}', 'arch')


set_target_arch(AVAILABLE_ARCHITECTURES[0])
22 changes: 11 additions & 11 deletions libzxbc/zxb.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,18 +19,16 @@
from . import zxbparser, zxblex
from libzxbpp import zxbpp
from libzxbasm import asmparse
import arch.zx48k.backend as backend

from api import global_ as gl
from api.config import OPTIONS
from api import debug
from arch.zx48k.optimizer import optimize

import arch


def get_inits(memory):
backend.INITS.union(zxbparser.INITS)
arch.target.backend.INITS.union(zxbparser.INITS)

reinit = re.compile(r'^#[ \t]*init[ \t]+([_a-zA-Z][_a-zA-Z0-9]*)[ \t]*$',
re.IGNORECASE)
Expand All @@ -39,7 +37,7 @@ def get_inits(memory):
for m in memory:
init = reinit.match(m)
if init is not None:
backend.INITS.add(init.groups()[0])
arch.target.backend.INITS.add(init.groups()[0])
memory[i] = ''
i += 1

Expand Down Expand Up @@ -78,8 +76,8 @@ def main(args=None, emitter=None):
api.config.init()
zxbpp.init()
zxbparser.init()
arch.zx48k.backend.init()
arch.zx48k.Translator.reset()
arch.target.backend.init()
arch.target.Translator.reset()
asmparse.init()

# ------------------------------------------------------------
Expand Down Expand Up @@ -184,6 +182,8 @@ def main(args=None, emitter=None):
parser.error(f"Invalid architecture '{options.arch}'")
return 2
OPTIONS.architecture.value = options.arch
arch.set_target_arch(options.arch)
backend = arch.target.backend

OPTIONS.org.value = api.utils.parse_int(options.org)
if OPTIONS.org.value is None:
Expand Down Expand Up @@ -285,14 +285,14 @@ def main(args=None, emitter=None):
optimizer.visit(zxbparser.ast)

# Emits intermediate code
translator = arch.zx48k.Translator()
translator = arch.target.Translator()
translator.visit(zxbparser.ast)

if gl.DATA_IS_USED:
gl.FUNCTIONS.extend(gl.DATA_FUNCTIONS)

# This will fill MEMORY with pending functions
func_visitor = arch.zx48k.FunctionTranslator(gl.FUNCTIONS)
func_visitor = arch.target.FunctionTranslator(gl.FUNCTIONS)
func_visitor.start()

# Emits data lines
Expand All @@ -309,7 +309,7 @@ def main(args=None, emitter=None):

backend.MEMORY[:] = [] # Empties memory
# This will fill MEMORY with global declared variables
translator = arch.zx48k.VarTranslator()
translator = arch.target.VarTranslator()
translator.visit(zxbparser.data_ast)

for quad in translator.dumpMemory(backend.MEMORY):
Expand All @@ -318,7 +318,7 @@ def main(args=None, emitter=None):

# Join all lines into a single string and ensures an INTRO at end of file
asm_output = backend.emit(backend.MEMORY, optimize=OPTIONS.optimization.value > 0)
asm_output = optimize(asm_output) + '\n' # invoke the -O3
asm_output = arch.target.optimizer.optimize(asm_output) + '\n' # invoke the -O3

asm_output = asm_output.split('\n')
for i in range(len(asm_output)):
Expand All @@ -341,7 +341,7 @@ def main(args=None, emitter=None):
# This will fill MEMORY with global declared variables
var_checker = api.optimize.VariableVisitor()
var_checker.visit(zxbparser.data_ast)
translator = arch.zx48k.VarTranslator()
translator = arch.target.VarTranslator()
translator.visit(zxbparser.data_ast)
if gl.has_errors:
debug.__DEBUG__("exiting due to errors.")
Expand Down
4 changes: 2 additions & 2 deletions libzxbc/zxbparser.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@
import ply.yacc as yacc
from . import zxblex
from libzxbpp import zxbpp
from arch.zx48k.backend import REQUIRES
import arch
from .zxblex import tokens # analysis:ignore -- Needed for PLY. Do not remove. # noqa

# ----------------------------------------------------------------------
Expand Down Expand Up @@ -3168,7 +3168,7 @@ def p_preproc_line_init(p):
def p_preproc_line_require(p):
""" preproc_line : _REQUIRE STRING
"""
REQUIRES.add(p[2])
arch.target.backend.REQUIRES.add(p[2])


def p_preproc_line_option(p):
Expand Down
6 changes: 0 additions & 6 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -44,12 +44,6 @@ packages = [
{ include = "libzxbpp" },
]

include = [
'library/**/*',
'library-asm/**/*'
]


[tool.poetry.scripts]
zxb = 'libzxbc.zxb:main'
zxbc = 'libzxbc.zxb:main'
Expand Down
1 change: 1 addition & 0 deletions tests/functional/test_cmdline.txt
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ usage: zxbc.py [-h] [-d] [-O OPTIMIZE] [-o OUTPUT_FILE] [-T] [-t] [-B] [-a]
[-i] [-I INCLUDE_PATH] [--strict] [--headerless] [--version]
[--parse-only] [--append-binary APPEND_BINARY]
[--append-headless-binary APPEND_HEADLESS_BINARY] [-N]
[--arch ARCH]
PROGRAM
zxbc.py: error: Option --asm and --mmap cannot be used together

Expand Down