summaryrefslogtreecommitdiffstats
path: root/cpp/sca/modules/eval/eval.hpp
diff options
context:
space:
mode:
authorjsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68>2009-11-16 06:01:33 +0000
committerjsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68>2009-11-16 06:01:33 +0000
commitada8802640aa232d34b1fe2793b9f52cd62b41f1 (patch)
treeb72a576c33e5593e7d2842339f06e5e1b2d9faae /cpp/sca/modules/eval/eval.hpp
parent4109b6c23b5169463bd493347dddb1ab58aa0860 (diff)
Fixed parsing of comments. Added functions to read scripts and more test cases.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@880600 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to '')
-rw-r--r--cpp/sca/modules/eval/eval.hpp29
1 files changed, 25 insertions, 4 deletions
diff --git a/cpp/sca/modules/eval/eval.hpp b/cpp/sca/modules/eval/eval.hpp
index 01d242f07b..8c9ecfdecc 100644
--- a/cpp/sca/modules/eval/eval.hpp
+++ b/cpp/sca/modules/eval/eval.hpp
@@ -54,7 +54,7 @@ const list<value> beginActions(const value& exp) {
return cdr((list<value> )exp);
}
-const bool isLambda(const value& exp) {
+const bool isLambdaExpr(const value& exp) {
return isTaggedList(exp, lambdaSymbol);
}
@@ -141,7 +141,7 @@ const value evalSequence(const list<value>& exps, Env& env, const gc_pool& pool)
const value applyProcedure(const value& procedure, list<value>& arguments, const gc_pool& pool) {
if(isPrimitiveProcedure(procedure))
- return applyPrimitiveProcedure(procedure, arguments);
+ return applyPrimitiveProcedure(procedure, arguments, pool);
if(isCompoundProcedure(procedure)) {
Env env = extendEnvironment(procedureParameters(procedure), arguments, procedureEnvironment(procedure), pool);
return evalSequence(procedureBody(procedure), env, pool);
@@ -152,7 +152,7 @@ const value applyProcedure(const value& procedure, list<value>& arguments, const
const value sequenceToExp(const list<value> exps) {
if(isNil(exps))
- return list<value>();
+ return exps;
if(isLastExp(exps))
return firstExp(exps);
return makeBegin(exps);
@@ -242,7 +242,7 @@ const value evalExpr(const value& exp, Env& env, const gc_pool& pool) {
return evalSequence(beginActions(exp), env, pool);
if(isCond(exp))
return evalExpr(condToIf(exp), env, pool);
- if(isLambda(exp))
+ if(isLambdaExpr(exp))
return makeProcedure(lambdaParameters(exp), lambdaBody(exp), env);
if(isVariable(exp))
return lookupVariableValue(exp, env);
@@ -264,6 +264,27 @@ const list<value> quotedParameters(const list<value>& p) {
return cons<value>(mklist<value>(quoteSymbol, car(p)), quotedParameters(cdr(p)));
}
+/**
+ * Evaluate an expression against a script provided as a list of values.
+ */
+const value evalScriptLoop(const value& expr, const list<value>& script, eval::Env& globalEnv, const gc_pool& pool) {
+ if (isNil(script))
+ return eval::evalExpr(expr, globalEnv, pool);
+ eval::evalExpr(car(script), globalEnv, pool);
+ return evalScriptLoop(expr, cdr(script), globalEnv, pool);
+}
+
+const value evalScript(const value& expr, const value& script, Env& env, const gc_pool& pool) {
+ return evalScriptLoop(expr, script, env, pool);
+}
+
+/**
+ * Evaluate an expression against a script provided as an input stream.
+ */
+const value evalScript(const value& expr, std::istream& is, Env& env, const gc_pool& pool) {
+ return evalScript(expr, readScript(is), env, pool);
+}
+
}
}
#endif /* tuscany_eval_eval_hpp */