%token <yychar> IDENTIFIER TYPE_NAME
%token <val> CONSTANT STRING_LITERAL
-%token SIZEOF
+%token SIZEOF TYPEOF
%token PTR_OP INC_OP DEC_OP LEFT_OP RIGHT_OP LE_OP GE_OP EQ_OP NE_OP
%token AND_OP OR_OP
%token <yyint> MUL_ASSIGN DIV_ASSIGN MOD_ASSIGN ADD_ASSIGN
%token CHAR SHORT INT LONG SIGNED UNSIGNED FLOAT DOUBLE CONST VOLATILE VOID BIT
%token STRUCT UNION ENUM ELIPSIS RANGE FAR
%token CASE DEFAULT IF ELSE SWITCH WHILE DO FOR GOTO CONTINUE BREAK RETURN
-%token NAKED
+%token NAKED JAVANATIVE OVERLAY
%token <yyinline> INLINEASM
%token IFX ADDRESS_OF GET_VALUE_AT_ADDRESS SPIL UNSPIL GETHBIT
%token BITWISEAND UNARYMINUS IPUSH IPOP PCALL ENDFUNCTION JUMPTABLE
$$ = newLink() ;
$$->class = SPECIFIER ;
FUNC_REGBANK($$) = (int) floatFromVal($2);
- //FUNC_RBANK($$) = 1;
}
| REENTRANT { $$ = newLink ();
$$->class = SPECIFIER ;
$$->class = SPECIFIER ;
FUNC_ISNAKED($$)=1;
}
+ | JAVANATIVE { $$ = newLink ();
+ $$->class = SPECIFIER ;
+ FUNC_ISJAVANATIVE($$)=1;
+ }
+ | OVERLAY { $$ = newLink ();
+ $$->class = SPECIFIER ;
+ FUNC_ISOVERLAY($$)=1;
+ }
| NONBANKED {$$ = newLink ();
$$->class = SPECIFIER ;
FUNC_NONBANKED($$) = 1;
| unary_operator cast_expr { $$ = newNode($1,$2,NULL) ; }
| SIZEOF unary_expr { $$ = newNode(SIZEOF,NULL,$2); }
| SIZEOF '(' type_name ')' { $$ = newAst_VALUE(sizeofOp($3)); }
+ | TYPEOF unary_expr { $$ = newNode(TYPEOF,NULL,$2); }
;
unary_operator
enum_specifier
: ENUM '{' enumerator_list '}' {
- addSymChain ($3);
- allocVariables(reverseSyms($3)) ;
+ //addSymChain ($3);
+ //allocVariables(reverseSyms($3)) ;
$$ = copyLinkChain(cenum->type);
}
| ENUM identifier '{' enumerator_list '}' {
werror(E_DUPLICATE_TYPEDEF,csym->name);
addSym ( enumTab,$2,$2->name,$2->level,$2->block, 0);
- addSymChain ($4);
- allocVariables (reverseSyms($4));
+ //addSymChain ($4);
+ //allocVariables (reverseSyms($4));
$$ = copyLinkChain(cenum->type);
SPEC_SCLS(getSpec($$)) = 0 ;
}
;
enumerator
- : identifier opt_assign_expr {
- /* make the symbol one level up */
- $1->level-- ;
- $1->type = copyLinkChain($2->type);
- $1->etype= getSpec($1->type);
- SPEC_ENUM($1->etype) = 1;
- $$ = $1 ;
-
- }
+ : identifier opt_assign_expr
+ {
+ /* make the symbol one level up */
+ $1->level-- ;
+ $1->type = copyLinkChain($2->type);
+ $1->etype= getSpec($1->type);
+ SPEC_ENUM($1->etype) = 1;
+ $$ = $1 ;
+ // do this now, so we can use it for the next enums in the list
+ addSymChain($1);
+ }
;
opt_assign_expr
declarator2_function_attributes
: declarator2 { $$ = $1 ; }
| declarator2 function_attribute {
- // do the functionAttributes (not the args and hasVargs !!)
+ // copy the functionAttributes (not the args and hasVargs !!)
sym_link *funcType=$1->etype;
struct value *args=FUNC_ARGS(funcType);
unsigned hasVargs=FUNC_HASVARARGS(funcType);
{
$$ = $1 ;
$$->next = $2 ;
- DCL_TYPE($2)=GPOINTER;
+ DCL_TYPE($2)=port->unqualified_pointer;
}
| unqualified_pointer type_specifier_list pointer
{
DCL_TYPE($3) = EEPPOINTER;
break;
default:
- werror(W_PTR_TYPE_INVALID);
+ // this could be just "constant"
+ // werror(W_PTR_TYPE_INVALID);
}
}
else