https://gcc.gnu.org/g:fbc365cc1e229254cd6173bbad6f67620fcacc66
commit r17-4460-gfbc365cc1e229254cd6173bbad6f67620fcacc66 Author: Jose E. Marchesi <[email protected]> Date: Sat Sep 19 13:43:25 2026 +0200 a68: fill in BNO static properties in the sprop pass Signed-off-by: Jose E. Marchesi <[email protected]> gcc/algol68/ChangeLog * a68-parser-sprops.cc (sprops_for_deproceduring): Set BNO. (sprops_for_proceduring): Likewise. (sprops_for_loop_clause): Likewise. (sprops_for_serial_clause): Likewise. (sprops_for_parallel_clause): Likewise. (sprops_for_conditional_clause): Likewise. (sprops_for_case_clause): Likewise. (sprops_for_collateral_clause): Likewise. (sprops_for_conformity_clause): Likewise. (sprops_for_identity_relation): Likewise. (sprops_for_logical_function): Likewise. (sprops_for_call): Likewise. (sprops_for_generator): Likewise. (sprops_for_formula): Likewise. (sprops_for_assertion): Likewise. (sprops_for_decl): Likewise. (sprops_for_decl): Likewise. (sprops_for_unit): Likewise. Diff: --- gcc/algol68/a68-parser-sprops.cc | 55 ++++++++++++++++++++++++---------------- 1 file changed, 33 insertions(+), 22 deletions(-) diff --git a/gcc/algol68/a68-parser-sprops.cc b/gcc/algol68/a68-parser-sprops.cc index dc82ffd53937..e8a131625901 100644 --- a/gcc/algol68/a68-parser-sprops.cc +++ b/gcc/algol68/a68-parser-sprops.cc @@ -73,12 +73,21 @@ ─── Its meaning for a particular construct is to be interpreted along with its - kindo. For KINDO_IDE and KINDO_VAR, bno indicates the depth number of - the block where the identifier or the variable is declared. For - KINDO_GEN, when it corresponds to a local generator, bno indicates the - depth number of the block where the generator appears. For - KINDO_CONSTANT, and for KINDO_GEN when it corresponds to a heap generator, - bno is always zero. + kindo. + + ● For KINDO_IDE and KINDO_VAR, bno indicates the depth number of the block + where the identifier or the variable is declared. This is not to be + confused with the scope of the value ascribed to the identifier or + stored in the variable. + + ● For KINDO_GEN, when it corresponds to a local generator, bno indicates + the depth number of the block where the generator appears. + + ● For KINDO_CST, and for KINDO_GEN when it corresponds to a heap + generator, bno is always zero. + + ● For KINDO_NIL, bno indicates the depth number of the construct issuing + the value. derefo is the "flag dereferencing of the origin". ────── @@ -345,7 +354,7 @@ sprops_for_deproceduring (NODE_T *p) ORIGIN (p) = make_origin (); KINDO (p) = KINDO_NIL; DIAGO (p) = a68_get_node_location (p); - BNO (p) = 0; + BNO (p) = LEX_LEVEL (p); DEREFO (p) = false; ACCESS (p) = ACCESS_DIR; } @@ -362,7 +371,7 @@ sprops_for_proceduring (NODE_T *p) ORIGIN (p) = make_origin (); KINDO (p) = KINDO_NIL; DIAGO (p) = a68_get_node_location (p); - BNO (p) = 0; + BNO (p) = LEX_LEVEL (p); DEREFO (p) = false; ACCESS (p) = ACCESS_DIR; } @@ -408,7 +417,7 @@ sprops_for_loop_clause (NODE_T *p) ORIGIN (p) = make_origin (); KINDO (p) = KINDO_NIL; DIAGO (p) = a68_get_node_location (p); - BNO (p) = 0; + BNO (p) = LEX_LEVEL (p); DEREFO (p) = false; ACCESS (p) = ACCESS_NIL; } @@ -514,7 +523,7 @@ sprops_for_serial_clause (NODE_T *p) KINDO (p) = KINDO_NIL; DEREFO (p) = found_derefo; GENO (p) = found_geno; - BNO (p) = 0; + BNO (p) = LEX_LEVEL (p); } /* Balance access. */ @@ -536,7 +545,7 @@ sprops_for_parallel_clause (NODE_T *p) { ORIGIN (p) = make_origin (); KINDO (p) = KINDO_NIL; - BNO (p) = 0; + BNO (p) = LEX_LEVEL (p); DEREFO (p) = false; GENO (p) = false; ACCESS (p) = ACCESS_NIL; @@ -605,7 +614,7 @@ sprops_for_conditional_clause (NODE_T *p) KINDO (p) = KINDO_NIL; DEREFO (p) = found_derefo; GENO (p) = found_geno; - BNO (p) = 0; + BNO (p) = LEX_LEVEL (p); } /* Balance access. */ @@ -703,7 +712,7 @@ sprops_for_case_clause (NODE_T *p) KINDO (p) = KINDO_NIL; DEREFO (p) = found_derefo; GENO (p) = found_geno; - BNO (p) = 0; + BNO (p) = LEX_LEVEL (p); } /* Balance access. */ @@ -730,7 +739,7 @@ static void sprops_for_collateral_clause (NODE_T *p) { ORIGIN (p) = make_origin (); - BNO (p) = 0; + BNO (p) = LEX_LEVEL (p); GENO (p) = 0; DEREFO (p) = 0; @@ -839,7 +848,7 @@ sprops_for_conformity_clause (NODE_T *p) KINDO (p) = KINDO_NIL; DEREFO (p) = found_derefo; GENO (p) = found_geno; - BNO (p) = 0; + BNO (p) = LEX_LEVEL (p); } /* Balance access. */ @@ -860,7 +869,7 @@ sprops_for_identity_relation (NODE_T *p) { ORIGIN (p) = make_origin (); KINDO (p) = KINDO_NIL; - BNO (p) = 0; + BNO (p) = LEX_LEVEL (p); DEREFO (p) = false; GENO (p) = false; ACCESS (p) = ACCESS_DIR; @@ -933,7 +942,7 @@ sprops_for_logical_function (NODE_T *p) ORIGIN (p) = make_origin (); DIAGO (p) = a68_get_node_location (p); KINDO (p) = KINDO_NIL; - BNO (p) = 0; + BNO (p) = LEX_LEVEL (p); DEREFO (p) = false; ACCESS (p) = ACCESS_DIR; } @@ -965,7 +974,7 @@ sprops_for_call (NODE_T *p) ORIGIN (p) = make_origin (); DIAGO (p) = a68_get_node_location (p); KINDO (p) = KINDO_NIL; - BNO (p) = 0; + BNO (p) = LEX_LEVEL (p); DEREFO (p) = false; } @@ -984,7 +993,7 @@ sprops_for_generator (NODE_T *p) DEREFO (p) = false; if (IS (SUB (p), LOC_SYMBOL)) { - BNO (p) = 0; /* XXX */ + BNO (p) = LEX_LEVEL (p); GENO (p) = true; } else @@ -1033,7 +1042,7 @@ sprops_for_formula (NODE_T *p) DIAGO (p) = a68_get_node_location (p); KINDO (p) = KINDO_NIL; DEREFO (p) = 0; - BNO (p) = 0; + BNO (p) = LEX_LEVEL (p); GENO (p) = false; } } @@ -1070,7 +1079,7 @@ sprops_for_assertion (NODE_T *p) ORIGIN (p) = make_origin (); DIAGO (p) = a68_get_node_location (p); KINDO (p) = KINDO_NIL; - BNO (p) = 0; + BNO (p) = LEX_LEVEL (p); DEREFO (p) = false; ACCESS (p) = ACCESS_NIL; } @@ -1182,6 +1191,7 @@ sprops_for_decl (NODE_T *p) ORIGIN (tax) = make_origin (); DIAGO (tax) = a68_get_node_location (p); KINDO (tax) = KINDO_IDE; + BNO (tax) = LEX_LEVEL (defining_identifier); ACCESS (tax) = ACCESS_DIR; break; } @@ -1193,6 +1203,7 @@ sprops_for_decl (NODE_T *p) ORIGIN (tax) = make_origin (); DIAGO (tax) = a68_get_node_location (p); KINDO (tax) = KINDO_VAR; + BNO (tax) = LEX_LEVEL (defining_identifier); ACCESS (tax) = ACCESS_VAR; break; } @@ -1234,7 +1245,7 @@ sprops_for_unit (NODE_T *p) DIAGO (p) = a68_get_node_location (p); KINDO (p) = KINDO_NIL; DEREFO (p) = false; - BNO (p) = 0; + BNO (p) = LEX_LEVEL (p); ACCESS (p) = ACCESS_DIR; break; case DENOTATION:
