Revision: 20364
          http://sourceforge.net/p/jmol/code/20364
Author:   hansonr
Date:     2015-03-07 16:45:45 +0000 (Sat, 07 Mar 2015)
Log Message:
-----------
Jmol.___JmolVersion="14.2.13_2015.03.07"
synchronized with 14.3.12_2015.03.07

bug fix: x[2] = y[2] fails

Modified Paths:
--------------
    branches/v14_2/Jmol/src/org/jmol/script/ScriptCompiler.java
    branches/v14_2/Jmol/src/org/jmol/script/ScriptEval.java
    branches/v14_2/Jmol/src/org/jmol/script/ScriptExpr.java
    branches/v14_2/Jmol/src/org/jmol/script/ScriptMathProcessor.java
    branches/v14_2/Jmol/src/org/jmol/script/T.java
    branches/v14_2/Jmol/src/org/jmol/viewer/Jmol.properties

Modified: branches/v14_2/Jmol/src/org/jmol/script/ScriptCompiler.java
===================================================================
--- branches/v14_2/Jmol/src/org/jmol/script/ScriptCompiler.java 2015-03-05 
14:47:07 UTC (rev 20363)
+++ branches/v14_2/Jmol/src/org/jmol/script/ScriptCompiler.java 2015-03-07 
16:45:45 UTC (rev 20364)
@@ -1024,12 +1024,12 @@
           cchToken = 1;
           switch (ch) {
           case '[':
-            addTokenToPrefix(T.o(T.leftsquare, "["));
+            addTokenToPrefix(T.tokenArrayOpen);
             bracketCount++;
             return CONTINUE;
           case '.':
             if (ch2 == '.') {
-              addTokenToPrefix(T.o(T.leftsquare, "["));
+              addTokenToPrefix(T.tokenArrayOpen);
               cchToken = 2;
               isDotDot = true;
               return CONTINUE;
@@ -1301,7 +1301,7 @@
 
     if (isDotDot) {
       addTokenToPrefix(T.o(T.string, ident));
-      addTokenToPrefix(T.o(T.rightsquare, "]"));
+      addTokenToPrefix(T.tokenArrayClose);
       isDotDot = false;
       return CONTINUE;
     }
@@ -1496,7 +1496,7 @@
       break;
     case T.perper:
       isDotDot = true;
-      addTokenToPrefix(T.o(T.leftsquare, "["));
+      addTokenToPrefix(T.tokenArrayOpen);
       return CONTINUE;
     }
     return OK;
@@ -1763,24 +1763,23 @@
         flowContext.setLine();
       }
       break;
-    case T.set:
     case T.var:
