travis: fix LEMON
[m6w6/ext-psi] / src / parser_proc.y
index 66d884485260160f2d07dcc3a41b7b5c8d27f304..aa17e4c23b5ef5d6498d6b47007833e51ae3bdeb 100644 (file)
@@ -6,8 +6,32 @@
 
 #include "plist.h"
 #include "parser.h"
+
+/* rename lemon symbols, works better than DEF(%name) */
+#define ParseAlloc psi_parser_proc_init_ex
+#define Parse psi_parser_proc_parse
+#define ParseTrace psi_parser_proc_trace
+#define ParseFree psi_parser_proc_free_ex
+
+/* fwd decls */
+void *ParseAlloc(void *(*mallocProc)(size_t));
+void ParseFree(void *p, void (*freeProc)(void*));
+
+/* wrappers */
+void *psi_parser_proc_init(void)
+{
+       return ParseAlloc(malloc);
+}
+
+void psi_parser_proc_free(void **parser_proc)
+{
+       if (*parser_proc) {
+               ParseFree(*parser_proc, free);
+               *parser_proc = NULL;
+       }
+}
+
 }
-%name psi_parser_proc_
 %token_prefix PSI_T_
 %token_type {struct psi_token *}
 %token_destructor {free($$);}
@@ -476,8 +500,12 @@ decl_arg(arg_) ::= CONST VOID(T) pointers(p) NAME(N). {
  arg_->var->token = N;
  arg_->token = N;
 }
-decl_args ::= .
-decl_args ::= VOID.
+decl_args(args) ::= . {
+ args = NULL;
+}
+decl_args(args) ::= VOID. {
+ args = NULL;
+}
 decl_args(args) ::= decl_arg(arg). {
  args = psi_plist_add(psi_plist_init((psi_plist_dtor) psi_decl_arg_free),
    &arg);
@@ -796,7 +824,9 @@ let_exps(exps) ::= let_exp(exp). {
 let_exps(exps) ::= let_exps(exps_) COMMA let_exp(exp). {
  exps = psi_plist_add(exps_, &exp);
 }
-callback_arg_list ::= .
+callback_arg_list(args) ::= . {
+ args = NULL;
+}
 callback_arg_list(args) ::= callback_args(args_). {
  args = args_;
 }