get rid of weird lemon symbols
authorMichael Wallner <mike@php.net>
Wed, 1 Feb 2017 11:30:32 +0000 (12:30 +0100)
committerMichael Wallner <mike@php.net>
Wed, 1 Feb 2017 11:30:32 +0000 (12:30 +0100)
Makefile.frag
src/parser.re
src/parser_def.h
src/parser_proc.inc
src/parser_proc.y

index d192749f055844e19afee4154f5af134d02b504f..ff6460b7d4d85e27f0790ea46691bc3f10d25f60 100644 (file)
@@ -19,7 +19,6 @@ psi-build-headers: $(PHP_PSI_HEADERS)
 .PHONY: psi-clean-headers
 psi-clean-headers:
        -rm -f $(PHP_PSI_HEADERS)
-       -rmdir $(PHP_PSI_BUILDDIR)/types
 
 .PHONY: psi-clean-sources
 psi-clean-sources:
index 7ed66288285728324a2757bc8d4c33de2b4e578e..b56385d49e0f42c5e7a4d4ed32b6485f9eeb6c22 100644 (file)
@@ -4,10 +4,10 @@
 
 #include "parser.h"
 
-void *psi_parser_proc_Alloc(void*(unsigned long));
-void psi_parser_proc_Free(void*, void(*)(void*));
-void psi_parser_proc_(void *, token_t, struct psi_token *, struct psi_parser *);
-void psi_parser_proc_Trace(FILE *, const char*);
+void *psi_parser_proc_init(void);
+void psi_parser_proc_free(void **parser_proc);
+void psi_parser_proc_parse(void *parser_proc, token_t r, struct psi_token *token, struct psi_parser *parser);
+void psi_parser_proc_trace(FILE *out, char *prefix);
 
 struct psi_parser *psi_parser_init(struct psi_parser *P, psi_error_cb error, unsigned flags)
 {
@@ -20,10 +20,10 @@ struct psi_parser *psi_parser_init(struct psi_parser *P, psi_error_cb error, uns
 
        P->col = 1;
        P->line = 1;
-       P->proc = psi_parser_proc_Alloc(malloc);
+       P->proc = psi_parser_proc_init();
 
        if (flags & PSI_DEBUG) {
-               psi_parser_proc_Trace(stderr, "PSI> ");
+               psi_parser_proc_trace(stderr, "PSI> ");
        }
 
        return P;
@@ -152,15 +152,15 @@ static ssize_t psi_parser_fill(struct psi_parser *P, size_t n)
 void psi_parser_parse(struct psi_parser *P, struct psi_token *T)
 {
        if (T) {
-               psi_parser_proc_(P->proc, T->type, T, P);
+               psi_parser_proc_parse(P->proc, T->type, T, P);
        } else {
-               psi_parser_proc_(P->proc, 0, NULL, P);
+               psi_parser_proc_parse(P->proc, 0, NULL, P);
        }
 }
 
 void psi_parser_dtor(struct psi_parser *P)
 {
-       psi_parser_proc_Free(P->proc, free);
+       psi_parser_proc_free(&P->proc);
 
        switch (P->input.type) {
        case PSI_PARSE_FILE:
index 05489e73bd6c3e81d78822018c84f019f8628d18..5d6a84a729e1a7f1a5ae542279b9bef3ff6066db 100644 (file)
@@ -62,7 +62,6 @@
 # define TOKEN_DTOR(token, dtor)
 #endif
 
-DEF(%name, psi_parser_proc_)
 DEF(%token_prefix, PSI_T_)
 DEF(%token_type, {struct psi_token *})
 DEF(%token_destructor, {free($$);})
index 9bd05e5118873c3ad3ac03ff8ce7eff9ef2ad693..5e2128c13c68b9aee7406acc153cced50ffa9c35 100644 (file)
@@ -6,4 +6,29 @@
 
 #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;
+       }
+}
+
 }
index 66d884485260160f2d07dcc3a41b7b5c8d27f304..15407e0df03bbc1bc5281a1b9978eaf48e493c41 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($$);}