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