Beispiel #1
0
def bind_arguments(env: Scope, params: Node, args: Value) -> None:
    if isinstance(params, Name) and args is NULL_PAIR_VALUE:
        env.put(params.identifier, args)
        return
    while True:
        if params is NULL_PAIR and args is NULL_PAIR_VALUE:
            return
        elif params is NULL_PAIR and args is not NULL_PAIR_VALUE:
            raise ArgsNotFit('too many arguments')
        elif params is not NULL_PAIR and args is NULL_PAIR_VALUE:
            raise ArgsNotFit('missing arguments')
        if isinstance(params, Pair):
            name: Name = params.first
            if not isinstance(args, PairValue):
                raise ArgsNotFit('arguments does not match given number')
            env.put(name.identifier, args.first)
            params = params.second
        elif isinstance(params, Name):
            env.put(params.identifier, args)
            return
Beispiel #2
0
def define(env: Scope, pattern: str, value: Value) -> None:
    env.put(pattern, value)