https://gcc.gnu.org/g:b7e0a2cdd6a9376d6a7db0bdbbe9d8a0fd525cf7
commit r17-4461-gb7e0a2cdd6a9376d6a7db0bdbbe9d8a0fd525cf7 Author: Jose E. Marchesi <[email protected]> Date: Sat Sep 19 15:05:45 2026 +0200 a68: factor origin handling in sprops into make_origin Signed-off-by: Jose E. Marchesi <[email protected]> gcc/algol68/ChangeLog * a68-parser-sprops.cc (make_origin): Initialize properties of the new origin from a parse node. (sprops_for_denotation): Pass parse node to make_origin and remove now superfluous code. (sprops_for_deproceduring): Likewise. (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_applied_identifier): Likewise. (sprops_for_assertion): Likewise. (sprops_for_decl): Likewise. (sprops_for_unit): Likewise. Diff: --- gcc/algol68/a68-parser-sprops.cc | 113 ++++++++++----------------------------- 1 file changed, 27 insertions(+), 86 deletions(-) diff --git a/gcc/algol68/a68-parser-sprops.cc b/gcc/algol68/a68-parser-sprops.cc index e8a131625901..19af22456a89 100644 --- a/gcc/algol68/a68-parser-sprops.cc +++ b/gcc/algol68/a68-parser-sprops.cc @@ -241,18 +241,18 @@ These rules are implemented in the corresponding handlers for choice constructs, below. */ -/* Allocate a new origin and return it. The particular properties used to - initialize the value are arbitrary and the user should not rely on them. */ +/* Allocate a new origin and return it. The new origin is of kind NIL, and its + properties are derived from the given parse node P. */ static ORIGIN_T * -make_origin (void) +make_origin (NODE_T *p) { ORIGIN_T *ori = ggc_alloc<ORIGIN_T> (); ori->kindo = KINDO_NIL; - ori->bno = 0; + ori->diago = a68_get_node_location (p); + ori->bno = LEX_LEVEL (p); ori->derefo = false; ori->geno = false; - ori->diago = UNKNOWN_LOCATION; return ori; } @@ -289,11 +289,8 @@ origin_equal_p (ORIGIN_T *ori1, ORIGIN_T *ori2) static void sprops_for_denotation (NODE_T *p) { - ORIGIN (p) = make_origin (); + ORIGIN (p) = make_origin (p); KINDO (p) = KINDO_CST; - DIAGO (p) = a68_get_node_location (p); - BNO (p) = 0; - DEREFO (p) = false; ACCESS (p) = ACCESS_DIR; } @@ -351,11 +348,7 @@ sprops_for_dereferencing (NODE_T *p) static void sprops_for_deproceduring (NODE_T *p) { - ORIGIN (p) = make_origin (); - KINDO (p) = KINDO_NIL; - DIAGO (p) = a68_get_node_location (p); - BNO (p) = LEX_LEVEL (p); - DEREFO (p) = false; + ORIGIN (p) = make_origin (p); ACCESS (p) = ACCESS_DIR; } @@ -368,11 +361,7 @@ sprops_for_deproceduring (NODE_T *p) static void sprops_for_proceduring (NODE_T *p) { - ORIGIN (p) = make_origin (); - KINDO (p) = KINDO_NIL; - DIAGO (p) = a68_get_node_location (p); - BNO (p) = LEX_LEVEL (p); - DEREFO (p) = false; + ORIGIN (p) = make_origin (p); ACCESS (p) = ACCESS_DIR; } @@ -414,11 +403,7 @@ sprops_for_uniting (NODE_T *p) static void sprops_for_loop_clause (NODE_T *p) { - ORIGIN (p) = make_origin (); - KINDO (p) = KINDO_NIL; - DIAGO (p) = a68_get_node_location (p); - BNO (p) = LEX_LEVEL (p); - DEREFO (p) = false; + ORIGIN (p) = make_origin (p); ACCESS (p) = ACCESS_NIL; } @@ -519,11 +504,9 @@ sprops_for_serial_clause (NODE_T *p) { bool found_derefo = DEREFO (last_unit) | DEREFO (completer); bool found_geno = GENO (last_unit) | GENO (completer); - ORIGIN (p) = make_origin (); - KINDO (p) = KINDO_NIL; + ORIGIN (p) = make_origin (p); DEREFO (p) = found_derefo; GENO (p) = found_geno; - BNO (p) = LEX_LEVEL (p); } /* Balance access. */ @@ -543,11 +526,7 @@ sprops_for_serial_clause (NODE_T *p) static void sprops_for_parallel_clause (NODE_T *p) { - ORIGIN (p) = make_origin (); - KINDO (p) = KINDO_NIL; - BNO (p) = LEX_LEVEL (p); - DEREFO (p) = false; - GENO (p) = false; + ORIGIN (p) = make_origin (p); ACCESS (p) = ACCESS_NIL; } @@ -610,11 +589,9 @@ sprops_for_conditional_clause (NODE_T *p) bool found_derefo = DEREFO (then_part) | DEREFO (else_part); bool found_geno = GENO (then_part) | GENO (else_part); - ORIGIN (p) = make_origin (); - KINDO (p) = KINDO_NIL; + ORIGIN (p) = make_origin (p); DEREFO (p) = found_derefo; GENO (p) = found_geno; - BNO (p) = LEX_LEVEL (p); } /* Balance access. */ @@ -708,11 +685,9 @@ sprops_for_case_clause (NODE_T *p) ORIGIN (p) = postulated_origin; else { - ORIGIN (p) = make_origin (); - KINDO (p) = KINDO_NIL; + ORIGIN (p) = make_origin (p); DEREFO (p) = found_derefo; GENO (p) = found_geno; - BNO (p) = LEX_LEVEL (p); } /* Balance access. */ @@ -738,10 +713,7 @@ sprops_for_case_clause (NODE_T *p) static void sprops_for_collateral_clause (NODE_T *p) { - ORIGIN (p) = make_origin (); - BNO (p) = LEX_LEVEL (p); - GENO (p) = 0; - DEREFO (p) = 0; + ORIGIN (p) = make_origin (p); if (MOID (p) == M_VOID) { @@ -844,11 +816,9 @@ sprops_for_conformity_clause (NODE_T *p) ORIGIN (p) = postulated_origin; else { - ORIGIN (p) = make_origin (); - KINDO (p) = KINDO_NIL; + ORIGIN (p) = make_origin (p); DEREFO (p) = found_derefo; GENO (p) = found_geno; - BNO (p) = LEX_LEVEL (p); } /* Balance access. */ @@ -867,11 +837,7 @@ sprops_for_conformity_clause (NODE_T *p) static void sprops_for_identity_relation (NODE_T *p) { - ORIGIN (p) = make_origin (); - KINDO (p) = KINDO_NIL; - BNO (p) = LEX_LEVEL (p); - DEREFO (p) = false; - GENO (p) = false; + ORIGIN (p) = make_origin (p); ACCESS (p) = ACCESS_DIR; } @@ -939,11 +905,7 @@ sprops_for_selection (NODE_T *p) static void sprops_for_logical_function (NODE_T *p) { - ORIGIN (p) = make_origin (); - DIAGO (p) = a68_get_node_location (p); - KINDO (p) = KINDO_NIL; - BNO (p) = LEX_LEVEL (p); - DEREFO (p) = false; + ORIGIN (p) = make_origin (p); ACCESS (p) = ACCESS_DIR; } @@ -971,11 +933,8 @@ sprops_for_cast (NODE_T *p) static void sprops_for_call (NODE_T *p) { - ORIGIN (p) = make_origin (); - DIAGO (p) = a68_get_node_location (p); - KINDO (p) = KINDO_NIL; - BNO (p) = LEX_LEVEL (p); - DEREFO (p) = false; + ORIGIN (p) = make_origin (p); + ACCESS (p) = ACCESS_DIR; } /* Generators @@ -987,10 +946,9 @@ sprops_for_call (NODE_T *p) static void sprops_for_generator (NODE_T *p) { - ORIGIN (p) = make_origin (); - DIAGO (p) = a68_get_node_location (p); + ORIGIN (p) = make_origin (p); KINDO (p) = KINDO_GEN; - DEREFO (p) = false; + if (IS (SUB (p), LOC_SYMBOL)) { BNO (p) = LEX_LEVEL (p); @@ -1037,14 +995,7 @@ sprops_for_formula (NODE_T *p) if (origin_equal_p (ORIGIN (arg1), ORIGIN (arg2))) ORIGIN (p) = ORIGIN (arg1); else - { - ORIGIN (p) = make_origin (); - DIAGO (p) = a68_get_node_location (p); - KINDO (p) = KINDO_NIL; - DEREFO (p) = 0; - BNO (p) = LEX_LEVEL (p); - GENO (p) = false; - } + ORIGIN (p) = make_origin (p); } ACCESS (p) = ACCESS_DIR; } @@ -1062,7 +1013,7 @@ static void sprops_for_applied_identifier (NODE_T *p) { if (ORIGIN (TAX (p)) == NO_ORIGIN) - ORIGIN (TAX (p)) = make_origin (); + ORIGIN (TAX (p)) = make_origin (p); ORIGIN (p) = ORIGIN (TAX (p)); ACCESS (p) = ACCESS (TAX (p)); } @@ -1076,11 +1027,7 @@ sprops_for_applied_identifier (NODE_T *p) static void sprops_for_assertion (NODE_T *p) { - ORIGIN (p) = make_origin (); - DIAGO (p) = a68_get_node_location (p); - KINDO (p) = KINDO_NIL; - BNO (p) = LEX_LEVEL (p); - DEREFO (p) = false; + ORIGIN (p) = make_origin (p); ACCESS (p) = ACCESS_NIL; } @@ -1188,8 +1135,7 @@ sprops_for_decl (NODE_T *p) { TAG_T *tax = TAX (defining_identifier); if (ORIGIN (tax) == NO_ORIGIN) - ORIGIN (tax) = make_origin (); - DIAGO (tax) = a68_get_node_location (p); + ORIGIN (tax) = make_origin (p); KINDO (tax) = KINDO_IDE; BNO (tax) = LEX_LEVEL (defining_identifier); ACCESS (tax) = ACCESS_DIR; @@ -1200,8 +1146,7 @@ sprops_for_decl (NODE_T *p) { TAG_T *tax = TAX (defining_identifier); if (ORIGIN (tax) == NO_ORIGIN) - ORIGIN (tax) = make_origin (); - DIAGO (tax) = a68_get_node_location (p); + ORIGIN (tax) = make_origin (p); KINDO (tax) = KINDO_VAR; BNO (tax) = LEX_LEVEL (defining_identifier); ACCESS (tax) = ACCESS_VAR; @@ -1241,11 +1186,7 @@ sprops_for_unit (NODE_T *p) case NIHIL: case EMPTY_SYMBOL: case ROUTINE_TEXT: - ORIGIN (p) = make_origin (); - DIAGO (p) = a68_get_node_location (p); - KINDO (p) = KINDO_NIL; - DEREFO (p) = false; - BNO (p) = LEX_LEVEL (p); + ORIGIN (p) = make_origin (p); ACCESS (p) = ACCESS_DIR; break; case DENOTATION:
