SPEC_BSTR (dest) |= SPEC_BSTR (src);
SPEC_TYPEDEF (dest) |= SPEC_TYPEDEF (src);
SPEC_ENUM (dest) |= SPEC_ENUM (src);
-
+ if (SPEC_ARGREG(src) && !SPEC_ARGREG(dest))
+ SPEC_ARGREG(dest) = SPEC_ARGREG(src);
+
if (IS_STRUCT (dest) && SPEC_STRUCT (dest) == NULL)
SPEC_STRUCT (dest) = SPEC_STRUCT (src);
sym_link *type, *etype;
sym_link *petype = getSpec (stype);
- if (!fields || !id)
- return NULL;
+ if (fields && id) {
+
+ /* look for the id */
+ while (fields)
+ {
+ if (strcmp (fields->rname, id->name) == 0)
+ {
+ type = copyLinkChain (fields->type);
+ etype = getSpec (type);
+ SPEC_SCLS (etype) = (SPEC_SCLS (petype) == S_REGISTER ?
+ SPEC_SCLS (etype) : SPEC_SCLS (petype));
+ return type;
+ }
+ fields = fields->next;
+ }
+ }
- /* look for the id */
- while (fields)
- {
- if (strcmp (fields->rname, id->name) == 0)
- {
- type = copyLinkChain (fields->type);
- etype = getSpec (type);
- SPEC_SCLS (etype) = (SPEC_SCLS (petype) == S_REGISTER ?
- SPEC_SCLS (etype) : SPEC_SCLS (petype));
- return type;
- }
- fields = fields->next;
- }
werror (E_NOT_MEMBER, id->name);
-
- return NULL;
+
+ // the show must go on
+ return newIntLink();
}
/*------------------------------------------------------------------*/
/* change it to pointer to the same type */
while (val)
{
+ int argreg = 0;
/* mark it as a register parameter if
the function does not have VA_ARG
and as port dictates */
if (!IFFUNC_HASVARARGS(funcType) &&
- (*port->reg_parm) (val->type))
+ (argreg = (*port->reg_parm) (val->type)))
{
SPEC_REGPARM (val->etype) = 1;
+ SPEC_ARGREG(val->etype) = argreg;
} else if (IFFUNC_ISREENT(funcType)) {
FUNC_HASSTACKPARM(funcType) = 1;
}
fprintf (of, "unsigned ");
if (SPEC_CONST (type))
fprintf (of, "const ");
-
switch (SPEC_NOUN (type))
{
case V_INT: