}
if (newType)
- {
- /* cast required; change this op to a cast. */
- ast *parmCopy = resolveSymbols (copyAst (*actParm));
-
- (*actParm)->type = EX_OP;
- (*actParm)->opval.op = CAST;
- (*actParm)->left = newType;
- (*actParm)->right = parmCopy;
- (*actParm)->decorated = 0; /* force typechecking */
- decorateType (*actParm, RESULT_TYPE_NONE);
- }
+ {
+ /* cast required; change this op to a cast. */
+ (*actParm)->decorated = 0;
+ *actParm = newNode (CAST, newType, *actParm);
+ (*actParm)->lineno = (*actParm)->right->lineno;
+
+ decorateType (*actParm, RESULT_TYPE_NONE);
+ }
return 0;
} /* vararg */
/* if left is a literal then do it */
if (IS_LITERAL (LTYPE (tree)))
- {
- tree->type = EX_VALUE;
- tree->opval.val = valComplement (valFromType (LETYPE (tree)));
- tree->left = NULL;
- TETYPE (tree) = TTYPE (tree) = tree->opval.val->type;
- return tree;
- }
+ {
+ tree->type = EX_VALUE;
+ tree->opval.val = valComplement (valFromType (LETYPE (tree)));
+ tree->left = NULL;
+ TETYPE (tree) = TTYPE (tree) = tree->opval.val->type;
+ return addCast (tree, resultType, TRUE);
+ }
tree->left = addCast (tree->left, resultType, TRUE);
LRVAL (tree) = 1;
COPYTYPE (TTYPE (tree), TETYPE (tree), LTYPE (tree));
goto errorTreeReturn;
}
- {
- sym_link *functype;
- parmNumber = 1;
+ /* if there are parms, make sure that
+ parms are decorate / process / reverse only once */
+ if (!tree->right ||
+ !tree->right->decorated)
+ {
+ sym_link *functype;
+ parmNumber = 1;
- if (IS_CODEPTR(LTYPE(tree)))
- functype = LTYPE (tree)->next;
- else
- functype = LTYPE (tree);
+ if (IS_CODEPTR(LTYPE(tree)))
+ functype = LTYPE (tree)->next;
+ else
+ functype = LTYPE (tree);
- if (processParms (tree->left, FUNC_ARGS(functype),
- &tree->right, &parmNumber, TRUE)) {
- goto errorTreeReturn;
- }
-
- if ((options.stackAuto || IFFUNC_ISREENT (functype)) &&
- !IFFUNC_ISBUILTIN(functype))
- {
- reverseParms (tree->right);
- }
+ if (processParms (tree->left, FUNC_ARGS(functype),
+ &tree->right, &parmNumber, TRUE))
+ {
+ goto errorTreeReturn;
+ }
+
+ if ((options.stackAuto || IFFUNC_ISREENT (functype)) &&
+ !IFFUNC_ISBUILTIN(functype))
+ {
+ reverseParms (tree->right);
+ }
- TTYPE (tree) = functype->next;
- TETYPE (tree) = getSpec (TTYPE (tree));
- }
+ TTYPE (tree) = functype->next;
+ TETYPE (tree) = getSpec (TTYPE (tree));
+ }
return tree;
/*------------------------------------------------------------------*/