We can use this later for step-wise migration towards a parser that
handles the complete patch, not just an expression at a time.
---
src/Makefile | 1 +
src/compiler/fpvm.c | 3 ++-
src/compiler/parser.y | 2 +-
src/compiler/parser_helper.c | 6 ++++--
src/compiler/parser_helper.h | 2 +-
5 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/src/Makefile b/src/Makefile
index d96d028..410d3b9 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -88,6 +88,7 @@ bandfilters.h: bandfilters.sce
compiler/parser.h: compiler/parser.c
obj/compiler/scanner.o: compiler/parser.h
obj/compiler/parser_helper.o: compiler/parser.h
+obj/compiler/fpvm.o: compiler/parser.h
obj/compiler/unique.o: compiler/fnp.inc
# boot images for Milkymist One
diff --git a/src/compiler/fpvm.c b/src/compiler/fpvm.c
index 7b1e2a1..a6c3440 100644
--- a/src/compiler/fpvm.c
+++ b/src/compiler/fpvm.c
@@ -21,6 +21,7 @@
#include <fpvm/ast.h>
#include "unique.h"
+#include "parser.h"
#include "parser_helper.h"
#include "fpvm.h"
@@ -47,7 +48,7 @@ int fpvm_assign(struct fpvm_fragment *fragment, const char
*dest,
struct ast_node *n;
int res;
- n = fpvm_parse(expr);
+ n = fpvm_parse(expr, TOK_START_EXPR);
if(n == NULL) {
snprintf(fragment->last_error, FPVM_MAXERRLEN, "Parse error");
return 0;
diff --git a/src/compiler/parser.y b/src/compiler/parser.y
index 6ed6b13..ca00e44 100644
--- a/src/compiler/parser.y
+++ b/src/compiler/parser.y
@@ -82,7 +82,7 @@
%type node {struct ast_node *}
%destructor node { free($$); }
-start(S) ::= node(N). {
+start(S) ::= TOK_START_EXPR node(N). {
S = N;
*parseout = S;
}
diff --git a/src/compiler/parser_helper.c b/src/compiler/parser_helper.c
index 4092dc7..86e4906 100644
--- a/src/compiler/parser_helper.c
+++ b/src/compiler/parser_helper.c
@@ -20,10 +20,11 @@
#include <fpvm/ast.h>
#include "scanner.h"
+#include "parser.h"
#include "parser_itf.h"
#include "parser_helper.h"
-struct ast_node *fpvm_parse(const char *expr)
+struct ast_node *fpvm_parse(const char *expr, int start_token)
{
struct scanner *s;
int tok;
@@ -32,8 +33,9 @@ struct ast_node *fpvm_parse(const char *expr)
struct ast_node *ast;
s = new_scanner((unsigned char *)expr);
- ast = NULL;
p = ParseAlloc(malloc);
+ Parse(p, start_token, NULL, &ast);
+ ast = NULL;
tok = scan(s);
while(tok != TOK_EOF) {
identifier = malloc(sizeof(struct id));
diff --git a/src/compiler/parser_helper.h b/src/compiler/parser_helper.h
index d436312..5915f7f 100644
--- a/src/compiler/parser_helper.h
+++ b/src/compiler/parser_helper.h
@@ -20,7 +20,7 @@
#include <fpvm/ast.h>
-struct ast_node *fpvm_parse(const char *expr);
+struct ast_node *fpvm_parse(const char *expr, int start_token);
void fpvm_parse_free(struct ast_node *node);
#endif /* __PARSER_HELPER_H */
--
1.7.1
_______________________________________________
http://lists.milkymist.org/listinfo.cgi/devel-milkymist.org
IRC: #milkymist@Freenode