--- 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