Handle GTO, LOR/STR 0 also use local base
This commit is contained in:
parent
e6e2e48e09
commit
be85d7a801
@ -23,6 +23,7 @@
|
||||
#include "../../../h/em_pseu.h"
|
||||
#include "../../../h/em_spec.h"
|
||||
#include "../../../h/em_flag.h"
|
||||
#include "../../../h/em_mes.h"
|
||||
#include "../share/def.h"
|
||||
#include "cf.h"
|
||||
#include "cf_succ.h"
|
||||
@ -303,6 +304,17 @@ STATIC interproc_analysis(p)
|
||||
case op_lxa:
|
||||
curproc->p_flags1 |= PF_ENVIRON;
|
||||
break;
|
||||
case op_lor:
|
||||
case op_str:
|
||||
if (SHORT(lnp) == 0) {
|
||||
curproc->p_flags1 |= PF_ENVIRON;
|
||||
}
|
||||
break;
|
||||
case ps_mes:
|
||||
if (aoff(ARG(lnp),0) == ms_gto) {
|
||||
ENTERED_WITH_GTO(curproc);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -236,7 +236,9 @@ control_flow(head)
|
||||
} else {
|
||||
if (!IS_RETURN(instr)) {
|
||||
if (IS_UNCOND_JUMP(instr)) {
|
||||
if (instr != op_gto) {
|
||||
succeeds(TARGET(lnp),b);
|
||||
}
|
||||
} else {
|
||||
if (IS_COND_JUMP(instr)) {
|
||||
succeeds(TARGET(lnp),b);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user