def get_builtin_exception(self, Class):
     edata = self.translator.rtyper.getexceptiondata()
     rclass = self.translator.rtyper.type_system.rclass
     bk = self.translator.annotator.bookkeeper
     error_def = bk.getuniqueclassdef(Class)
     error_ll_exc = edata.get_standard_ll_exc_instance(self.translator.rtyper, error_def)
     error_ll_exc_type = rclass.ll_inst_type(error_ll_exc)
     return error_ll_exc_type, error_ll_exc
Exemplo n.º 2
0
 def get_builtin_exception(self, Class):
     edata = self.translator.rtyper.getexceptiondata()
     rclass = self.translator.rtyper.type_system.rclass
     bk = self.translator.annotator.bookkeeper
     error_def = bk.getuniqueclassdef(Class)
     error_ll_exc = edata.get_standard_ll_exc_instance(
         self.translator.rtyper, error_def)
     error_ll_exc_type = rclass.ll_inst_type(error_ll_exc)
     return error_ll_exc_type, error_ll_exc
Exemplo n.º 3
0
 def rpyexc_restore_exception(evalue):
     if evalue:
         rpyexc_raise(rclass.ll_inst_type(evalue), evalue)
Exemplo n.º 4
0
    def __init__(self, translator):
        self.translator = translator
        self.raise_analyzer = canraise.RaiseAnalyzer(translator)
        edata = translator.rtyper.getexceptiondata()
        self.lltype_of_exception_value = edata.lltype_of_exception_value
        self.lltype_of_exception_type = edata.lltype_of_exception_type
        self.mixlevelannotator = MixLevelHelperAnnotator(translator.rtyper)
        exc_data, null_type, null_value = self.setup_excdata()

        rclass = translator.rtyper.type_system.rclass
        runtime_error_def = translator.annotator.bookkeeper.getuniqueclassdef(RuntimeError)
        runtime_error_ll_exc = edata.get_standard_ll_exc_instance(translator.rtyper, runtime_error_def)
        runtime_error_ll_exc_type = rclass.ll_inst_type(runtime_error_ll_exc)

        def rpyexc_occured():
            exc_type = exc_data.exc_type
            return bool(exc_type)

        def rpyexc_fetch_type():
            return exc_data.exc_type

        def rpyexc_fetch_value():
            return exc_data.exc_value

        def rpyexc_clear():
            exc_data.exc_type = null_type
            exc_data.exc_value = null_value

        def rpyexc_raise(etype, evalue):
            # assert(!RPyExceptionOccurred());
            exc_data.exc_type = etype
            exc_data.exc_value = evalue

        def rpyexc_fetch_exception():
            evalue = rpyexc_fetch_value()
            rpyexc_clear()
            return evalue
        
        def rpyexc_restore_exception(evalue):
            if evalue:
                rpyexc_raise(rclass.ll_inst_type(evalue), evalue)

        def rpyexc_raise_runtime_error():
            rpyexc_raise(runtime_error_ll_exc_type, runtime_error_ll_exc)

        self.rpyexc_occured_ptr = self.build_func(
            "RPyExceptionOccurred",
            rpyexc_occured,
            [], lltype.Bool)

        self.rpyexc_fetch_type_ptr = self.build_func(
            "RPyFetchExceptionType",
            rpyexc_fetch_type,
            [], self.lltype_of_exception_type)

        self.rpyexc_fetch_value_ptr = self.build_func(
            "RPyFetchExceptionValue",
            rpyexc_fetch_value,
            [], self.lltype_of_exception_value)

        self.rpyexc_clear_ptr = self.build_func(
            "RPyClearException",
            rpyexc_clear,
            [], lltype.Void)

        self.rpyexc_raise_ptr = self.build_func(
            "RPyRaiseException",
            rpyexc_raise,
            [self.lltype_of_exception_type, self.lltype_of_exception_value],
            lltype.Void,
            jitcallkind='rpyexc_raise') # for the JIT

        self.rpyexc_raise_runtime_error_ptr = self.build_func(
            "RPyRaiseRuntimeError",
            rpyexc_raise_runtime_error,
            [], lltype.Void)

        self.rpyexc_fetch_exception_ptr = self.build_func(
            "RPyFetchException",
            rpyexc_fetch_exception,
            [], self.lltype_of_exception_value)

        self.rpyexc_restore_exception_ptr = self.build_func(
            "RPyRestoreException",
            rpyexc_restore_exception,
            [self.lltype_of_exception_value], lltype.Void)

        self.mixlevelannotator.finish()
        self.lltype_to_classdef = translator.rtyper.lltype_to_classdef_mapping()
