Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang
erlang
2367-beam_disasm-Translate-raise-2-as-a-bif.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 2367-beam_disasm-Translate-raise-2-as-a-bif.patch of Package erlang
From 07311441ef8633f196359bf1de886ea8d4dc1357 Mon Sep 17 00:00:00 2001 From: Michael Davis <mcarsondavis@gmail.com> Date: Thu, 10 Nov 2022 16:08:50 -0600 Subject: [PATCH 7/8] beam_disasm: Translate raise/2 as a bif The removed lines contain a warning to not translate as a BIF but this only applied to the usage of beam_disasm in HiPE. `beam_validator` expects the `bif/5` shape and `beam_asm:make_op/2` translates from `bif/5` to `raise/2`. For an example listing: call_that_will_raise(A) -> try 1 + A catch error:_:Stacktrace -> erlang:raise(error, "Oh no!", Stacktrace) end. we get the following asm: {function, call_that_will_raise, 1, 2}. {label,1}. {line,[{location,"raisin.erl",3}]}. {func_info,{atom,raisin},{atom,call_that_will_raise},1}. {label,2}. {allocate,1,1}. {'try',{y,0},{f,3}}. {line,[{location,"raisin.erl",5}]}. {gc_bif,'+',{f,0},1,[{x,0},{integer,1}],{x,0}}. {try_end,{y,0}}. {deallocate,1}. return. {label,3}. {try_case,{y,0}}. {test,is_eq_exact, {f,4}, [{tr,{x,0},{t_atom,[error,exit,throw]}},{atom,error}]}. {move,{literal,"Oh no!"},{x,1}}. raw_raise. {deallocate,1}. return. {label,4}. {bif,raise,{f,0},[{x,2},{x,1}],{x,0}}. --- lib/compiler/src/beam_disasm.erl | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/compiler/src/beam_disasm.erl b/lib/compiler/src/beam_disasm.erl index 6a5ec15d31..5e14715c65 100644 --- a/lib/compiler/src/beam_disasm.erl +++ b/lib/compiler/src/beam_disasm.erl @@ -1014,8 +1014,7 @@ resolve_inst({try_case,[Reg]},_,_,_) -> % analogous to 'catch_end' resolve_inst({try_case_end,[Arg]},_,_,_) -> {try_case_end,resolve_arg(Arg)}; resolve_inst({raise,[_Reg1,_Reg2]=Regs},_,_,_) -> - {raise,{f,0},Regs,{x,0}}; % do NOT wrap this as a 'bif' - % as there is no raise/2 bif! + {bif,raise,{f,0},Regs,{x,0}}; %% %% New bit syntax instructions added in February 2004 (R10B). -- 2.35.3
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor