---
 software/libfpvm/Makefile |    4 ++--
 software/libfpvm/fpvm.c   |   36 ++++++++++++++++++++----------------
 2 files changed, 22 insertions(+), 18 deletions(-)

diff --git a/software/libfpvm/Makefile b/software/libfpvm/Makefile
index bcafeaf..d2aabc1 100644
--- a/software/libfpvm/Makefile
+++ b/software/libfpvm/Makefile
@@ -34,7 +34,7 @@ fpvm.o: ../../software/include/base/stdlib.h
 fpvm.o: ../../software/include/base/stdio.h
 fpvm.o: ../../software/include/base/version.h
 fpvm.o: ../../software/include/fpvm/is.h ../../software/include/fpvm/fpvm.h
-fpvm.o: ast.h parser_helper.h
+fpvm.o: ast.h parser_helper.h parser.h
 gfpus.o: ../../software/include/base/stdio.h
 gfpus.o: ../../software/include/base/stdlib.h
 gfpus.o: ../../software/include/fpvm/is.h ../../software/include/fpvm/fpvm.h
@@ -54,7 +54,7 @@ parser.o: ../../software/include/base/stdlib.h
 parser.o: ../../software/include/base/assert.h
 parser.o: ../../software/include/base/string.h
 parser.o: ../../software/include/base/malloc.h
-parser.o: ../../software/include/base/math.h ast.h
+parser.o: ../../software/include/base/math.h ast.h parser.h
 parser_helper.o: ../../software/include/base/stdio.h
 parser_helper.o: ../../software/include/base/stdlib.h
 parser_helper.o: ../../software/include/base/malloc.h scanner.h parser.h
diff --git a/software/libfpvm/fpvm.c b/software/libfpvm/fpvm.c
index 9d162c5..68b460d 100644
--- a/software/libfpvm/fpvm.c
+++ b/software/libfpvm/fpvm.c
@@ -24,6 +24,7 @@
 
 #include "ast.h"
 #include "parser_helper.h"
+#include "parser.h"
 
 const char *fpvm_version()
 {
@@ -247,22 +248,25 @@ static int add_isn(struct fpvm_fragment *fragment, int 
opcode,
        return 1;
 }
 
-static int operator2opcode(const char *operator)
+static int operator2opcode(int token)
 {
-       if(strcmp(operator, "+") == 0) return FPVM_OPCODE_FADD;
-       if(strcmp(operator, "-") == 0) return FPVM_OPCODE_FSUB;
-       if(strcmp(operator, "*") == 0) return FPVM_OPCODE_FMUL;
-       if(strcmp(operator, "abs") == 0) return FPVM_OPCODE_FABS;
-       if(strcmp(operator, "isin") == 0) return FPVM_OPCODE_SIN;
-       if(strcmp(operator, "icos") == 0) return FPVM_OPCODE_COS;
-       if(strcmp(operator, "above") == 0) return FPVM_OPCODE_ABOVE;
-       if(strcmp(operator, "equal") == 0) return FPVM_OPCODE_EQUAL;
-       if(strcmp(operator, "i2f") == 0) return FPVM_OPCODE_I2F;
-       if(strcmp(operator, "f2i") == 0) return FPVM_OPCODE_F2I;
-       if(strcmp(operator, "if") == 0) return FPVM_OPCODE_IF;
-       if(strcmp(operator, "tsign") == 0) return FPVM_OPCODE_TSIGN;
-       if(strcmp(operator, "quake") == 0) return FPVM_OPCODE_QUAKE;
-       else return -1;
+       switch (token) {
+       case TOK_PLUS:          return FPVM_OPCODE_FADD;
+       case TOK_MINUS:         return FPVM_OPCODE_FSUB;
+       case TOK_MULTIPLY:      return FPVM_OPCODE_FMUL;
+       case TOK_ABS:           return FPVM_OPCODE_FABS;
+       case TOK_ISIN:          return FPVM_OPCODE_SIN;
+       case TOK_ICOS:          return FPVM_OPCODE_COS;
+       case TOK_ABOVE:         return FPVM_OPCODE_ABOVE;
+       case TOK_EQUAL:         return FPVM_OPCODE_EQUAL;
+       case TOK_I2F:           return FPVM_OPCODE_I2F;
+       case TOK_F2I:           return FPVM_OPCODE_F2I;
+       case TOK_IF:            return FPVM_OPCODE_IF;
+       case TOK_TSIGN:         return FPVM_OPCODE_TSIGN;
+       case TOK_QUAKE:         return FPVM_OPCODE_QUAKE;
+       default:
+               return -1;
+       }
 }
 
 #define        ADD_ISN_RET(op, opa, opb, dest) \
@@ -506,7 +510,7 @@ static int compile(struct fpvm_fragment *fragment, int reg, 
struct ast_node *nod
                ADD_ISN(FPVM_OPCODE_TSIGN, opa, opb, reg);
        } else {
                /* Normal case */
-               opcode = operator2opcode(node->label);
+               opcode = operator2opcode(node->token);
                if(opcode < 0) {
                        snprintf(fragment->last_error, FPVM_MAXERRLEN, 
"Operation not supported: %s", node->label);
                        return FPVM_INVALID_REG;
-- 
1.7.1

_______________________________________________
http://lists.milkymist.org/listinfo.cgi/devel-milkymist.org
IRC: #milkymist@Freenode

Reply via email to