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

Reply via email to