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