Exemplo n.º 1
0
 def lookup_ref(self, key):
     try:
         return self.dict[key]
     except KeyError:
         if self.parent:
             return self.parent.lookup_ref(key)
         else:
             raise KeyError(revsym(key))
Exemplo n.º 2
0
    def reindex(self, arr, offsets, symbol_translation):
        for (i, tname) in enumerate(self.static_types):
            if tname:
                # special case for symbols - we have to re-use
                # existing symbol ids, so the translation has to
                # be done manually
                if tname == 'sym':
                    arr[i] = symbol_translation[arr[i]]
                    continue

                # special case for intrinsics, which are a static table
                if tname == 'intrinsic':
                    intrinsic_name = revsym(symbol_translation[arr[i]])
                    new_id = intrinsics.get(intrinsic_name).id
                    arr[i] = intrinsics.get(intrinsic_name).id
                    continue

                arr[i] += offsets[tname]

        return arr
Exemplo n.º 3
0
def arg_as_str(inst_type, i, arg):
    arg_type = None
    try:
        arg_type = inst_type.static_types[i]
        if arg_type is None: return '#' + str(arg)
        if arg_type == 'inst': return '@' + labels_by_addr[arg].name
        if arg_type == 'const': return '+' + const_table.lookup(arg).s()
        if arg_type == 'sym': return ':' + revsym(arg)
        if arg_type == 'intrinsic': return '@!' + intrinsics.lookup(arg).name
    except KeyError as e:
        debug(0,
              ['no key:', inst_type.name, arg_type or '??',
               str(i),
               str(arg)])
    except IndexError as e:
        debug(
            0,
            ['no index:', inst_type.name, arg_type or '??',
             str(i),
             str(arg)])

    return '?%s' % str(arg)
Exemplo n.º 4
0
    def as_dict(self):
        out = {}
        for (k, v) in self.dict.iteritems():
            out[revsym(k)] = v.ref_get()

        return out
Exemplo n.º 5
0
def intrinsic(frame, args):
    try:
        builtin = intrinsics.lookup(args[0])
        frame.push(builtin)
    except IndexError:
        frame.fail(tagged('unknown-intrinsic', String(revsym(args[0]))))
Exemplo n.º 6
0
def ref(frame, args):
    env = frame.pop_env()
    try:
        frame.push(env.lookup_ref(args[0]))
    except KeyError:
        frame.fail(tagged('missing-key', env, String(revsym(args[0]))))
Exemplo n.º 7
0
def let(frame, args):
    val = frame.pop()
    env = frame.pop()
    sym = args[0]
    debug(0, [revsym(sym), '=', val.s()])
    env.let(sym, val)