Do not use the allocation mechanism for the desig structure; overkill

This commit is contained in:
ceriel
1991-03-14 11:10:40 +00:00
parent 86bc055fa1
commit 5ebc2017a0
7 changed files with 66 additions and 58 deletions

View File

@@ -36,6 +36,7 @@ extern char *long2str();
extern char *symbol2str();
extern int proclevel;
extern char options[];
extern t_desig null_desig;
int fp_used;
CodeConst(cst, size)
@@ -880,7 +881,9 @@ CodeOper(expr, true_label, false_label)
case OR:
case AND: {
label l_maybe = ++text_label, l_end = NO_LABEL;
t_desig *Des = new_desig();
t_desig Des;
Des = null_desig;
if (true_label == NO_LABEL) {
true_label = ++text_label;
@@ -889,12 +892,12 @@ CodeOper(expr, true_label, false_label)
}
if (expr->nd_symb == OR) {
CodeExpr(leftop, Des, true_label, l_maybe);
CodeExpr(leftop, &Des, true_label, l_maybe);
}
else CodeExpr(leftop, Des, l_maybe, false_label);
else CodeExpr(leftop, &Des, l_maybe, false_label);
def_ilb(l_maybe);
clear((char *) Des, sizeof(t_desig));
CodeExpr(rightop, Des, true_label, false_label);
Des = null_desig;
CodeExpr(rightop, &Des, true_label, false_label);
if (l_end != NO_LABEL) {
def_ilb(true_label);
c_loc(1);
@@ -903,7 +906,6 @@ CodeOper(expr, true_label, false_label)
c_loc(0);
def_ilb(l_end);
}
free_desig(Des);
break;
}
default:
@@ -1048,11 +1050,11 @@ CodePExpr(nd)
/* Generate code to push the value of the expression "nd"
on the stack.
*/
register t_desig *designator = new_desig();
t_desig designator;
CodeExpr(nd, designator, NO_LABEL, NO_LABEL);
CodeValue(designator, nd->nd_type);
free_desig(designator);
designator = null_desig;
CodeExpr(nd, &designator, NO_LABEL, NO_LABEL);
CodeValue(&designator, nd->nd_type);
}
CodeDAddress(nd, chk_controlvar)
@@ -1062,14 +1064,15 @@ CodeDAddress(nd, chk_controlvar)
on the stack.
*/
register t_desig *designator = new_desig();
t_desig designator;
int chkptr;
designator = null_desig;
if (chk_controlvar) ChkForFOR(nd);
CodeDesig(nd, designator);
chkptr = designator->dsg_kind==DSG_PLOADED ||
designator->dsg_kind==DSG_PFIXED;
CodeAddress(designator);
CodeDesig(nd, &designator);
chkptr = designator.dsg_kind==DSG_PLOADED ||
designator.dsg_kind==DSG_PFIXED;
CodeAddress(&designator);
/* Generate dummy use of pointer, to get possible error message
as soon as possible
@@ -1079,7 +1082,6 @@ CodeDAddress(nd, chk_controlvar)
C_loi((arith) 1);
C_asp(word_size);
}
free_desig(designator);
}
CodeDStore(nd)
@@ -1089,12 +1091,12 @@ CodeDStore(nd)
designator "nd".
*/
register t_desig *designator = new_desig();
t_desig designator;
designator = null_desig;
ChkForFOR(nd);
CodeDesig(nd, designator);
CodeStore(designator, nd->nd_type);
free_desig(designator);
CodeDesig(nd, &designator);
CodeStore(&designator, nd->nd_type);
}
DoHIGH(df)