-      if (tokCommand == T.var) {
-        if (nTokens == 1) {
-          replaceCommand(T.tokenSetVar);
-          newContextVariable(ident);
-          break;
-        } else if (ident.equals(",")) {
-          return CONTINUE;
-        } else if (!PT.isLetter(ident.charAt(0))) {
-          if (nTokens != 2)
-            return ERROR(ERROR_badArgumentCount);
-          replaceCommand(T.tokenSet);
-        } else {
-          newContextVariable(ident);
-          break;
-        }
+      if (nTokens == 1) {
+        replaceCommand(T.tokenSetVar);
+        newContextVariable(ident);
+        break;
+      } else if (ident.equals(",")) {
+        return CONTINUE;
+      } else if (!PT.isLetter(ident.charAt(0))) {
+        if (nTokens != 2 || ident.equals("["))
+          return ERROR(ERROR_badArgumentCount);
+        replaceCommand(T.tokenSet);
+      } else {
+        newContextVariable(ident);
+        break;
       }
+      //$FALL-THROUGH$
+    case T.set:
       if (theTok == T.leftbrace)
         setBraceCount++;
       else if (theTok == T.rightbrace) {

Modified: branches/v14_2/Jmol/src/org/jmol/script/ScriptEval.java
===================================================================
--- branches/v14_2/Jmol/src/org/jmol/script/ScriptEval.java     2015-03-05 
14:47:07 UTC (rev 20363)
+++ branches/v14_2/Jmol/src/org/jmol/script/ScriptEval.java     2015-03-07 
16:45:45 UTC (rev 20364)
@@ -7071,7 +7071,6 @@
         vwr.removeUserVariable(key.toLowerCase());
       justShow = true;
     }
-
     if (!justShow) {
       setVariable(1, 0, key, true);
       if (!isJmolSet)

Modified: branches/v14_2/Jmol/src/org/jmol/script/ScriptExpr.java
===================================================================
--- branches/v14_2/Jmol/src/org/jmol/script/ScriptExpr.java     2015-03-05 
14:47:07 UTC (rev 20363)
+++ branches/v14_2/Jmol/src/org/jmol/script/ScriptExpr.java     2015-03-07 
16:45:45 UTC (rev 20364)
@@ -122,7 +122,8 @@
    *        variables
    * @param localVar
    *        x or y in above for(), select() examples
-   * @param isSpecialAssignment TODO
+   * @param isSpecialAssignment 
+   *        x[n] = .... 
    * @return either a vector or a value, caller's choice.
    * @throws ScriptException
    *         errors are thrown directly to the Eval error system.
@@ -448,9 +449,10 @@
               break;
             //$FALL-THROUGH$
           default:
-            rpn.addOp(T.o(T.leftsquare, "["));
+            // turn x.y into x[y] prior to equal sign in special assignment
+            rpn.addOp(T.tokenArrayOpen);
             rpn.addXStr(optParameterAsString(++i));
-            rpn.addOp(T.o(T.rightsquare, "]"));
+            rpn.addOp(T.tokenArrayClose);
             continue;
           }
         }
