pike.git/
src/
language.yacc
Branch:
Tag:
Non-build tags
All tags
No tags
1999-11-23
1999-11-23 03:06:35 by Henrik Grubbström (Grubba) <grubba@grubba.org>
1d73ef635c72a1960948ef7f80d0049fec6bb1a1 (
31
lines) (+
24
/-
7
)
[
Show
|
Annotate
]
Branch:
7.9
Added soft casts.
Rev: src/language.yacc:1.136
75:
%token F_SWITCH F_SSCANF F_CATCH %token F_CAST
+
%token F_SOFT_CAST
%token F_FOREACH %token F_SIZEOF F_SIZEOF_LOCAL
183:
/* This is the grammar definition of Pike. */ #include "global.h"
-
RCSID("$Id: language.yacc,v 1.
135
1999/11/
21
18
:
52
:
12
grubba Exp $");
+
RCSID("$Id: language.yacc,v 1.
136
1999/11/
23
03
:
06
:
35
grubba Exp $");
#ifdef HAVE_MEMORY_H #include <memory.h> #endif
307:
%type <n> number_or_minint %type <n> number_or_maxint %type <n> cast
+
%type <n> soft_cast
%type <n> simple_type %type <n> simple_type2 %type <n> simple_identifier_type
776:
| F_INLINE { $$ = ID_INLINE; } ;
-
modifiers: modifier_list { $$=current_modifiers=$1 | lex.pragmas; } ;
+
modifiers: modifier_list
+
{
+
$$=current_modifiers=$1 |
(
lex.pragmas
& ID_MODIFIER_MASK)
;
+
}
+
;
modifier_list: /* empty */ { $$ = 0; } | modifier modifier_list { $$ = $1 | $2; }
794:
} ;
+
soft_cast: '[' type ']'
+
{
+
struct pike_string *s=compiler_pop_type();
+
$$=mkstrnode(s);
+
free_string(s);
+
}
+
;
+
type6: type | identifier_type ; type: type '*' { push_type(T_ARRAY); }
1666:
$$=mkcastnode($1->u.sval.u.string,$2); free_node($1); }
+
| soft_cast expr2
+
{
+
$$=mksoftcastnode($1->u.sval.u.string,$2);
+
free_node($1);
+
}
| F_INC expr4 { $$=mknode(F_INC,$2,0); } | F_DEC expr4 { $$=mknode(F_DEC,$2,0); } | F_NOT expr2 { $$=mkopernode("`!",$2,0); }
2040:
$$=mklocalnode(islocal($2->u.sval.u.string),0); free_node($2); }
-
| bad_
lvalue
+
| bad_
expr_ident
{ $$=mknewintnode(0); } ; low_lvalue_list: lvalue lvalue_list { $$=mknode(F_LVALUE_LIST,$1,$2); }
2069:
*/ /* FIXME: Should probably set last_identifier. */
-
bad_identifier: bad_
lvalue
+
bad_identifier: bad_
expr_ident
| F_CLASS { yyerror("class is a reserved word."); }
-
;
-
-
bad_lvalue: bad_expr_ident
+
| F_ARRAY_ID { yyerror("array is a reserved word."); } | F_FLOAT_ID