Added alternate lexer
[fw/sdcc] / src / SDCCast.c
index 0519df698c11019670dec4aa08488e7885a877c2..cfa68e040219774a5e2e6f8444d669321787e816 100644 (file)
@@ -630,7 +630,7 @@ ast *createIvalStruct (ast *sym,link *type,initList *ilist)
        sflds->implicit = 1;
        lAst = newNode(PTR_OP,newNode('&',sym,NULL),newAst(EX_VALUE,symbolVal(sflds)));
        lAst = decorateType(resolveSymbols(lAst));
-       rast = createIval (lAst, sflds->type, iloop,rast);
+       rast = decorateType(resolveSymbols(createIval (lAst, sflds->type, iloop,rast)));
     }
     return rast ;
 }
@@ -653,7 +653,7 @@ ast *createIvalArray (ast  *sym, link *type, initList *ilist)
                                       type,
                                       decorateType(resolveSymbols(list2expr(ilist))))))
            
-           return rast;
+           return decorateType(resolveSymbols(rast));
     
     /* not the special case             */
     if (ilist->type != INIT_DEEP) {
@@ -689,7 +689,7 @@ ast *createIvalArray (ast  *sym, link *type, initList *ilist)
     if (!DCL_ELEM(type))
        DCL_ELEM(type) = size;
     
-    return rast;
+    return decorateType(resolveSymbols(rast));
 }
 
 
@@ -734,7 +734,7 @@ ast *createIvalCharPtr (ast *sym, link *type, ast *iexpr)
                                   newNode('[', sym,
                                           newAst(EX_VALUE,valueFromLit(i))),
                                   newAst(EX_VALUE,valueFromLit(*s))));
-       return rast;
+       return decorateType(resolveSymbols(rast));
     }
 
     return NULL ;
@@ -788,9 +788,9 @@ ast  *createIval  (ast *sym, link *type, initList *ilist, ast *wid)
                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)) ;
 }
 
 /*-----------------------------------------------------------------*/
@@ -2793,14 +2793,20 @@ ast *backPatchLabels (ast *tree, symbol *trueLabel, symbol *falseLabel )
     
     /* 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 ;
     }
     
@@ -3537,8 +3543,9 @@ ast  *createFunction   (symbol  *name,   ast  *body )
           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);
@@ -3582,7 +3589,7 @@ ast  *createFunction   (symbol  *name,   ast  *body )
        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 */
@@ -3632,7 +3639,7 @@ ast  *createFunction   (symbol  *name,   ast  *body )
     addSet(&operKeyReset,name);
     applyToSet(operKeyReset,resetParmKey);
        
-    if (options.debug)
+    if (options.debug && !options.nodebug)
        cdbStructBlock(1,cdbFile);
 
     cleanUpLevel(LabelTab,0);