@@ -1984,28 +1986,38 @@
     // special assignment of a known variable
 
     if (isSet && !isExpression) {
-      // pt will be 1 unless...
+      // not {....}.x = 
       switch (tokAt(2)) {
+      default:
+        // standard case
+        // a = ...
+        // set a ...
+        pt = 2;
+        break;
+      case T.opEQ:
+        // standard case for var
+        // var a = ...
+        pt = 3;
+        break;
       case T.spacebeforesquare:
       case T.leftsquare:
-        if (st[0].intValue == '=')
+        // x[n] = ...
+        if (st[0].intValue == 61) { // '='
+          // not clear what this is about...
           pt = 2;
-        break;
+          break;
+        } 
+        //$FALL-THROUGH$
       case T.per:
       case T.perper:
+        // x.y = ...
+        // pt will be 1 in this case -- evaluate x
+        // result array will hold selector .y and result
+        // do not assign a variable
+        // isspecialAssignment
+        key = null;
         break;
-      case T.opEQ:
-        // var a = ...
-        pt = 3;
-        break;
-      default:
-        // a = ...
-        // set a ...
-        pt = 2;
-        break;
       }
-      if (pt == 1)
-        key = null;
     }
     int nv = 0;
     Lst<SV> v = (Lst<SV>) parameterExpression(pt, ptMax, key, true, true, -1,
@@ -2015,7 +2027,7 @@
       invArg();
     if (chk)
       return null;
-    SV tv = SV.newS("").setv(v.get(nv - 1));
+    SV tv = SV.selectItemVar(SV.newS("").setv(v.get(nv - 1)));
     if (nv > 1) {
       SV sel = (nv > 2 ? v.get(1) : null);
       t = v.get(0);

Modified: branches/v14_2/Jmol/src/org/jmol/script/ScriptMathProcessor.java
===================================================================
--- branches/v14_2/Jmol/src/org/jmol/script/ScriptMathProcessor.java    
2015-03-05 14:47:07 UTC (rev 20363)
+++ branches/v14_2/Jmol/src/org/jmol/script/ScriptMathProcessor.java    
2015-03-07 16:45:45 UTC (rev 20364)
@@ -98,6 +98,21 @@
   private boolean allowUnderflow;
   private boolean isAssignment;
 
+  /**
+   * 
+   * @param eval
+   * @param isSpecialAssignment  
+   *       x[n] = ...
+   * @param isArrayItem
+   * @param asVector
+   *       return a Lst(SV) from getResult()
+   * @param asBitSet
+   *       return a (SV)bitset
+   * @param allowUnderflow
+   *       expression can terminate prior to end of statement
+   *       
+   * @param key
+   */
   ScriptMathProcessor(ScriptExpr eval, boolean isSpecialAssignment, boolean 
isArrayItem,
       boolean asVector, boolean asBitSet, boolean allowUnderflow, String key) {
     this.eval = eval;
@@ -538,7 +553,7 @@
           // x[3] = .... ; add a special flag for this, 
           // waiting until the very end to apply it.
           wasX = false;
-          addX(SV.newT(T.tokenArraySelector));
+          addX(SV.newT(T.tokenArrayOpen));
           break;
         }
         if (!doSelection())
@@ -851,7 +866,7 @@
       return true;
 
     SV x2 = getX();
-    if (x2 == T.tokenArraySelector)
+    if (x2 == T.tokenArrayOpen)
       return false;
 
     //unnecessary  -- getX() does this. x2 = selectX(x2);

Modified: branches/v14_2/Jmol/src/org/jmol/script/T.java
===================================================================
--- branches/v14_2/Jmol/src/org/jmol/script/T.java      2015-03-05 14:47:07 UTC 
(rev 20363)
+++ branches/v14_2/Jmol/src/org/jmol/script/T.java      2015-03-07 16:45:45 UTC 
(rev 20364)
@@ -1379,8 +1379,9 @@
 
   public final static T tokenLeftParen = o(leftparen, "(");
   public final static T tokenRightParen = o(rightparen, ")");
-  public final static T tokenArraySquare = o(array, "[");
-  public final static T tokenArraySelector = o(leftsquare, "[");
+  public final static T tokenArraySquare = o(array, "[");        // special 
operator stack flag
+  public final static T tokenArrayOpen = o(leftsquare, "[");     // used also 
as special operand stack flag
+  public final static T tokenArrayClose = o(rightsquare, "]");   
  
   public final static T tokenExpressionBegin = o(expressionBegin, 
"expressionBegin");
   public final static T tokenExpressionEnd   = o(expressionEnd, 
"expressionEnd");

Modified: branches/v14_2/Jmol/src/org/jmol/viewer/Jmol.properties
===================================================================
--- branches/v14_2/Jmol/src/org/jmol/viewer/Jmol.properties     2015-03-05 
14:47:07 UTC (rev 20363)
+++ branches/v14_2/Jmol/src/org/jmol/viewer/Jmol.properties     2015-03-07 
16:45:45 UTC (rev 20364)
@@ -4,10 +4,11 @@
 # THIS IS THE RELEASE BRANCH 
 # BUG FIXES ONLY, PLEASE
 
-Jmol.___JmolVersion="14.2.13_2015.03.06"
-synchronized with 14.3.12_2015.03.06
-released
+Jmol.___JmolVersion="14.2.13_2015.03.07"
+synchronized with 14.3.12_2015.03.07
 
+bug fix: x[2] = y[2] fails
+
 adds IMAGE command, Windows BMP image file reading
 
 new feature: NBO command with no arguments starts NBO panel (Java application 
only)

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
Dive into the World of Parallel Programming The Go Parallel Website, sponsored
by Intel and developed in partnership with Slashdot Media, is your hub for all
things parallel software development, from weekly thought leadership blogs to
news, videos, case studies, tutorials and more. Take a look and join the 
conversation now. http://goparallel.sourceforge.net/
_______________________________________________
Jmol-commits mailing list
Jmol-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jmol-commits

Reply via email to