Propose this be integrated to 4.0.1

Benefit:  Legal JS expression will not be mis-parenthesized
Risk: low, I recompiled the LFC and there are no differences

On 2007-04-07, at 13:09 EDT, [EMAIL PROTECTED] wrote:

Author: ptw
Date: 2007-04-07 10:09:34 -0700 (Sat, 07 Apr 2007)
New Revision: 4607

Modified:
openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/ sc/CodeGenerator.java openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/ sc/Compiler.java
Log:
Change 20070406-ptw-u by [EMAIL PROTECTED] on 2007-04-06 20:33:58 EDT
    in /Users/ptw/OpenLaszlo/legals-1
    for http://svn.openlaszlo.org/openlaszlo/branches/legals

Summary: Script compiler compressor precedence error

Bugs Fixed:
LPP-3858 'Script compiler compressor precedence error'

Technical Reviewer: hminsky (Message-ID: <[EMAIL PROTECTED]>)
QA Reviewer: promanik (pending)
Doc Reviewer: (pending)

Details:
    Compiler: Consider precedence when unparsing property and index
    references

    CodeGenerator: Permit arbitrary expressions as lhs of property
    reference

Tests:
    Test case in bug compiles for swf and dhtml



Modified: openlaszlo/branches/legals/WEB-INF/lps/server/src/org/ openlaszlo/sc/CodeGenerator.java
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/server/src/org/ openlaszlo/sc/CodeGenerator.java 2007-04-07 07:00:00 UTC (rev 4606) +++ openlaszlo/branches/legals/WEB-INF/lps/server/src/org/ openlaszlo/sc/CodeGenerator.java 2007-04-07 17:09:34 UTC (rev 4607)
@@ -3217,21 +3217,14 @@
     if (node instanceof ASTThisReference) {
return new VariableReference(this, node, referenceCount, "this");
     }
-    if (node instanceof ASTArrayLiteral ||
-        node instanceof ASTLiteral ||
-        node instanceof ASTObjectLiteral ||
-        node instanceof ASTCallExpression ||
-        node instanceof ASTNewExpression) {
-      return new LiteralReference(this, node, referenceCount);
-    }
     SimpleNode[] args = node.getChildren();
     if (node instanceof ASTPropertyIdentifierReference) {
return new PropertyReference(this, node, referenceCount, args [0], (ASTIdentifier)args[1]);
     } else if (node instanceof ASTPropertyValueReference) {
return new IndexReference(this, node, referenceCount, args [0], args[1]);
-    } else {
- throw new SemanticError("Invalid reference expression: " + (new Compiler.ParseTreePrinter()).visit(node), node);
     }
+
+    return new LiteralReference(this, node, referenceCount);
   }
 }


Modified: openlaszlo/branches/legals/WEB-INF/lps/server/src/org/ openlaszlo/sc/Compiler.java
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/server/src/org/ openlaszlo/sc/Compiler.java 2007-04-07 07:00:00 UTC (rev 4606) +++ openlaszlo/branches/legals/WEB-INF/lps/server/src/org/ openlaszlo/sc/Compiler.java 2007-04-07 17:09:34 UTC (rev 4607)
@@ -1156,9 +1156,17 @@
       return children[0] + children[1];
     }
public String visitPropertyIdentifierReference(SimpleNode node, String[] children) {
+      // These have prec of 0 even though they don't have ops
+      int thisPrec = 0;
+      for (int i = 0; i < children.length; i++) {
+ children[i] = maybeAddParens(thisPrec, node.get(i), children[i], true);
+      }
       return children[0] + "." + children[1];
     }
public String visitPropertyValueReference(SimpleNode node, String[] children) {
+      // These have prec of 0 even though they don't have ops
+      int thisPrec = 0;
+ children[0] = maybeAddParens(thisPrec, node.get(0), children [0], true);
       return children[0] + "[" + children[1] + "]";
     }
public String visitReturnStatement(SimpleNode node, String[] children) {
@@ -1243,7 +1251,7 @@
     }

public String maybeAddParens(int parentPrec, SimpleNode node, String nodeRep, boolean assoc) {
-      int thisPrec = 0;
+      int thisPrec = Integer.MAX_VALUE;
       if (node instanceof ASTBinaryExpressionSequence ||
           node instanceof ASTAssignmentExpression) {
thisPrec = prec(((ASTOperator)node.get(1)).getOperator(), false);


_______________________________________________
Laszlo-checkins mailing list
[email protected]
http://www.openlaszlo.org/mailman/listinfo/laszlo-checkins

Reply via email to