aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2007-03-31 11:12:40 +0000
committerSergey Poznyakoff <gray@gnu.org.ua>2007-03-31 11:12:40 +0000
commit047b5057198629db139aeff7cbf467b7307f9149 (patch)
tree6039e4676a7f2ea911ba1a534ae5c895e1797510
parent3b5b083541ca2deda2fca7558e27eda84b45dd00 (diff)
downloadmailfromd-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.y48
1 files changed, 31 insertions, 17 deletions
diff --git a/src/gram.y b/src/gram.y
index 93dd4b9c..b69be00b 100644
--- a/src/gram.y
+++ b/src/gram.y
@@ -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 (!$$) {

Return to:

Send suggestions and report system problems to the System administrator.