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) {