diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2007-03-31 11:12:40 +0000 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2007-03-31 11:12:40 +0000 |
commit | 047b5057198629db139aeff7cbf467b7307f9149 (patch) | |
tree | 6039e4676a7f2ea911ba1a534ae5c895e1797510 | |
parent | 3b5b083541ca2deda2fca7558e27eda84b45dd00 (diff) | |
download | mailfromd-047b5057198629db139aeff7cbf467b7307f9149.tar.gz mailfromd-047b5057198629db139aeff7cbf467b7307f9149.tar.bz2 |
Update svn:ignore
git-svn-id: file:///svnroot/mailfromd/trunk@1325 7a8a7f39-df28-0410-adc6-e0d955640f24
-rw-r--r-- | src/gram.y | 48 |
1 files changed, 31 insertions, 17 deletions
@@ -348,7 +348,7 @@ static void register_macro(enum smtp_state tag, const char *macro); %type <ret> triplet maybe_triplet %type <poll> pollstmt pollarglist %type <pollarg> pollarg -%type <number> number +%type <number> number dimension %type <arglist> arglist %type <var> variable %type <literal> string @@ -433,12 +433,12 @@ decl : PROG state_ident DO stmtlist DONE } ; -vardecl : TYPE IDENTIFIER +vardecl : TYPE IDENTIFIER dimension { if (!vardecl($2->text, $1, storage_extern, NULL)) YYERROR; } - | TYPE IDENTIFIER expr + | TYPE IDENTIFIER dimension expr { struct value value; struct variable *var; @@ -448,16 +448,16 @@ vardecl : TYPE IDENTIFIER YYERROR; if (optimization_level) - optimize($3); - value.type = node_type($3); + optimize($4); + value.type = node_type($4); - switch ($3->type) { + switch ($4->type) { case node_type_string: - value.v.literal = $3->v.literal; + value.v.literal = $4->v.literal; break; case node_type_number: - value.v.number = $3->v.number; + value.v.number = $4->v.number; break; default: @@ -465,7 +465,7 @@ vardecl : TYPE IDENTIFIER YYERROR; } - if (initialize_variable(var, &value, &$3->locus)) + if (initialize_variable(var, &value, &$4->locus)) YYERROR; } | SET IDENTIFIER expr @@ -494,6 +494,20 @@ vardecl : TYPE IDENTIFIER } ; +dimension : /* empty */ + { + $$ = -1; + } + | '[' ']' + { + $$ = 0; + } + | '[' number ']' + { + $$ = $2; + } + ; + constdecl : CONST IDENTIFIER expr { struct value value; @@ -601,7 +615,7 @@ retdecl : /* empty */ { $$ = dtype_unspecified; } - | RETURNS TYPE + | RETURNS TYPE dimension { $$ = $2; } @@ -654,10 +668,10 @@ stmt : condition | constdecl ; -asgn : SET IDENTIFIER expr +asgn : SET IDENTIFIER dimension expr { struct variable *var; - data_type_t t = node_type($3); + data_type_t t = node_type($4); if (t == dtype_unspecified) { parse_error("unspecified value not ignored as " @@ -671,25 +685,25 @@ asgn : SET IDENTIFIER expr if (!var) YYERROR; } - $$ = create_asgn_node(var, $3, &$1); + $$ = create_asgn_node(var, $4, &$1); if (!$$) YYERROR; } ; -autodcl : TYPE IDENTIFIER +autodcl : TYPE IDENTIFIER dimension { if (!vardecl($2->text, $1, storage_auto, NULL)) YYERROR; $$ = NULL; } - | TYPE IDENTIFIER expr + | TYPE IDENTIFIER dimension expr { struct variable *var = vardecl($2->text, $1, storage_auto, NULL); if (!var) YYERROR; - $$ = create_asgn_node(var, $3, get_locus()); + $$ = create_asgn_node(var, $4, get_locus()); if (!$$) YYERROR; } @@ -1379,7 +1393,7 @@ arglist : expr } ; -variable : VARIABLE +variable : VARIABLE dimension { $$ = variable_lookup($1->text); if (!$$) { |