forked from KolibriOS/kolibrios
54 lines
1.1 KiB
Python
54 lines
1.1 KiB
Python
print("Starting py2bc")
|
|
if not (str(1.0) == "1"):
|
|
from boot import *
|
|
|
|
import tokenize,parse,encode
|
|
|
|
def _compile(s,fname):
|
|
tokens = tokenize.tokenize(s)
|
|
t = parse.parse(s,tokens)
|
|
r = encode.encode(fname,s,t)
|
|
return r
|
|
|
|
def _import(name):
|
|
if name in MODULES:
|
|
return MODULES[name]
|
|
py = name+".py"
|
|
tpc = name+".tpc"
|
|
if exists(py):
|
|
if not exists(tpc) or mtime(py) > mtime(tpc):
|
|
s = load(py)
|
|
code = _compile(s,py)
|
|
save(tpc,code)
|
|
if not exists(tpc): raise
|
|
code = load(tpc)
|
|
g = {'__name__':name,'__code__':code}
|
|
g['__dict__'] = g
|
|
MODULES[name] = g
|
|
exec(code,g)
|
|
return g
|
|
def _init():
|
|
BUILTINS['compile'] = _compile
|
|
BUILTINS['import'] = _import
|
|
|
|
def import_fname(fname,name):
|
|
g = {}
|
|
g['__name__'] = name
|
|
MODULES[name] = g
|
|
s = load(fname)
|
|
code = _compile(s,fname)
|
|
g['__code__'] = code
|
|
exec(code,g)
|
|
return g
|
|
|
|
def tinypy():
|
|
return import_fname(ARGV[0],'__main__')
|
|
|
|
def main(src,dest):
|
|
s = load(src)
|
|
r = _compile(s,src)
|
|
save(dest,r)
|
|
|
|
if __name__ == '__main__':
|
|
main(ARGV[1],ARGV[2])
|