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.
---
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 e8a13162590..19af22456a8 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:
--
2.39.5