return 0;
}
+#if 0
+/* this functions seems to be superfluous?! kmh */
+
/*-----------------------------------------------------------------*/
/* resolveFromTable - will return the symbal table value */
/*-----------------------------------------------------------------*/
return val;
}
+#endif
/*-----------------------------------------------------------------*/
/* funcOfType :- function of type with name */
actParm->ftype= defParm->type;
}
- actParm->argSym = resolveFromTable(defParm)->sym ;
+/* actParm->argSym = resolveFromTable(defParm)->sym ; */
+ actParm->argSym = defParm->sym;
/* make a copy and change the regparm type to the defined parm */
actParm->etype = getSpec(actParm->ftype = copyLinkChain(actParm->ftype));
SPEC_REGPARM(actParm->etype) = SPEC_REGPARM(defParm->etype);
+ (*parmNumber)++;
return 0;
}
/*-----------------------------------------------------------------*/
ilist = ilist->init.deep ;
iExpr = decorateType(resolveSymbols(list2expr(ilist)));
- return newNode('=',sym,iExpr);
+ return decorateType(newNode('=',sym,iExpr));
}
/*-----------------------------------------------------------------*/
if (!iloop)
break;
sflds->implicit = 1;
- lAst = decorateType(resolveSymbols(newNode('.',sym,
- newAst(EX_VALUE,symbolVal(sflds)))));
- rast = createIval (lAst, sflds->type, iloop,rast);
+ lAst = newNode(PTR_OP,newNode('&',sym,NULL),newAst(EX_VALUE,symbolVal(sflds)));
+ lAst = decorateType(resolveSymbols(lAst));
+ rast = decorateType(resolveSymbols(createIval (lAst, sflds->type, iloop,rast)));
}
return rast ;
}
type,
decorateType(resolveSymbols(list2expr(ilist))))))
- return rast;
+ return decorateType(resolveSymbols(rast));
/* not the special case */
if (ilist->type != INIT_DEEP) {
if (!DCL_ELEM(type))
DCL_ELEM(type) = size;
- return rast;
+ return decorateType(resolveSymbols(rast));
}
newNode('[', sym,
newAst(EX_VALUE,valueFromLit(i))),
newAst(EX_VALUE,valueFromLit(*s))));
- return rast;
+ return decorateType(resolveSymbols(rast));
}
return NULL ;
if (IS_SPEC(type))
rast = createIvalType (sym,type,ilist);
if ( wid )
- return newNode(NULLOP,wid,rast);
+ return decorateType(resolveSymbols(newNode(NULLOP,wid,rast)));
else
- return rast ;
+ return decorateType(resolveSymbols(rast)) ;
}
/*-----------------------------------------------------------------*/
-/* initAggregates - initialises aggregate variables with initv */
+/* initAggregates - initialises aggregate variables with initv */
/*-----------------------------------------------------------------*/
ast *initAggregates ( symbol *sym, initList *ival, ast *wid)
{
}
if (SPEC_SCLS(tree->left->etype) == S_CODE) {
DCL_TYPE(p) = CPOINTER ;
- DCL_PTR_CONST(p) = 1;
+ DCL_PTR_CONST(p) = port->mem.code_ro;
}
else
if (SPEC_SCLS(tree->left->etype) == S_XDATA)
if (SPEC_SCLS(tree->left->etype) == S_IDATA)
DCL_TYPE(p) = IPOINTER ;
else
- if (SPEC_SCLS(tree->left->etype) == S_FLASH)
- DCL_TYPE(p) = FLPOINTER ;
+ if (SPEC_SCLS(tree->left->etype) == S_EEPROM)
+ DCL_TYPE(p) = EEPPOINTER ;
else
DCL_TYPE(p) = POINTER ;
return tree;
}
LRVAL(tree) = RRVAL(tree) = 1;
- COPYTYPE(TTYPE(tree),TETYPE(tree),LTYPE(tree));
+ if (IS_LITERAL(LTYPE(tree)) && !IS_LITERAL(RTYPE(tree))) {
+ COPYTYPE(TTYPE(tree),TETYPE(tree),RTYPE(tree));
+ } else {
+ COPYTYPE(TTYPE(tree),TETYPE(tree),LTYPE(tree));
+ }
return tree ;
/*------------------------------------------------------------------*/
/* change not */
if (IS_NOT(tree)) {
+ int wasnot = IS_NOT(tree->left);
tree->left = backPatchLabels (tree->left,falseLabel,trueLabel);
/* if the left is already a IFX */
if ( ! IS_IFX(tree->left) )
tree->left = newNode (IFX,tree->left,NULL);
- tree->left->trueLabel = falseLabel ;
- tree->left->falseLabel= trueLabel ;
+ if (wasnot) {
+ tree->left->trueLabel = trueLabel ;
+ tree->left->falseLabel= falseLabel ;
+ } else {
+ tree->left->trueLabel = falseLabel ;
+ tree->left->falseLabel= trueLabel ;
+ }
return tree->left ;
}
we need to add the name to the publics list : this
actually means we are now compiling the compiler
support routine */
- if (name->cdef)
+ if (name->cdef) {
addSet(&publics,name);
+ }
}
else {
addSymChain(name);
name->stack = SPEC_STAK(fetype) = stack;
/* name needs to be mangled */
- sprintf (name->rname,"_%s",name->name);
+ sprintf (name->rname,"%s%s", port->fun_prefix, name->name);
body = resolveSymbols(body); /* resolve the symbols */
body = decorateType (body); /* propagateType & do semantic checks */
addSet(&operKeyReset,name);
applyToSet(operKeyReset,resetParmKey);
- if (options.debug)
+ if (options.debug && !options.nodebug)
cdbStructBlock(1,cdbFile);
cleanUpLevel(LabelTab,0);