Exemplo n.º 5
0
 def rpyexc_restore_exception(evalue):
     if evalue:
         exc_data.exc_type = rclass.ll_inst_type(evalue)
         exc_data.exc_value = evalue
Exemplo n.º 6
0
 def rpyexc_restore_exception(evalue):
     if evalue:
         rpyexc_raise(rclass.ll_inst_type(evalue), evalue)
Exemplo n.º 7
0
    def __init__(self, translator):
        self.translator = translator
        self.raise_analyzer = canraise.RaiseAnalyzer(translator)
        edata = translator.rtyper.getexceptiondata()
        self.lltype_of_exception_value = edata.lltype_of_exception_value
        self.lltype_of_exception_type = edata.lltype_of_exception_type
        self.mixlevelannotator = MixLevelHelperAnnotator(translator.rtyper)
        exc_data, null_type, null_value = self.setup_excdata()

        rclass = translator.rtyper.type_system.rclass
        runtime_error_def = translator.annotator.bookkeeper.getuniqueclassdef(
            RuntimeError)
        runtime_error_ll_exc = edata.get_standard_ll_exc_instance(
            translator.rtyper, runtime_error_def)
        runtime_error_ll_exc_type = rclass.ll_inst_type(runtime_error_ll_exc)

        def rpyexc_occured():
            exc_type = exc_data.exc_type
            return bool(exc_type)

        def rpyexc_fetch_type():
            return exc_data.exc_type

        def rpyexc_fetch_value():
            return exc_data.exc_value

        def rpyexc_clear():
            exc_data.exc_type = null_type
            exc_data.exc_value = null_value

        def rpyexc_raise(etype, evalue):
            # assert(!RPyExceptionOccurred());
            exc_data.exc_type = etype
            exc_data.exc_value = evalue

        def rpyexc_fetch_exception():
            evalue = rpyexc_fetch_value()
            rpyexc_clear()
            return evalue

        def rpyexc_restore_exception(evalue):
            if evalue:
                rpyexc_raise(rclass.ll_inst_type(evalue), evalue)

        def rpyexc_raise_runtime_error():
            rpyexc_raise(runtime_error_ll_exc_type, runtime_error_ll_exc)

        self.rpyexc_occured_ptr = self.build_func("RPyExceptionOccurred",
                                                  rpyexc_occured, [],
                                                  lltype.Bool)

        self.rpyexc_fetch_type_ptr = self.build_func(
            "RPyFetchExceptionType", rpyexc_fetch_type, [],
            self.lltype_of_exception_type)

        self.rpyexc_fetch_value_ptr = self.build_func(
            "RPyFetchExceptionValue", rpyexc_fetch_value, [],
            self.lltype_of_exception_value)

        self.rpyexc_clear_ptr = self.build_func("RPyClearException",
                                                rpyexc_clear, [], lltype.Void)

        self.rpyexc_raise_ptr = self.build_func(
            "RPyRaiseException",
            rpyexc_raise,
            [self.lltype_of_exception_type, self.lltype_of_exception_value],
            lltype.Void,
            jitcallkind='rpyexc_raise')  # for the JIT

        self.rpyexc_raise_runtime_error_ptr = self.build_func(
            "RPyRaiseRuntimeError", rpyexc_raise_runtime_error, [],
            lltype.Void)

        self.rpyexc_fetch_exception_ptr = self.build_func(
            "RPyFetchException", rpyexc_fetch_exception, [],
            self.lltype_of_exception_value)

        self.rpyexc_restore_exception_ptr = self.build_func(
            "RPyRestoreException", rpyexc_restore_exception,
            [self.lltype_of_exception_value], lltype.Void)

        self.mixlevelannotator.finish()
        self.lltype_to_classdef = translator.rtyper.lltype_to_classdef_mapping(
        )
Exemplo n.º 8
0
 def rpyexc_restore_exception(evalue):
     if evalue:
         exc_data.exc_type = rclass.ll_inst_type(evalue)
         exc_data.exc_value = evalue