コード例 #1
0
ファイル: testoptimize.py プロジェクト: chaosim/dao
def compile_optimize(exp):
  compiler = Compiler()
  exp = il.element(exp).alpha(Environment(), compiler)
  exp = exp.cps(compiler, done())
  env = Environment()
  compiler.lamda_stack = [exp]
  exp.analyse(compiler)
  return exp.optimize(env, compiler)
コード例 #2
0
ファイル: testoptimize.py プロジェクト: hermetique/dao
def compile_optimize(exp):
    compiler = Compiler()
    exp = il.element(exp).alpha(Environment(), compiler)
    exp = exp.cps(compiler, done())
    env = Environment()
    compiler.lamda_stack = [exp]
    exp.analyse(compiler)
    return exp.optimize(env, compiler)
コード例 #3
0
ファイル: testgencode.py プロジェクト: hermetique/dao
def compile(exp):
    compiler = Compiler()
    exp = il.element(exp).cps(compiler, done())
    env = Environment()
    exp = exp.optimize(env, compiler)
    exps, has_statement = exp.pythonize(Environment(), compiler)
    compiler = Compiler()
    return begin(*exps).to_code(compiler)
コード例 #4
0
ファイル: compile.py プロジェクト: hermetique/dao
def compile_to_python(exp, env, done=None):
    '''assemble steps from dao expression to python code'''
    original_exp = exp
    compiler = Compiler()
    if done is None:
        done = il.Done(compiler.new_var(il.ConstLocalVar('v')))
    compiler.exit_block_cont_map = {}
    compiler.continue_block_cont_map = {}
    compiler.protect_cont = done
    if env is None: env = Environment()
    exp = element(exp)
    exp = exp.alpha(env, compiler)
    exp = exp.cps(compiler, done)
    exp.analyse(compiler)
    env = Environment()
    exp = exp.optimize(env, compiler)
    #exp = exp.tail_recursive_convert()
    function = compiler.new_var(il.ConstLocalVar('compiled_dao_function'))
    exp = il.Function(function, (), exp)
    exp = il.begin(*exp.pythonize(env, compiler)[0])
    if isinstance(exp, il.Begin):
        exp = exp.statements[0]
    exp.body = exp.body.replace_return_with_yield()
    compiler = Compiler()
    result = exp.to_code(compiler)
    return prelude + result
コード例 #5
0
ファイル: compile.py プロジェクト: chaosim/dao
def compile_to_python(exp, env, done=None): 
  '''assemble steps from dao expression to python code'''
  original_exp = exp
  compiler = Compiler()
  if done is None:
    done = il.Done(compiler.new_var(il.ConstLocalVar('v')))
  compiler.exit_block_cont_map = {}
  compiler.continue_block_cont_map = {}
  compiler.protect_cont = done
  if env is None: env = Environment()
  exp = element(exp)
  exp = exp.alpha(env, compiler)
  exp = exp.cps(compiler, done)
  exp.analyse(compiler)
  env = Environment()
  exp = exp.optimize(env, compiler)
  #exp = exp.tail_recursive_convert()
  function = compiler.new_var(il.ConstLocalVar('compiled_dao_function'))
  exp = il.Function(function, (), exp)
  exp = il.begin(*exp.pythonize(env, compiler)[0])
  if isinstance(exp, il.Begin):
    exp = exp.statements[0]
  exp.body = exp.body.replace_return_with_yield()
  compiler = Compiler()
  result = exp.to_code(compiler)
  return prelude + result
コード例 #6
0
ファイル: testcpsconvert.py プロジェクト: hermetique/dao
def cps(exp):
    return il.element(exp).cps(Compiler(), done())
コード例 #7
0
ファイル: testoptimize.py プロジェクト: hermetique/dao
def optimize(exp):
    compiler = Compiler()
    env = Environment()
    compiler.lamda_stack = [exp]
    exp.analyse(compiler)
    return exp.optimize(env, compiler)
コード例 #8
0
ファイル: testalphaconvert.py プロジェクト: hermetique/dao
def alpha(exp):
    env = Environment()
    compiler = Compiler()
    return exp.alpha(env, compiler)
コード例 #9
0
ファイル: testoptimize.py プロジェクト: chaosim/dao
def optimize(exp):
  compiler = Compiler()
  env = Environment()
  compiler.lamda_stack = [exp]
  exp.analyse(compiler)
  return exp.optimize(env, compiler)
コード例 #10
0
ファイル: testgencode.py プロジェクト: hermetique/dao
def generate_code(exp):
    exps, has_statement = il.element(exp).pythonize(Environment(), Compiler())
    compiler = Compiler()
    return begin(*exps).to_code(compiler)