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