You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
38 lines
1.0 KiB
38 lines
1.0 KiB
from engine.ast import Context, ast_node
|
|
|
|
saved_cxt = None
|
|
|
|
def initialize(cxt = None, keep = False):
|
|
global saved_cxt
|
|
if cxt is None or not keep or type(cxt) is not Context:
|
|
if saved_cxt is None or not keep:
|
|
cxt = Context()
|
|
saved_cxt = cxt
|
|
else:
|
|
cxt = saved_cxt
|
|
cxt.new()
|
|
return cxt
|
|
|
|
def generate(ast, cxt):
|
|
for k in ast.keys():
|
|
if k in ast_node.types.keys():
|
|
ast_node.types[k](None, ast, cxt)
|
|
|
|
def exec(stmts, cxt = None, keep = False, parser = None):
|
|
if 'stmts' not in stmts:
|
|
return
|
|
cxt = initialize(cxt, keep)
|
|
cxt.parser = parser
|
|
stmts_stmts = stmts['stmts']
|
|
if type(stmts_stmts) is list:
|
|
for s in stmts_stmts:
|
|
generate(s, cxt)
|
|
else:
|
|
generate(stmts_stmts, cxt)
|
|
for q in cxt.queries:
|
|
if not q.startswith('O'):
|
|
cxt.print(q.strip())
|
|
return cxt
|
|
|
|
__all__ = ["initialize", "generate", "exec", "saved_cxt"]
|