summaryrefslogtreecommitdiffstats
path: root/sca-cpp/trunk/modules/java/eval.hpp
diff options
context:
space:
mode:
authorjsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68>2010-01-30 08:06:07 +0000
committerjsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68>2010-01-30 08:06:07 +0000
commit8c5172b8ab407b79db53ce46271d72d8a3f9c19f (patch)
tree7ba77e7709aa09aca0b486dfe7cbba3270950762 /sca-cpp/trunk/modules/java/eval.hpp
parentc06d7a38b904247917462c3c1a780f95c68e0709 (diff)
Correctly pass property values to component implementations.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@904734 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to '')
-rw-r--r--sca-cpp/trunk/modules/java/eval.hpp19
1 files changed, 10 insertions, 9 deletions
diff --git a/sca-cpp/trunk/modules/java/eval.hpp b/sca-cpp/trunk/modules/java/eval.hpp
index 9dbb50abb5..4272543506 100644
--- a/sca-cpp/trunk/modules/java/eval.hpp
+++ b/sca-cpp/trunk/modules/java/eval.hpp
@@ -211,17 +211,15 @@ public:
const value operator()(const list<value>& expr) const {
const value& op(car(expr));
+ if (op == "equals")
+ return value(cadr(expr) == this);
+ if (op == "hashCode")
+ return value((double)(long)this);
if (op == "toString") {
ostringstream os;
os << this;
return value(string("org.apache.tuscany.InvocationHandler@") + (c_str(str(os)) + 2));
}
- if (op == "hashCode") {
- return value((double)(long)this);
- }
- if (op == "equals") {
- return value(cadr(expr) == this);
- }
return func(expr);
}
@@ -247,8 +245,9 @@ jobject JNICALL nativeInvoke(JNIEnv* env, jobject self, unused jobject proxy, jo
const value func(c);
env->ReleaseStringUTFChars(s, c);
- // Build the expression to evaluate
- const list<value> expr = cons<value>(func, jarrayToValues(jl.jr, args));
+ // Build the expression to evaluate, either (func, args[0], args[1], args[2]...)
+ // or just args[0] for the special eval(...) function
+ const list<value> expr = func == "eval"? (list<value>)car<value>(jarrayToValues(jl.jr, args)) : cons<value>(func, jarrayToValues(jl.jr, args));
debug(expr, "java::nativeInvoke::expr");
// Invoke the lambda function
@@ -401,8 +400,10 @@ const value jobjectToValue(const JavaRuntime& jr, const jobject o) {
return value((bool)jr.env->CallBooleanMethod(o, jr.booleanValue));
if (jr.env->IsSameObject(clazz, jr.doubleClass))
return value((double)jr.env->CallDoubleMethod(o, jr.doubleValue));
- if ((jr.env->IsAssignableFrom(clazz, jr.iterableClass)))
+ if (jr.env->IsAssignableFrom(clazz, jr.iterableClass))
return jiterableToValues(jr, o);
+ if (jr.env->IsAssignableFrom(clazz, jr.objectArrayClass))
+ return jarrayToValues(jr, (jobjectArray)o);
return lambda<value(const list<value>&)>(javaCallable(jr, o));
}