You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by jo...@apache.org on 2021/05/25 21:10:28 UTC
[royale-compiler] 01/02: MXMLPropertySpecifierNode: fixed Generated
byte code contains an operand stack underflow error when binding to a
property typed as Array in MXML using an element
This is an automated email from the ASF dual-hosted git repository.
joshtynjala pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-compiler.git
commit 6159732ebc3ae759716926473cec5e4f0c0c3961
Author: Josh Tynjala <jo...@apache.org>
AuthorDate: Tue May 25 13:39:10 2021 -0700
MXMLPropertySpecifierNode: fixed Generated byte code contains an operand stack underflow error when binding to a property typed as Array in MXML using an element
The same error did not happen using an attribute. It was because the compiler was creating an implicit <fx:Array> element that wasn't necessary with binding.
---
.../royale/compiler/internal/tree/mxml/MXMLDataBindingParser.java | 5 +++++
.../compiler/internal/tree/mxml/MXMLPropertySpecifierNode.java | 5 ++++-
2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLDataBindingParser.java b/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLDataBindingParser.java
index 5b3e8dc..d25b814 100644
--- a/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLDataBindingParser.java
+++ b/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLDataBindingParser.java
@@ -78,6 +78,11 @@ class MXMLDataBindingParser
*/
private static final char BACKSLASH = '\\';
+ public static boolean willParse(ISourceFragment[] fragments)
+ {
+ return scan(fragments) != null;
+ }
+
/**
* Parses source fragments looking for databinding expressions.
* <p>
diff --git a/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLPropertySpecifierNode.java b/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLPropertySpecifierNode.java
index 89925e7..ff77c65 100644
--- a/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLPropertySpecifierNode.java
+++ b/compiler/src/main/java/org/apache/royale/compiler/internal/tree/mxml/MXMLPropertySpecifierNode.java
@@ -601,7 +601,10 @@ class MXMLPropertySpecifierNode extends MXMLSpecifierNodeBase implements IMXMLPr
// then create an implicit Array tag and initialize it from the
// child tags of the property tag.
IDefinition definition = getDefinition();
- if (definition != null && definition.getTypeAsDisplayString().equals(IASLanguageConstants.Array))
+ if (definition != null
+ && definition.getTypeAsDisplayString().equals(IASLanguageConstants.Array)
+ // don't crate an implicit MXML Array if the contents parse to a data binding expression -JT
+ && !MXMLDataBindingParser.willParse(info.getSourceFragments()))
{
if (instanceNode == null || ((!(instanceNode instanceof MXMLArrayNode)) &&
!instanceNode.getClassReference(project).getQualifiedName().equals(IASLanguageConstants.Array)))