Ejemplo n.º 1
0
def run(args):
    env = primitive.extended_environment()
    _, filename = args
    try:
        program = primitive.parse_file(filename)
        primitive.kernel_eval(program, env, kt.root_cont)
    except kt.KernelExit:
        pass
    return 0
Ejemplo n.º 2
0
def guarded_ad_hoc_cont(cont):
    from parse import parse
    import primitive
    import kernel_type as kt
    s = primitive.standard_value
    env = primitive.standard_environment()
    env.set(kt.get_interned('cont'), primitive.AdHocCont(cont))
    return primitive.kernel_eval(
        kt.Pair(primitive.standard_value("$sequence"),
                parse("""(guard-continuation
                           ()
                           cont
                           (list (list error-continuation
                                       ($lambda (val divert)
                                         (println val)
                                         (apply divert #inert)))))""")),
        env)
Ejemplo n.º 3
0
def debug_interaction(env, cont):
    import kernel_type as kt
    import parse
    import primitive
    try:
        while True:
            os.write(1, "> ")
            cmd = readline()
            if cmd == "":
                if _state.latest_command is not None:
                    cmd = _state.latest_command
                else:
                    continue
            _state.latest_command = cmd
            if cmd.startswith(",c"):
                expr_src = cmd[2:].strip()
                if expr_src:
                    dbgexprs = parse.parse(expr_src)
                    assert isinstance(dbgexprs, kt.Pair)
                    assert kt.is_nil(kt.cdr(dbgexprs))
                    expr = kt.car(dbgexprs)
                    return expr, env, cont
                else:
                    stop_stepping()
                    break
            elif cmd == ",s":
                start_stepping()
                break
            elif cmd == ",n":
                _state.step_hook = ResumeContHook(cont)
                break
            elif cmd == ",r":
                prev = cont.prev
                while prev is not None and prev.source_pos is None:
                    prev = prev.prev
                if prev is None:
                    stop_stepping()
                else:
                    _state.step_hook = ResumeContHook(prev)
                break
            elif cmd == ",e":
                print_bindings(env, recursive=False)
            elif cmd == ",E":
                print_bindings(env, recursive=True)
            elif cmd == ",q":
                raise kt.KernelExit
            else:
                dbgexprs = parse.parse(cmd)
                assert isinstance(dbgexprs, kt.Pair)
                assert kt.is_nil(kt.cdr(dbgexprs))
                expr = kt.car(dbgexprs)
                old = _state.step_hook
                _state.step_hook = None
                try:
                    dbgval = primitive.kernel_eval(expr,
                                                   env,
                                                   guarded_ad_hoc_cont(cont))
                    print dbgval.tostring()
                finally:
                    _state.step_hook = old
    except EOFError:
        stop_stepping()
    return None, None, None