#include "SDCCmem.h"
#include "SDCCast.h"
#include "port.h"
+#include "newalloc.h"
+#include "SDCCerr.h"
extern int yyerror (char *);
extern FILE *yyin;
int yyint; /* integer value returned */
value *val ; /* for integer constant */
initList *ilist; /* initial list */
- char yyinline[MAX_INLINEASM]; /* inlined assembler code */
+ char *yyinline; /* inlined assembler code */
ast *asts; /* expression tree */
}
%token REENTRANT USING XDATA DATA IDATA PDATA VAR_ARGS CRITICAL NONBANKED BANKED
%token CHAR SHORT INT LONG SIGNED UNSIGNED FLOAT DOUBLE CONST VOLATILE VOID BIT
%token STRUCT UNION ENUM ELIPSIS RANGE FAR _XDATA _CODE _GENERIC _NEAR _PDATA _IDATA _EEPROM
-%token CASE DEFAULT IF ELSE SWITCH WHILE DO FOR GOTO CONTINUE BREAK RETURN
+%token CASE DEFAULT IF ELSE SWITCH WHILE DO FOR GOTO CONTINUE BREAK RETURN
+%token NAKED
%token <yyinline> INLINEASM
%token IFX ADDRESS_OF GET_VALUE_AT_ADDRESS SPIL UNSPIL GETHBIT
%token BITWISEAND UNARYMINUS IPUSH IPOP PCALL ENDFUNCTION JUMPTABLE
$$->class = SPECIFIER ;
SPEC_CRTCL($$) = 1;
}
+ | NAKED { $$ = newLink ();
+ $$->class = SPECIFIER ;
+ SPEC_NAKED($$) = 1;
+ }
| NONBANKED {$$ = newLink ();
$$->class = SPECIFIER ;
SPEC_NONBANKED($$) = 1;
| SHORT {
$$=newLink();
$$->class = SPECIFIER ;
- SPEC_LONG($$) = 0 ;
- SPEC_SHORT($$) = 1 ;
+ SPEC_SHORT($$) = 1 ;
}
| INT {
$$=newLink();
| LONG {
$$=newLink();
$$->class = SPECIFIER ;
- SPEC_LONG($$) = 1 ;
- SPEC_SHORT($$) = 0;
+ SPEC_LONG($$) = 1 ;
}
| SIGNED {
$$=newLink();
$$->class = SPECIFIER ;
- SPEC_USIGN($$) = 0 ;
+ SPEC_SIGNED($$) = 1 ;
}
| UNSIGNED {
$$=newLink();
$$->class = SPECIFIER ;
- SPEC_USIGN($$) = 1 ;
+ SPEC_USIGN($$) = 1 ;
}
| VOID {
$$=newLink();
| CONST {
$$=newLink();
$$->class = SPECIFIER ;
- SPEC_SCLS($$) = S_CONSTANT ;
+ //SPEC_SCLS($$) = S_CONSTANT ;
SPEC_CONST($$) = 1;
}
| VOLATILE {
{
symbol *sym;
sym_link *p ;
-
sym = findSym(TypedefTab,NULL,$1) ;
$$ = p = copyLinkChain(sym->type);
SPEC_TYPEDEF(getSpec(p)) = 0;
if (!sym->type) {
sym->type = copyLinkChain($1);
sym->etype = getSpec(sym->type);
+ /* make sure the type is complete and sane */
+ checkTypeSanity(sym->etype, sym->name);
}
else
addDecl (sym,0,cloneSpec($1));
-
}
$$ = $2;
}
{
werror(E_OLD_STYLE,$1->name) ;
- /* assume it returns an it */
+ /* assume it returns an int */
$1->type = $1->etype = newIntLink();
$$ = $1 ;
}
| jump_statement
| INLINEASM ';' {
ast *ex = newNode(INLINEASM,NULL,NULL);
- ALLOC(ex->values.inlineasm,strlen($1));
+ ex->values.inlineasm = Safe_calloc(1,strlen($1)+1);
strcpy(ex->values.inlineasm,$1);
$$ = ex;
}