Exemplo n.º 1
0
def print_(val):
    if isinstance(val, kt.Pair):
        for v in kt.iter_list(val):
            print v.todisplay(),
    else:
        assert kt.is_nil(val)
    return kt.inert
Exemplo n.º 2
0
def list_star(vals):
    assert isinstance(vals, kt.Pair)
    if isinstance(vals.cdr, kt.Pair):
        return kt.Pair(vals.car, list_star(vals.cdr))
    elif kt.is_nil(vals.cdr):
        return vals.car
    else:
        return vals
Exemplo n.º 3
0
 def wrapped(otree, *etc):
     args_tuple = ()
     rest = otree
     for type_ in unroll_argtypes:
         assert isinstance(rest, kt.Pair)
         arg = rest.car
         rest = rest.cdr
         kt.check_type(arg, type_)
         assert isinstance(arg, type_)
         args_tuple += (arg,)
     assert kt.is_nil(rest)
     args_tuple += etc
     return fn(*args_tuple)
Exemplo n.º 4
0
 def pred(vals):
     result = kt.true
     rest = vals
     while isinstance(rest, kt.Pair):
         val = rest.car
         if not isinstance(val, cls):
             result = kt.false
         rest = rest.cdr
     if kt.is_nil(rest):
         return result
     else:
         kt.signal_value_error(("Called predicate '%s' with non-list" % name),
                               kt.Pair(vals, kt.nil))
Exemplo n.º 5
0
def orp(vals):
    rest = vals
    ret = kt.false
    while isinstance(rest, kt.Pair):
        v = rest.car
        kt.check_type(v, kt.Boolean)
        if kt.true.equal(v):
            ret = kt.true
        rest = rest.cdr
    if kt.is_nil(rest):
        return ret
    else:
        kt.signal_value_error("Called 'or?' with non-list",
                              kt.Pair(vals, kt.nil))
Exemplo n.º 6
0
 def wrapped(otree, *etc):
     args_tuple = ()
     rest = otree
     for type_ in unroll_argtypes:
         if isinstance(rest, kt.Pair):
             arg = rest.car
             rest = rest.cdr
             kt.check_type(arg, type_)
             if isinstance(arg, type_):
                 args_tuple += (arg,)
             else:
                 kt.signal_type_error(type_, arg)
         else:
             kt.signal_arity_mismatch(str(len(argtypes)),
                                      otree)
     if kt.is_nil(rest):
         args_tuple += etc
         return fn(*args_tuple)
     else:
         kt.signal_arity_mismatch(str(len(argtypes)),
                                  otree)
Exemplo n.º 7
0
def _debug_off(val):
    assert kt.is_nil(val)
    debug.stop_stepping()
    return kt.inert
Exemplo n.º 8
0
def _debug_on(val):
    assert kt.is_nil(val)
    debug.start_stepping()
    return kt.inert
Exemplo n.º 9
0
def listp(val):
    while isinstance(val, kt.Pair):
        val = val.cdr
    return kt.kernel_boolean(kt.is_nil(val))
Exemplo n.º 10
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