You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by mr...@apache.org on 2009/01/24 01:13:37 UTC
svn commit: r737269 -
/ode/sandbox/simpel/src/main/java/org/apache/ode/simpel/expr/E4XExprRuntime.java
Author: mriou
Date: Sat Jan 24 00:13:37 2009
New Revision: 737269
URL: http://svn.apache.org/viewvc?rev=737269&view=rev
Log:
Fixed parent scope delegation when evaluating JS expressions in Rhino.
Modified:
ode/sandbox/simpel/src/main/java/org/apache/ode/simpel/expr/E4XExprRuntime.java
Modified: ode/sandbox/simpel/src/main/java/org/apache/ode/simpel/expr/E4XExprRuntime.java
URL: http://svn.apache.org/viewvc/ode/sandbox/simpel/src/main/java/org/apache/ode/simpel/expr/E4XExprRuntime.java?rev=737269&r1=737268&r2=737269&view=diff
==============================================================================
--- ode/sandbox/simpel/src/main/java/org/apache/ode/simpel/expr/E4XExprRuntime.java (original)
+++ ode/sandbox/simpel/src/main/java/org/apache/ode/simpel/expr/E4XExprRuntime.java Sat Jan 24 00:13:37 2009
@@ -87,7 +87,12 @@
Object res = cx.evaluateString(scope, forged, "<expr>", 0, null);
// Second extracting the resulting variable value
if (expr.getLValue() != null) {
- res = scope.getEnv().get(expr.getLVariable());
+ if (scope.getEnv().get(expr.getLVariable()) != null) {
+ res = scope.getEnv().get(expr.getLVariable());
+ } else {
+ scope.forceDelegate = true;
+ res = cx.evaluateString(scope, expr.getLVariable(), "<expr>", 0, null);
+ }
OVarType varType = expr.getReferencedVariable(expr.getLVariable()).type;
// Setting variables runtime type
if (res instanceof String) varType.underlyingType = OVarType.STRING_TYPE;
@@ -139,12 +144,15 @@
private SimPELExpr _expr;
private Context _cx;
private HashMap<String,Object> _env = new HashMap<String,Object>();
+ private Scriptable _parentScope;
+ public boolean forceDelegate = false;
private ODEDelegator(Scriptable obj, EvaluationContext evaluationContext, SimPELExpr expr, Context cx) {
super(obj);
_evaluationContext = evaluationContext;
_expr = expr;
_cx = cx;
+ _parentScope = obj;
}
public void setXmlLib(XMLLib _xmlLib) {
@@ -154,7 +162,7 @@
public Object get(String name, Scriptable start) {
try {
OScope.Variable v = _expr.getReferencedVariable(name);
- if (v == null) return super.get(name, start);
+ if (v == null || forceDelegate) return super.get(name, start);
if (_env.get(name) != null) return _env.get(name);
@@ -229,7 +237,6 @@
public void put(String name, Scriptable start, Object value) {
_env.put(name, value);
}
-
public HashMap<String, Object> getEnv() {
return _env;
@@ -238,6 +245,11 @@
public Scriptable getObj() {
return obj;
}
+
+ @Override
+ public Scriptable getParentScope() {
+ return _parentScope;
+ }
}
public Scriptable getScope(Context cx, OExpression oexpr) {