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
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
def rpyexc_restore_exception(evalue): if evalue: rpyexc_raise(rclass.ll_inst_type(evalue), evalue)
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()
def rpyexc_restore_exception(evalue): if evalue: exc_data.exc_type = rclass.ll_inst_type(evalue) exc_data.exc_value = evalue
def rpyexc_restore_exception(evalue): if evalue: rpyexc_raise(rclass.ll_inst_type(evalue), evalue)
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( )
def rpyexc_restore_exception(evalue): if evalue: exc_data.exc_type = rclass.ll_inst_type(evalue) exc_data.exc_value = evalue