Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import sys
import os
from os import path
from .configuration import SfgConfiguration, config_from_commandline, merge_configurations
from .context import SfgContext
from .composer import SfgComposer
class SourceFileGenerator:
def __init__(self, sfg_config: SfgConfiguration | None = None):
if sfg_config and not isinstance(sfg_config, SfgConfiguration):
raise TypeError("sfg_config is not an SfgConfiguration.")
import __main__
scriptpath = __main__.__file__
scriptname = path.split(scriptpath)[1]
basename = path.splitext(scriptname)[0]
project_config, cmdline_config, script_args = config_from_commandline(sys.argv)
config = merge_configurations(project_config, cmdline_config, sfg_config)
self._context = SfgContext(script_args, config)
from .emitters.cpu.basic_cpu import BasicCpuEmitter
self._emitter = BasicCpuEmitter(basename, config)
def clean_files(self):
for file in self._emitter.output_files:
if path.exists(file):
os.remove(file)
def __enter__(self):
self.clean_files()
return SfgComposer(self._context)
def __exit__(self, exc_type, exc_value, traceback):
if exc_type is None:
self._emitter.write_files(self._context)