more unittests (already found/fixed some bugs)
git-svn-id: http://skia.googlecode.com/svn/trunk@348 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/forth/StdWords.cpp b/forth/StdWords.cpp
index 98e39c0..177dabd 100644
--- a/forth/StdWords.cpp
+++ b/forth/StdWords.cpp
@@ -77,11 +77,13 @@
///////////////// logicals
BEGIN_WORD(logical_and) {
- fe->push(-(fe->pop() && fe->pop()));
+ intptr_t tmp = fe->pop();
+ fe->setTop(-(tmp && fe->top()));
} END_WORD
BEGIN_WORD(logical_or) {
- fe->push(-(fe->pop() || fe->pop()));
+ intptr_t tmp = fe->pop();
+ fe->setTop(-(tmp || fe->top()));
} END_WORD
BEGIN_WORD(logical_not) {
@@ -400,18 +402,18 @@
ADD_LITERAL_WORD("2OVER", over2);
ADD_LITERAL_WORD("2DROP", drop2);
- this->add("+", 1, new add_ForthWord);
- this->add("-", 1, new sub_ForthWord);
- this->add("*", 1, new mul_ForthWord);
- this->add("/", 1, new div_ForthWord);
- this->add("MOD", 1, new mod_ForthWord);
- this->add("/MOD", 1, new divmod_ForthWord);
+ ADD_LITERAL_WORD("+", add);
+ ADD_LITERAL_WORD("-", sub);
+ ADD_LITERAL_WORD("*", mul);
+ ADD_LITERAL_WORD("/", div);
+ ADD_LITERAL_WORD("MOD", mod);
+ ADD_LITERAL_WORD("/MOD", divmod);
- this->add(".", 1, new dot_ForthWord);
- this->add("ABS", 3, new abs_ForthWord);
- this->add("NEGATE", 3, new negate_ForthWord);
- this->add("MIN", 3, new min_ForthWord);
- this->add("MAX", 3, new max_ForthWord);
+ ADD_LITERAL_WORD(".", dot);
+ ADD_LITERAL_WORD("ABS", abs);
+ ADD_LITERAL_WORD("NEGATE", negate);
+ ADD_LITERAL_WORD("MIN", min);
+ ADD_LITERAL_WORD("MAX", max);
ADD_LITERAL_WORD("AND", logical_and);
ADD_LITERAL_WORD("OR", logical_or);