%extra_argument {PSI_Parser *P}
/* TOKEN is defined inside syntax_error */
%syntax_error {
- PSI_ParserSyntaxError(P, P->fn, P->line, "Unexpected token '%s'", TOKEN->text);
+ PSI_ParserSyntaxError(P, P->psi.file.fn, P->line, "Unexpected token '%s'", TOKEN->text);
}
%nonassoc NAME.
block ::= COMMENT.
block ::= LIB(T) QUOTED_STRING(libname) EOS. {
- if (P->lib) {
- PSI_ParserSyntaxError(P, P->fn, T->line, "Extra 'lib %s' statement has no effect", libname->text);
+ if (P->psi.file.ln) {
+ PSI_ParserSyntaxError(P, P->psi.file.ln, T->line, "Extra 'lib %s' statement has no effect", libname->text);
} else {
- P->lib = strndup(libname->text + 1, libname->size - 2);
+ P->psi.file.ln = strndup(libname->text + 1, libname->size - 2);
}
free(libname);
free(T);
type_ = init_decl_type(T->type, T->text);
free(T);
}
-decl_type(type_) ::= CHAR(T). {
- type_ = init_decl_type(T->type, T->text);
- free(T);
-}
-decl_type(type_) ::= SHORT(T). {
- type_ = init_decl_type(T->type, T->text);
- free(T);
-}
-decl_type(type_) ::= INT(T). {
- type_ = init_decl_type(T->type, T->text);
- free(T);
-}
-decl_type(type_) ::= LONG(T). {
- type_ = init_decl_type(T->type, T->text);
- free(T);
-}
decl_type(type_) ::= FLOAT(T). {
type_ = init_decl_type(T->type, T->text);
free(T);
type_ = init_decl_type(T->type, T->text);
free(T);
}
-decl_type(type_) ::= SIZE_T(T). {
- type_ = init_decl_type(T->type, T->text);
+/* we have to support plain int here because we have it in our lexer rules */
+decl_type(type_) ::= INT(T). {
+ type_ = init_decl_type(PSI_T_NAME, T->text);
free(T);
}
-decl_type(type_) ::= SINT8(T). {
+decl_type(type_) ::= INT8(T). {
type_ = init_decl_type(T->type, T->text);
free(T);
}
type_ = init_decl_type(T->type, T->text);
free(T);
}
-decl_type(type_) ::= SINT16(T). {
+decl_type(type_) ::= INT16(T). {
type_ = init_decl_type(T->type, T->text);
free(T);
}
type_ = init_decl_type(T->type, T->text);
free(T);
}
-decl_type(type_) ::= SINT32(T). {
+decl_type(type_) ::= INT32(T). {
type_ = init_decl_type(T->type, T->text);
free(T);
}
type_ = init_decl_type(T->type, T->text);
free(T);
}
-decl_type(type_) ::= SINT64(T). {
+decl_type(type_) ::= INT64(T). {
type_ = init_decl_type(T->type, T->text);
free(T);
}
%type impl_def_val {impl_def_val*}
%destructor impl_def_val {free_impl_def_val($$);}
impl_def_val(def) ::= NULL(T). {
- def = init_impl_def_val(T);
+ def = init_impl_def_val(T->type, T->text);
free(T);
}
impl_def_val(def) ::= NUMBER(T). {
- def = init_impl_def_val(T);
+ def = init_impl_def_val(T->type, T->text);
free(T);
}
impl_def_val(def) ::= TRUE(T). {
- def = init_impl_def_val(T);
+ def = init_impl_def_val(T->type, T->text);
free(T);
}
impl_def_val(def) ::= FALSE(T). {
- def = init_impl_def_val(T);
+ def = init_impl_def_val(T->type, T->text);
free(T);
}
impl_def_val(def) ::= QUOTED_STRING(T). {
- def = init_impl_def_val(T);
+ def = init_impl_def_val(T->type, T->text);
free(T);
}
set_value(val) ::= set_func(func) LPAREN decl_vars(vars) RPAREN. {
val = init_set_value(func, vars);
}
+set_value(val) ::= set_func(func_) LPAREN decl_vars(vars_) COMMA set_vals(vals) RPAREN. {
+ val = vals;
+ val->func = func_;
+ val->vars = vars_;
+}
+%type set_vals {set_value*}
+%destructor set_vals {free_set_value($$);}
+set_vals(vals) ::= set_value(val). {
+ vals = add_inner_set_value(init_set_value(NULL, NULL), val);
+}
+set_vals(vals) ::= set_vals(vals_) COMMA set_value(val). {
+ vals = add_inner_set_value(vals_, val);
+}
%type set_func {set_func*}
%destructor set_func {free_set_func($$);}
%type return_stmt {return_stmt*}
%destructor return_stmt {free_return_stmt($$);}
-return_stmt(ret) ::= RETURN set_func(func) LPAREN decl_var(var) RPAREN EOS. {
- ret = init_return_stmt(func, var);
+return_stmt(ret) ::= RETURN set_value(val) EOS. {
+ ret = init_return_stmt(val);
}
%type free_stmt {free_stmt*}