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
The following commit(s) were added to refs/heads/develop by this push:
new 8af5173a3 MXMLRoyaleEmitter: fix null exceptions when emitter
encounters variables or functions without a type declaration
8af5173a3 is described below
commit 8af5173a35342f3ff6e2b2ac3840cc4e32071bd7
Author: Josh Tynjala <[email protected]>
AuthorDate: Thu May 25 11:57:19 2023 -0700
MXMLRoyaleEmitter: fix null exceptions when emitter encounters variables or
functions without a type declaration
---
.../codegen/mxml/royale/MXMLRoyaleEmitter.java | 57 ++++++++++++++++++----
1 file changed, 47 insertions(+), 10 deletions(-)
diff --git
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyaleEmitter.java
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyaleEmitter.java
index 4034a5fed..ce5b26088 100644
---
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyaleEmitter.java
+++
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyaleEmitter.java
@@ -53,7 +53,6 @@ import
org.apache.royale.compiler.constants.IASKeywordConstants;
import org.apache.royale.compiler.constants.IASLanguageConstants;
import org.apache.royale.compiler.definitions.IClassDefinition;
import org.apache.royale.compiler.definitions.IDefinition;
-import org.apache.royale.compiler.definitions.IFunctionDefinition;
import org.apache.royale.compiler.definitions.INamespaceDefinition;
import org.apache.royale.compiler.definitions.ITypeDefinition;
import org.apache.royale.compiler.internal.as.codegen.InstructionListNode;
@@ -1251,8 +1250,13 @@ public class MXMLRoyaleEmitter extends MXMLEmitter
implements
varData.add(data);
data.name = varNode.getName();
data.isStatic = varNode.hasModifier(ASModifier.STATIC);
- String qualifiedTypeName =
varNode.getVariableTypeNode().resolveType(getMXMLWalker().getProject()).getQualifiedName();
- data.type = (qualifiedTypeName);
+ String qualifiedTypeName = "*";
+ IExpressionNode variableTypeNode =
varNode.getVariableTypeNode();
+ if (variableTypeNode != null)
+ {
+ qualifiedTypeName =
variableTypeNode.resolveType(getMXMLWalker().getProject()).getQualifiedName();
+ }
+ data.type = qualifiedTypeName;
IMetaTagsNode metaData = varNode.getMetaTags();
if (metaData != null)
{
@@ -1337,7 +1341,11 @@ public class MXMLRoyaleEmitter extends MXMLEmitter
implements
data.name = methodNode.getName();
String qualifiedTypeName = methodNode.getReturnType();
if (!(qualifiedTypeName.equals("") ||
qualifiedTypeName.equals("void"))) {
- qualifiedTypeName =
methodNode.getReturnTypeNode().resolveType(fjs).getQualifiedName();;
+ IExpressionNode returnTypeNode =
methodNode.getReturnTypeNode();
+ if (returnTypeNode != null)
+ {
+ qualifiedTypeName =
returnTypeNode.resolveType(fjs).getQualifiedName();;
+ }
}
data.type = qualifiedTypeName;
data.declaredBy = cdef.getQualifiedName();
@@ -1432,14 +1440,31 @@ public class MXMLRoyaleEmitter extends MXMLEmitter
implements
data.isStatic = accessorNode.hasModifier(ASModifier.STATIC);
if (p.getter != null)
{
- data.type =
p.getter.getReturnTypeNode().resolveType(fjs).getQualifiedName();
- if (p.setter !=null) {
+ String returnType = "*";
+ IExpressionNode returnTypeNode =
p.getter.getReturnTypeNode();
+ if (returnTypeNode != null)
+ {
+ returnType =
returnTypeNode.resolveType(fjs).getQualifiedName();
+ }
+ data.type = returnType;
+ if (p.setter != null)
+ {
data.access = "readwrite";
- } else data.access = "readonly";
+ }
+ else
+ {
+ data.access = "readonly";
+ }
}
else
{
- data.type =
p.setter.getVariableTypeNode().resolveType(fjs).getQualifiedName();
+ String returnType = "*";
+ IExpressionNode variableTypeNode =
p.setter.getVariableTypeNode();
+ if (variableTypeNode != null)
+ {
+ returnType =
variableTypeNode.resolveType(fjs).getQualifiedName();
+ }
+ data.type = returnType;
data.access = "writeonly";
}
@@ -2174,7 +2199,13 @@ public class MXMLRoyaleEmitter extends MXMLEmitter
implements
bindableVarInfo.metaTags = tags;
}
- bindableVarInfo.type =
variableNode.getVariableTypeNode().resolveType(getMXMLWalker().getProject()).getQualifiedName();
+ String bindableVarType = "*";
+ IExpressionNode variableTypeNode =
variableNode.getVariableTypeNode();
+ if (variableTypeNode != null)
+ {
+ bindableVarType =
variableTypeNode.resolveType(getMXMLWalker().getProject()).getQualifiedName();
+ }
+ bindableVarInfo.type = bindableVarType;
((JSRoyaleEmitter)
asEmitter).getModel().getBindableVars().put(variableNode.getName(),
bindableVarInfo);
}
}
@@ -3658,7 +3689,13 @@ public class MXMLRoyaleEmitter extends MXMLEmitter
implements
write("_"); // use backing variable
write(ASEmitterTokens.SPACE);
writeToken(ASEmitterTokens.EQUAL);
- fjs.emitAssignmentCoercion(vnode,
varnode.getVariableTypeNode().resolve(getMXMLWalker().getProject()));
+ IDefinition varTypeDef = null;
+ IExpressionNode variableTypeNode =
varnode.getVariableTypeNode();
+ if (variableTypeNode != null)
+ {
+ varTypeDef =
variableTypeNode.resolve(getMXMLWalker().getProject());
+ }
+ fjs.emitAssignmentCoercion(vnode, varTypeDef);
write(ASEmitterTokens.SEMICOLON);
}