summaryrefslogtreecommitdiffstats
path: root/cpp/sca/modules/eval/primitive.hpp
diff options
context:
space:
mode:
authorjsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68>2009-10-03 21:50:33 +0000
committerjsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68>2009-10-03 21:50:33 +0000
commitb2b06bd2780dc40f666201d095c388313364b37a (patch)
tree1186e75dd637a02e567f91a1c5d7014a2bca7a95 /cpp/sca/modules/eval/primitive.hpp
parent95cb8fb517576b3357ecdf27a30c29b1365c5cf5 (diff)
Refactored store tests and moved them under test/. Simplified the script evaluation logic a little, added an apply procedure and support for variable lists of args. Added a test case that assembles the store app using a script.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@821425 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to '')
-rw-r--r--cpp/sca/modules/eval/primitive.hpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/cpp/sca/modules/eval/primitive.hpp b/cpp/sca/modules/eval/primitive.hpp
index 881f669317..04e26178f4 100644
--- a/cpp/sca/modules/eval/primitive.hpp
+++ b/cpp/sca/modules/eval/primitive.hpp
@@ -57,6 +57,10 @@ const value valueCons(list<value>& args) {
return value(cons(car(args), (list<value> )cadr(args)));
}
+const value valueList(list<value>& args) {
+ return value(args);
+}
+
const value valueNul(list<value>& args) {
return value((bool)isNil(car(args)));
}
@@ -66,10 +70,14 @@ const value valueEqual(list<value>& args) {
}
const value valueAdd(list<value>& args) {
+ if (cdr(args) == list<value>())
+ return value((double)car(args));
return value((double)car(args) + (double)cadr(args));
}
const value valueSub(list<value>& args) {
+ if (cdr(args) == list<value>())
+ return value(0 - (double)car(args));
return value((double)car(args) - (double)cadr(args));
}
@@ -126,12 +134,14 @@ const list<value> primitiveProcedureNames() {
list<value> l = makeList(value("car"));
l = cons(value("cdr"), l);
l = cons(value("cons"), l);
+ l = cons(value("list"), l);
l = cons(value("nul"), l);
l = cons(value("="), l);
l = cons(value("+"), l);
l = cons(value("-"), l);
l = cons(value("*"), l);
l = cons(value("/"), l);
+ l = cons(value("equal?"), l);
l = cons(value("display"), l);
return l;
}
@@ -140,12 +150,14 @@ const list<value> primitiveProcedureObjects() {
list<value> l = makeList(primitiveProcedure(valueCar));
l = cons(primitiveProcedure(valueCdr), l);
l = cons(primitiveProcedure(valueCons), l);
+ l = cons(primitiveProcedure(valueList), l);
l = cons(primitiveProcedure(valueNul), l);
l = cons(primitiveProcedure(valueEqual), l);
l = cons(primitiveProcedure(valueAdd), l);
l = cons(primitiveProcedure(valueSub), l);
l = cons(primitiveProcedure(valueMul), l);
l = cons(primitiveProcedure(valueDiv), l);
+ l = cons(primitiveProcedure(valueEqual), l);
l = cons(primitiveProcedure(valueDisplay), l);
return l;
}