diff options
Diffstat (limited to 'sca-cpp/trunk/modules')
-rw-r--r-- | sca-cpp/trunk/modules/eval/driver.hpp | 4 | ||||
-rw-r--r-- | sca-cpp/trunk/modules/eval/environment.hpp | 6 | ||||
-rw-r--r-- | sca-cpp/trunk/modules/eval/eval-test.cpp | 12 | ||||
-rw-r--r-- | sca-cpp/trunk/modules/eval/eval.hpp | 8 | ||||
-rw-r--r-- | sca-cpp/trunk/modules/eval/io.hpp | 26 | ||||
-rw-r--r-- | sca-cpp/trunk/modules/eval/primitive.hpp | 49 | ||||
-rw-r--r-- | sca-cpp/trunk/modules/json/json.hpp | 2 | ||||
-rw-r--r-- | sca-cpp/trunk/modules/server/mod-wiring.cpp | 38 |
8 files changed, 102 insertions, 43 deletions
diff --git a/sca-cpp/trunk/modules/eval/driver.hpp b/sca-cpp/trunk/modules/eval/driver.hpp index 4c69ecb0a1..3076e677c4 100644 --- a/sca-cpp/trunk/modules/eval/driver.hpp +++ b/sca-cpp/trunk/modules/eval/driver.hpp @@ -37,12 +37,12 @@ const std::string evalOutputPrompt("; "); const std::string evalInputPrompt("=> "); const bool promptForInput(const std::string str, std::ostream& out) { - out << "\n\n" << str; + out << std::endl << std::endl << str; return true; } const bool announceOutput(const std::string str, std::ostream& out) { - out << "\n" << str; + out << std::endl << str; return true; } diff --git a/sca-cpp/trunk/modules/eval/environment.hpp b/sca-cpp/trunk/modules/eval/environment.hpp index fa9667b1ba..3a19c01deb 100644 --- a/sca-cpp/trunk/modules/eval/environment.hpp +++ b/sca-cpp/trunk/modules/eval/environment.hpp @@ -82,7 +82,7 @@ const bool isDotVariable(const value& var) { const Frame makeBinding(const Frame& frameSoFar, const list<value>& variables, const list<value> values) { if (isNil(variables)) { if (!isNil(values)) - std::cout << "Too many arguments supplied " << values << "\n"; + logStream() << "Too many arguments supplied " << values << std::endl; return frameSoFar; } if (isDotVariable(car(variables))) @@ -90,7 +90,7 @@ const Frame makeBinding(const Frame& frameSoFar, const list<value>& variables, c if (isNil(values)) { if (!isNil(variables)) - std::cout << "Too few arguments supplied " << variables << "\n"; + logStream() << "Too few arguments supplied " << variables << std::endl; return frameSoFar; } @@ -163,7 +163,7 @@ const value lookupEnvScan(const value& var, const list<value>& vars, const list< const value lookupEnvLoop(const value& var, const Env& env) { if(env == theEmptyEnvironment()) { - std::cout << "Unbound variable " << var << "\n"; + logStream() << "Unbound variable " << var << std::endl; return value(); } return lookupEnvScan(var, frameVariables(*firstFrame(env)), frameValues(*firstFrame(env)), env); diff --git a/sca-cpp/trunk/modules/eval/eval-test.cpp b/sca-cpp/trunk/modules/eval/eval-test.cpp index 984b17b26d..fb755b9077 100644 --- a/sca-cpp/trunk/modules/eval/eval-test.cpp +++ b/sca-cpp/trunk/modules/eval/eval-test.cpp @@ -47,9 +47,9 @@ bool testEnvGC() { resetListCounters(); resetValueCounters(); testEnv(); - assert(countValues == 0); - assert(countLambdas == 0); - assert(countlists == 0); + assert(checkValueCounters()); + assert(checkLambdaCounters()); + assert(checkListCounters()); //printLambdaCounters(); //printListCounters(); //printValueCounters(); @@ -211,9 +211,9 @@ bool testEvalGC() { testEval(); testEvalExpr(); testEvalLambda(); - assert(countValues == 0); - assert(countLambdas == 0); - assert(countlists == 0); + assert(checkValueCounters()); + assert(checkLambdaCounters()); + assert(checkListCounters()); //printLambdaCounters(); //printListCounters(); //printValueCounters(); diff --git a/sca-cpp/trunk/modules/eval/eval.hpp b/sca-cpp/trunk/modules/eval/eval.hpp index 8c9ecfdecc..1b4d94c631 100644 --- a/sca-cpp/trunk/modules/eval/eval.hpp +++ b/sca-cpp/trunk/modules/eval/eval.hpp @@ -141,12 +141,12 @@ 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, pool); + return applyPrimitiveProcedure(procedure, arguments); if(isCompoundProcedure(procedure)) { Env env = extendEnvironment(procedureParameters(procedure), arguments, procedureEnvironment(procedure), pool); return evalSequence(procedureBody(procedure), env, pool); } - std::cout << "Unknown procedure type " << procedure << "\n"; + logStream() << "Unknown procedure type " << procedure << std::endl; return value(); } @@ -208,7 +208,7 @@ const value expandClauses(const list<value>& clauses) { if(isCondElseClause(first)) { if(isNil(rest)) return sequenceToExp(condActions(first)); - std::cout << "else clause isn't last " << clauses << "\n"; + logStream() << "else clause isn't last " << clauses << std::endl; return value(); } return makeIf(condPredicate(first), sequenceToExp(condActions(first)), expandClauses(rest)); @@ -254,7 +254,7 @@ const value evalExpr(const value& exp, Env& env, const gc_pool& pool) { list<value> operandValues = listOfValues(operands(exp), env, pool); return applyProcedure(evalExpr(operat(exp), env, pool), operandValues, pool); } - std::cout << "Unknown expression type " << exp << "\n"; + logStream() << "Unknown expression type " << exp << std::endl; return value(); } diff --git a/sca-cpp/trunk/modules/eval/io.hpp b/sca-cpp/trunk/modules/eval/io.hpp index a898a11440..53657ce055 100644 --- a/sca-cpp/trunk/modules/eval/io.hpp +++ b/sca-cpp/trunk/modules/eval/io.hpp @@ -77,14 +77,14 @@ const char readChar(std::istream& in) { if(in.eof()) { return -1; } - char c = in.get(); + char c = (char)in.get(); return c; } const char peekChar(std::istream& in) { if(in.eof()) return -1; - char c = in.peek(); + char c = (char)in.peek(); return c; } @@ -95,7 +95,7 @@ const bool isQuote(const value& token) { const value skipComment(std::istream& in); const value readQuoted(std::istream& in); const value readIdentifier(const char chr, std::istream& in); -const value readString(const char chr, std::istream& in); +const value readString(std::istream& in); const value readNumber(const char chr, std::istream& in); const value readValue(std::istream& in); @@ -112,14 +112,14 @@ const value readToken(std::istream& in) { if(firstChar == ')') return rightParenthesis; if(firstChar == '"') - return readString(firstChar, in); + return readString(in); if(isIdentifierStart(firstChar)) return readIdentifier(firstChar, in); if(isDigit(firstChar)) return readNumber(firstChar, in); if(firstChar == -1) return value(); - std::cout << "Illegal lexical syntax '" << firstChar << "'" << "\n"; + logStream() << "Illegal lexical syntax '" << firstChar << "'" << std::endl; return readToken(in); } @@ -167,7 +167,7 @@ const list<char> readStringHelper(const list<char>& listSoFar, std::istream& in) return reverse(listSoFar); } -const value readString(const char chr, std::istream& in) { +const value readString(std::istream& in) { return listToString(readStringHelper(list<char>(), in)); } @@ -189,11 +189,25 @@ const value readValue(std::istream& in) { return nextToken; } +const value readValue(const std::string s) { + std::istringstream in(s); + const value nextToken = readToken(in); + if(isLeftParenthesis(nextToken)) + return readList(list<value> (), in); + return nextToken; +} + const bool writeValue(const value& val, std::ostream& out) { out << val; return true; } +const std::string writeValue(const value& val) { + std::ostringstream out; + out << val; + return out.str(); +} + const value readScript(std::istream& in) { const value val = readValue(in); if (isNil(val)) diff --git a/sca-cpp/trunk/modules/eval/primitive.hpp b/sca-cpp/trunk/modules/eval/primitive.hpp index bd36c0e226..49bb3e2087 100644 --- a/sca-cpp/trunk/modules/eval/primitive.hpp +++ b/sca-cpp/trunk/modules/eval/primitive.hpp @@ -40,13 +40,27 @@ const value primitiveSymbol("primitive"); const value quoteSymbol("'"); const value lambdaSymbol("lambda"); -std::ostream* displayOut = &std::cout; +std::ostream* displayOutStream = &std::cout; +std::ostream* logOutStream = &std::cerr; const bool setupDisplay(std::ostream& out) { - displayOut = &out; + displayOutStream = &out; return true; } +std::ostream& displayStream() { + return *displayOutStream; +} + +const bool setupLog(std::ostream& out) { + logOutStream = &out; + return true; +} + +std::ostream& logStream() { + return *logOutStream; +} + const value carProc(const list<value>& args) { return car((list<value> )car(args)); } @@ -64,7 +78,12 @@ const value listProc(const list<value>& args) { } const value nulProc(const list<value>& args) { - return (bool)isNil(car(args)); + const value v(car(args)); + if (isNil(v)) + return true; + if (isList(v)) + return isNil(list<value>(v)); + return false; } const value equalProc(const list<value>& args) { @@ -92,12 +111,24 @@ const value divProc(const list<value>& args) { } const value displayProc(const list<value>& args) { - *displayOut << car(args); - (*displayOut).flush(); - return true; + if (isNil(args)) { + displayStream() << std::endl; + return true; + } + displayStream() << car(args); + return displayProc(cdr(args)); +} + +const value logProc(const list<value>& args) { + if (isNil(args)) { + logStream() << std::endl; + return true; + } + logStream() << car(args); + return logProc(cdr(args)); } -const value uuidProc(const list<value>& args) { +const value uuidProc(unused const list<value>& args) { apr_uuid_t uuid; apr_uuid_get(&uuid); char buf[APR_UUID_FORMATTED_LENGTH]; @@ -105,7 +136,7 @@ const value uuidProc(const list<value>& args) { return std::string(buf, APR_UUID_FORMATTED_LENGTH); } -const value applyPrimitiveProcedure(const value& proc, list<value>& args, const gc_pool& pool) { +const value applyPrimitiveProcedure(const value& proc, list<value>& args) { const lambda<value(list<value>&)> func(cadr((list<value>)proc)); return func(args); } @@ -151,6 +182,7 @@ const list<value> primitiveProcedureNames() { l = cons<value>("/", l); l = cons<value>("equal?", l); l = cons<value>("display", l); + l = cons<value>("log", l); l = cons<value>("uuid", l); return l; } @@ -168,6 +200,7 @@ const list<value> primitiveProcedureObjects() { l = cons(primitiveProcedure(divProc), l); l = cons(primitiveProcedure(equalProc), l); l = cons(primitiveProcedure(displayProc), l); + l = cons(primitiveProcedure(logProc), l); l = cons(primitiveProcedure(uuidProc), l); return l; } diff --git a/sca-cpp/trunk/modules/json/json.hpp b/sca-cpp/trunk/modules/json/json.hpp index 7b18d237ec..7d9bba564e 100644 --- a/sca-cpp/trunk/modules/json/json.hpp +++ b/sca-cpp/trunk/modules/json/json.hpp @@ -40,7 +40,7 @@ namespace json { /** * Report JSON errors. */ -void reportError(JSContext *cx, const char *message, JSErrorReport *report) { +void reportError(unused JSContext *cx, const char *message, JSErrorReport *report) { std::cerr << (const char*)(report->filename? report->filename : "<no filename>") << ":" << (unsigned int)report->lineno << ":" << message << std::endl; } diff --git a/sca-cpp/trunk/modules/server/mod-wiring.cpp b/sca-cpp/trunk/modules/server/mod-wiring.cpp index 2d3c8ce045..0d5262d730 100644 --- a/sca-cpp/trunk/modules/server/mod-wiring.cpp +++ b/sca-cpp/trunk/modules/server/mod-wiring.cpp @@ -33,6 +33,7 @@ #include "list.hpp" #include "slist.hpp" #include "value.hpp" +#include "debug.hpp" #include "monad.hpp" #include "cache.hpp" #include "../scdl/scdl.hpp" @@ -51,10 +52,11 @@ namespace modwiring { */ class ServerConf { public: - ServerConf(server_rec* s) : home("") { + ServerConf(server_rec* s) : s(s), home(""), wiringHost("") { } - server_rec* s; + const server_rec* s; std::string home; + std::string wiringHost; }; /** @@ -67,9 +69,9 @@ const bool useModProxy = true; */ class DirConf { public: - DirConf(char* dirspec) : contributionPath(""), compositeName("") { + DirConf(char* dirspec) : dirspec(dirspec), contributionPath(""), compositeName("") { } - char* dirspec; + const char* dirspec; std::string contributionPath; std::string compositeName; cached<failable<list<value>, std::string> > components; @@ -106,7 +108,8 @@ const bool isAbsolute(const std::string& uri) { int translate(request_rec *r) { if (strncmp(r->uri, "/references/", 12) != 0) return DECLINED; - httpd::logRequest(r, "mod_tuscany_wiring::translate"); + httpdDebugRequest(r, "modwiring::translate::input"); + debug(r->uri, "modwiring::translate::uri"); // Find the requested component, reference and its target configuration DirConf& conf = httpd::dirConf<DirConf>(r, &mod_tuscany_wiring); @@ -165,11 +168,14 @@ const std::string redirect(const std::string& file, const std::string& pi, const int handler(request_rec *r) { if(strcmp(r->handler, "mod_tuscany_wiring")) return DECLINED; - httpd::logRequest(r, "mod_tuscany_wiring::handler"); + httpdDebugRequest(r, "modwiring::handler::input"); // Do an internal redirect if (r->filename == NULL || strncmp(r->filename, "/redirect:", 10) != 0) return DECLINED; + debug(r->uri, "modwiring::handler::uri"); + debug(r->filename, "modwiring::handler::filename"); + if (r->args == NULL) { ap_internal_redirect(apr_pstrdup(r->pool, redirect(r->filename + 10, r->path_info).c_str()), r); return OK; @@ -181,18 +187,23 @@ int handler(request_rec *r) { /** * Configuration commands. */ -const char *confHome(cmd_parms *cmd, void *dummy, const char *arg) { +const char *confHome(cmd_parms *cmd, unused void *dummy, const char *arg) { ServerConf *c = (ServerConf*)ap_get_module_config(cmd->server->module_config, &mod_tuscany_wiring); c->home = arg; return NULL; } -const char *confContribution(cmd_parms *cmd, void *c, const char *arg) { +const char *confWiringHost(cmd_parms *cmd, unused void *dummy, const char *arg) { + ServerConf *c = (ServerConf*)ap_get_module_config(cmd->server->module_config, &mod_tuscany_wiring); + c->wiringHost = arg; + return NULL; +} +const char *confContribution(unused cmd_parms *cmd, void *c, const char *arg) { DirConf* conf = (DirConf*)c; conf->contributionPath = arg; conf->components = components(conf); return NULL; } -const char *confComposite(cmd_parms *cmd, void *c, const char *arg) { +const char *confComposite(unused cmd_parms *cmd, void *c, const char *arg) { DirConf* conf = (DirConf*)c; conf->compositeName = arg; conf->components = components(conf); @@ -204,16 +215,17 @@ const char *confComposite(cmd_parms *cmd, void *c, const char *arg) { */ const command_rec commands[] = { AP_INIT_TAKE1("TuscanyHome", (const char*(*)())confHome, NULL, RSRC_CONF, "Tuscany home directory"), + AP_INIT_TAKE1("SCAWiringHost", (const char*(*)())confWiringHost, NULL, RSRC_CONF, "SCA wiring host"), AP_INIT_TAKE1("SCAContribution", (const char*(*)())confContribution, NULL, ACCESS_CONF, "SCA contribution location"), AP_INIT_TAKE1("SCAComposite", (const char*(*)())confComposite, NULL, ACCESS_CONF, "SCA composite location"), - {NULL} + {NULL, NULL, NULL, 0, NO_ARGS, NULL} }; -int postConfig(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s) { +int postConfig(unused apr_pool_t *p, unused apr_pool_t *plog, unused apr_pool_t *ptemp, unused server_rec *s) { return OK; } -void childInit(apr_pool_t* p, server_rec* svr_rec) { +void childInit(unused apr_pool_t* p, server_rec* svr_rec) { ServerConf *conf = (ServerConf*)ap_get_module_config(svr_rec->module_config, &mod_tuscany_wiring); if(conf == NULL) { std::cerr << "[Tuscany] Due to one or more errors mod_tuscany_wiring loading failed. Causing apache to stop loading." << std::endl; @@ -221,7 +233,7 @@ void childInit(apr_pool_t* p, server_rec* svr_rec) { } } -void registerHooks(apr_pool_t *p) { +void registerHooks(unused apr_pool_t *p) { ap_hook_post_config(postConfig, NULL, NULL, APR_HOOK_MIDDLE); ap_hook_child_init(childInit, NULL, NULL, APR_HOOK_MIDDLE); ap_hook_handler(handler, NULL, NULL, APR_HOOK_MIDDLE); |