Пример #1
0
def _make_arg_unwrapper(func, argstypes, funcname, has_self=False, simple=False):
    argtype_tuples = []
    min_arg = 0
    isdefault = False
    for i, typ in enumerate(argstypes):
        default_value = None
        if isinstance(typ, default):
            isdefault = True
            default_value = typ.default
            typ = typ.typ
        else:
            assert not isdefault, "non-default argument %s after default argument" % typ
            min_arg += 1
        unwrapper, errorname = typ.make_unwrapper()
        type_errormsg = "expected %s as argument %s to %s, got " % (
                            errorname, i, funcname)
        argtype_tuples.append((i, unwrapper, isdefault, default_value, type_errormsg))
    unroll_argtypes = unroll.unrolling_iterable(argtype_tuples)
    max_arity = len(argstypes)
    if min_arg == max_arity:
        aritystring = max_arity
    else:
        aritystring = "%s to %s" % (min_arg, max_arity)
    errormsg_arity = "expected %s arguments to %s, got " % (
        aritystring, funcname)
    if min_arg == max_arity and not has_self and min_arg in (1, 2) and simple:
        func_arg_unwrap, call1, call2 = make_direct_arg_unwrapper(
            func, min_arg, unroll_argtypes, errormsg_arity)
    else:
        func_arg_unwrap = make_list_arg_unwrapper(
            func, has_self, min_arg, max_arity, unroll_argtypes, errormsg_arity)
        call1 = call2 = None
    _arity = Arity.oneof(*range(min_arg, max_arity+1))
    return func_arg_unwrap, _arity, call1, call2
Пример #2
0
 def wrapper(func):
     from pycket import values
     names = [n] if isinstance(n, str) else n
     name = names[0]
     if argstypes is not None:
         func_arg_unwrap, _arity, _, _ = _make_arg_unwrapper(func, argstypes, name, simple=simple)
         if arity is not None:
             _arity = arity
     else:
         func_arg_unwrap = func
         _arity = arity or Arity.unknown
         assert isinstance(_arity, Arity)
     func_result_handling = _make_result_handling_func(func_arg_unwrap, simple)
     result_arity = Arity.oneof(1) if simple else None
     return values.W_Prim(name, make_remove_extra_info(func_result_handling),
                          arity=_arity, result_arity=result_arity)
Пример #3
0
class W_BaseParameter(W_Object):
    errorname = "parameter"
    _attrs_ = _immutable_fields_ = ["guard", "name"]

    ARITY = Arity.oneof(0, 1)

    def __init__(self, guard=None, name=OBJ_NAME):
        self.name = name
        self.guard = None if guard is values.w_false else guard

    def iscallable(self):
        return True

    def get_key(self):
        raise NotImplementedError("abstract base class")

    def get_arity(self, promote=False):
        return W_BaseParameter.ARITY

    def tostring(self):
        return "#<procedure:%s>" % self.name
Пример #4
0
def _make_arg_unwrapper(func,
                        argstypes,
                        funcname,
                        has_self=False,
                        simple=False):
    argtype_tuples = []
    min_arg = 0
    isdefault = False
    for i, typ in enumerate(argstypes):
        default_value = None
        if isinstance(typ, default):
            isdefault = True
            default_value = typ.default
            typ = typ.typ
        else:
            assert not isdefault, "non-default argument %s after default argument" % typ
            min_arg += 1
        unwrapper, errorname = typ.make_unwrapper()
        type_errormsg = "expected %s as argument %s to %s, got " % (
            errorname, i, funcname)
        argtype_tuples.append(
            (i, unwrapper, isdefault, default_value, type_errormsg))
    unroll_argtypes = unroll.unrolling_iterable(argtype_tuples)
    max_arity = len(argstypes)
    if min_arg == max_arity:
        aritystring = max_arity
    else:
        aritystring = "%s to %s" % (min_arg, max_arity)
    errormsg_arity = "expected %s arguments to %s, got " % (aritystring,
                                                            funcname)
    if min_arg == max_arity and not has_self and min_arg in (1, 2) and simple:
        func_arg_unwrap, call1, call2 = make_direct_arg_unwrapper(
            func, min_arg, unroll_argtypes, errormsg_arity)
    else:
        func_arg_unwrap = make_list_arg_unwrapper(func, has_self, min_arg,
                                                  max_arity, unroll_argtypes,
                                                  errormsg_arity)
        call1 = call2 = None
    _arity = Arity.oneof(*range(min_arg, max_arity + 1))
    return func_arg_unwrap, _arity, call1, call2
Пример #5
0
 def wrapper(func):
     from pycket import values
     names = [n] if isinstance(n, str) else n
     name = names[0]
     if argstypes is not None:
         func_arg_unwrap, _arity, _, _ = _make_arg_unwrapper(func,
                                                             argstypes,
                                                             name,
                                                             simple=simple)
         if arity is not None:
             _arity = arity
     else:
         func_arg_unwrap = func
         _arity = arity or Arity.unknown
         assert isinstance(_arity, Arity)
     func_result_handling = _make_result_handling_func(
         func_arg_unwrap, simple)
     result_arity = Arity.oneof(1) if simple else None
     return values.W_Prim(name,
                          make_remove_extra_info(func_result_handling),
                          arity=_arity,
                          result_arity=result_arity)
Пример #6
0
    topic           = values.w_false
    parent          = values.w_false
    propagate_level = DEBUG

    try:
        topic           = parser.symbol_or_false()
        parent          = parser.logger_or_false()
        propagate_level = parser.log_level()
    except EndOfInput:
        pass

    # Any remaining arguments are propagate topics
    propagate_topic = parser._symbol_or_false()

    return values.W_Logger(topic, parent, propagate_level, propagate_topic)

@expose("log-level?", [values.W_Object, values.W_Object, default(values.W_Object, values.w_false)])
def log_level(logger, level, topic):
    # TODO: Actual implementation
    return values.w_false

@expose("log-message", arity=Arity.oneof(4, 5, 6))
def log_message(args):
    # TODO: Actual implementation
    return

w_current_logger = values_parameter.W_Parameter(w_default_logger)
expose_val("current-logger", w_current_logger)

Пример #7
0
    try:
        topic = parser.symbol_or_false()
        parent = parser.logger_or_false()
        propagate_level = parser.log_level()
    except EndOfInput:
        pass

    # Any remaining arguments are propagate topics
    propagate_topic = parser._symbol_or_false()

    return values.W_Logger(topic, parent, propagate_level, propagate_topic)


@expose("log-level?", [
    values.W_Object, values.W_Object,
    default(values.W_Object, values.w_false)
])
def log_level(logger, level, topic):
    # TODO: Actual implementation
    return values.w_false


@expose("log-message", arity=Arity.oneof(4, 5, 6))
def log_message(args):
    # TODO: Actual implementation
    return


w_current_logger = values_parameter.W_Parameter(w_default_logger)
expose_val("current-logger", w_current_logger)