示例#1
0
    def compile(self, context):
        block = ObjectRepresentation()
        block.meta_set_ast(self)
        block.meta_set_parameters(self.params)

        # push current scope
        context.add_bytecode(BYTECODE_PUSH_SELF)

        index = context.add_literal_obj(block)
        context.add_bytecode(BYTECODE_PUSH_LITERAL)
        context.add_bytecode(LITERAL_TYPE_BLOCK)
        context.add_bytecode(index)

        for name, value in self.slots.iteritems():
            self._add_slot_to_bytecode(context, name, value)
            context.add_bytecode(SLOT_NORMAL)

        for name, value in self.parents.iteritems():
            self._add_slot_to_bytecode(context, name, value)
            context.add_bytecode(SLOT_PARENT)

        new_context = CodeContext()
        block.meta_set_code_context(new_context)
        for item in self.code:
            item.compile(new_context)

        block.map.code_context = new_context

        return context
示例#2
0
    def compile(self, context):
        obj = ObjectRepresentation()
        obj.meta_set_ast(self)
        obj.meta_set_parameters(self.params)

        index = context.add_literal_obj(obj)
        context.add_bytecode(BYTECODE_PUSH_LITERAL)
        context.add_bytecode(LITERAL_TYPE_OBJ)
        context.add_bytecode(index)

        for name, value in self.slots.iteritems():
            self._add_slot_to_bytecode(context, name, value)
            context.add_bytecode(SLOT_NORMAL)

        for name, value in self.parents.iteritems():
            self._add_slot_to_bytecode(context, name, value)
            context.add_bytecode(SLOT_PARENT)

        if self.code:
            new_context = CodeContext()
            obj.meta_set_code_context(new_context)
            for item in self.code:
                item.compile(new_context)

            obj.map.code_context = new_context

        return context