/*-----------------------------------------------------------------*/
/* reverseParms - will reverse a parameter tree */
/*-----------------------------------------------------------------*/
-void
+static void
reverseParms (ast * ptree)
{
ast *ttree;
if (IS_PTR(ftype) && !IS_GENPTR(ftype))
{
newType = newAst_LINK (copyLinkChain(ftype));
- DCL_TYPE (newType->opval.lnk) = GPOINTER;
+ DCL_TYPE (newType->opval.lnk) = port->unqualified_pointer;
}
if (IS_AGGREGATE (ftype))
{
newType = newAst_LINK (copyLinkChain (ftype));
- DCL_TYPE (newType->opval.lnk) = GPOINTER;
+ DCL_TYPE (newType->opval.lnk) = port->unqualified_pointer;
}
if (newType)
{
/*-----------------------------------------------------------------*/
/* initAggregates - initialises aggregate variables with initv */
/*-----------------------------------------------------------------*/
-
-/* this has to go */ void printIval (symbol *, sym_link *, initList *, FILE *);
-
ast * initAggregates (symbol * sym, initList * ival, ast * wid) {
- ast *ast;
- symbol *newSym;
-
- if (getenv("TRY_THE_NEW_INITIALIZER")) {
-
- if (!TARGET_IS_MCS51 || !(options.model==MODEL_LARGE)) {
- fprintf (stderr, "Can't \"TRY_THE_NEW_INITIALIZER\" unless "
- "with -mmcs51 and --model-large\n");
- exit(404);
- }
-
- if (SPEC_OCLS(sym->etype)==xdata &&
- getSize(sym->type) > 16) { // else it isn't worth it: do it the old way
-
- // copy this symbol
- newSym=copySymbol (sym);
- SPEC_OCLS(newSym->etype)=code;
- sprintf (newSym->name, "%s_init__", sym->name);
- sprintf (newSym->rname,"%s_init__", sym->rname);
- addSym (SymbolTab, newSym, newSym->name, 0, 0, 1);
-
- // emit it in the static segment
- addSet(&statsg->syms, newSym);
-
- // now memcpy() the entire array from cseg
- ast=newNode (ARRAYINIT, // ASSIGN_AGGREGATE
- newAst_VALUE (symbolVal (sym)),
- newAst_VALUE (symbolVal (newSym)));
- return decorateType(resolveSymbols(ast));
- }
- }
-
return createIval (newAst_VALUE (symbolVal (sym)), sym->type, ival, wid);
}
(tree->right->type == EX_VALUE ?
tree->right->opval.val : NULL));
TETYPE (tree) = getSpec (TTYPE (tree));
+
+ /* adjust the storage class */
+ switch (DCL_TYPE(tree->left->ftype)) {
+ case POINTER:
+ break;
+ case FPOINTER:
+ SPEC_SCLS(TETYPE(tree)) = S_XDATA;
+ break;
+ case CPOINTER:
+ SPEC_SCLS(TETYPE(tree)) = S_CODE;
+ break;
+ case GPOINTER:
+ break;
+ case PPOINTER:
+ SPEC_SCLS(TETYPE(tree)) = S_XSTACK;
+ break;
+ case IPOINTER:
+ SPEC_SCLS(TETYPE(tree)) = S_IDATA;
+ break;
+ case EEPPOINTER:
+ SPEC_SCLS(TETYPE(tree)) = S_EEPROM;
+ break;
+ case UPOINTER:
+ case ARRAY:
+ case FUNCTION:
+ }
+
return tree;
/*------------------------------------------------------------------*/
/* we are done freeup memory & cleanup */
noLineno--;
- labelKey = 1;
+ if (port->reset_labelKey) labelKey = 1;
name->key = 0;
FUNC_HASBODY(name->type) = 1;
addSet (&operKeyReset, name);