diff options
author | jsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68> | 2009-11-16 06:01:33 +0000 |
---|---|---|
committer | jsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68> | 2009-11-16 06:01:33 +0000 |
commit | ada8802640aa232d34b1fe2793b9f52cd62b41f1 (patch) | |
tree | b72a576c33e5593e7d2842339f06e5e1b2d9faae /cpp/sca/modules/eval/eval.hpp | |
parent | 4109b6c23b5169463bd493347dddb1ab58aa0860 (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.hpp | 29 |
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 */ |