From ff124040623879bc48a0ba5cf06a841642adef53 Mon Sep 17 00:00:00 2001 From: jsdelfino Date: Mon, 30 Nov 2009 08:36:32 +0000 Subject: Fixes to the http client, httpd modules and memcached component to get the store and shopping cart test case working end to end. git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@885349 13f79535-47bb-0310-9956-ffa450edef68 --- sca-cpp/trunk/modules/server/mod-scm.hpp | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) (limited to 'sca-cpp/trunk/modules/server/mod-scm.hpp') diff --git a/sca-cpp/trunk/modules/server/mod-scm.hpp b/sca-cpp/trunk/modules/server/mod-scm.hpp index 386d032695..586b90190f 100644 --- a/sca-cpp/trunk/modules/server/mod-scm.hpp +++ b/sca-cpp/trunk/modules/server/mod-scm.hpp @@ -34,8 +34,10 @@ #include "function.hpp" #include "list.hpp" #include "value.hpp" +#include "debug.hpp" #include "monad.hpp" #include "cache.hpp" +#include "../eval/primitive.hpp" #include "../eval/driver.hpp" #include "../http/httpd.hpp" #include "mod-eval.hpp" @@ -45,20 +47,30 @@ namespace server { namespace modeval { namespace scm { +/** + * Convert proxy lambdas to evaluator primitive procedures. + */ +const list primitiveProcedures(const list& l) { + if (isNil(l)) + return l; + return cons(mklist(eval::primitiveSymbol, car(l)), primitiveProcedures(cdr(l))); +} + /** * Evaluate a script component implementation function. */ struct evalImplementation { const value impl; - evalImplementation(const value& impl) : impl(impl) { + const list px; + evalImplementation(const value& impl, const list& px) : impl(impl), px(eval::quotedParameters(primitiveProcedures(px))) { } const failable operator()(const value& func, const list& params) const { - const value expr = cons(func, eval::quotedParameters(params)); - httpd::logValue(expr, "expr"); + const value expr = cons(func, append(eval::quotedParameters(params), px)); + debug(expr, "modeval::scm::evalImplementation::input"); gc_pool pool; eval::Env globalEnv = eval::setupEnvironment(pool); const value val = eval::evalScript(expr, impl, globalEnv, pool); - httpd::logValue(val, "val"); + debug(val, "modeval::scm::evalImplementation::result"); if (isNil(val)) return mkfailure("Could not evaluate expression"); return val; @@ -68,20 +80,20 @@ struct evalImplementation { /** * Read a script component implementation. */ -const failable readLatestImplementation(const std::string path) { +const failable readLatestImplementation(const std::string path, const list& px) { std::ifstream is(path.c_str(), std::ios_base::in); if (is.fail() || is.bad()) return mkfailure("Could not read implementation: " + path); const value impl = eval::readScript(is); if (isNil(impl)) return mkfailure("Could not read implementation: " + path); - return ilambda(evalImplementation(impl)); + return ilambda(evalImplementation(impl, px)); } -const cached > readImplementation(const std::string& path) { - const lambda(std::string)> ri(readLatestImplementation); +const cached > readImplementation(const std::string& path, const list& px) { + const lambda(std::string, list)> ri(readLatestImplementation); const lambda ft(latestFileTime); - return cached >(curry(ri, path), curry(ft, path)); + return cached >(curry(ri, path, px), curry(ft, path)); } } -- cgit v1.2.3