diff options
author | jsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68> | 2009-10-03 21:50:33 +0000 |
---|---|---|
committer | jsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68> | 2009-10-03 21:50:33 +0000 |
commit | b2b06bd2780dc40f666201d095c388313364b37a (patch) | |
tree | 1186e75dd637a02e567f91a1c5d7014a2bca7a95 /cpp/sca/modules/eval/primitive.hpp | |
parent | 95cb8fb517576b3357ecdf27a30c29b1365c5cf5 (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.hpp | 12 |
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; } |