From: ceriel Date: Mon, 3 Aug 1987 18:20:55 +0000 (+0000) Subject: fix: variable sets were handled wrong X-Git-Tag: release-5-5~3955 X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=956fa21b89a86d3b830529f82b98ff20135fe355;p=ack.git fix: variable sets were handled wrong --- diff --git a/lang/m2/comp/chk_expr.c b/lang/m2/comp/chk_expr.c index 6529c5fcb..8541a6ea2 100644 --- a/lang/m2/comp/chk_expr.c +++ b/lang/m2/comp/chk_expr.c @@ -425,11 +425,12 @@ ChkSet(expp) register struct def *df; unsigned size; int retval = 1; + int SetIsConstant = 1; assert(expp->nd_symb == SET); - expp->nd_class = Set; expp->nd_type = error_type; + expp->nd_class = Set; /* First determine the type of the set */ @@ -472,10 +473,11 @@ ChkSet(expp) expp->nd_set)) { retval = 0; } + if (nd->nd_left) SetIsConstant = 0; nd = nd->nd_right; } - if (expp->nd_class == Set) { + if (SetIsConstant) { FreeNode(expp->nd_right); expp->nd_right = 0; } diff --git a/lang/m2/comp/statement.g b/lang/m2/comp/statement.g index 372030178..3c609387c 100644 --- a/lang/m2/comp/statement.g +++ b/lang/m2/comp/statement.g @@ -57,12 +57,21 @@ statement(register struct node **pnd;) | CaseStatement(pnd) | - WhileStatement(pnd) + WHILE { *pnd = nd = MkLeaf(Stat, &dot); } + expression(&(nd->nd_left)) + DO + StatementSequence(&(nd->nd_right)) + END | - RepeatStatement(pnd) + REPEAT { *pnd = nd = MkLeaf(Stat, &dot); } + StatementSequence(&(nd->nd_left)) + UNTIL + expression(&(nd->nd_right)) | { loopcount++; } - LoopStatement(pnd) + LOOP { *pnd = nd = MkLeaf(Stat, &dot); } + StatementSequence(&((*pnd)->nd_right)) + END { loopcount--; } | ForStatement(pnd) @@ -176,6 +185,7 @@ case(struct node **pnd; struct type **ptp;) : } ; +/* inline in statement; lack of space WhileStatement(struct node **pnd;) { register struct node *nd; @@ -196,6 +206,7 @@ RepeatStatement(struct node **pnd;) UNTIL expression(&(nd->nd_right)) ; +*/ ForStatement(struct node **pnd;) { @@ -225,11 +236,13 @@ ForStatement(struct node **pnd;) END ; +/* inline in Statement; lack of space LoopStatement(struct node **pnd;): LOOP { *pnd = MkLeaf(Stat, &dot); } StatementSequence(&((*pnd)->nd_right)) END ; +*/ WithStatement(struct node **pnd;) {