Skip to content

Commit bed752c

Browse files
authored
Merge pull request #3554 from Vogel612/jagged-arrays
Stop crashing resolver on jagged arrays.
2 parents cca487c + 649fc72 commit bed752c

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed

Rubberduck.Parsing/Binding/IndexDefaultBinding.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ with a parameter list that cannot accept any parameters and an <argument-list> t
127127
bool isVariable = lExpression.Classification == ExpressionClassification.Variable;
128128
bool propertyWithParameters = lExpression.Classification == ExpressionClassification.Property && !((IParameterizedDeclaration)lExpression.ReferencedDeclaration).Parameters.Any();
129129
bool functionWithParameters = lExpression.Classification == ExpressionClassification.Function && !((IParameterizedDeclaration)lExpression.ReferencedDeclaration).Parameters.Any();
130-
if (isVariable || ((propertyWithParameters || functionWithParameters) && _argumentList.HasArguments))
130+
if (lExpression.ReferencedDeclaration != null && (isVariable || ((propertyWithParameters || functionWithParameters) && _argumentList.HasArguments)))
131131
{
132132
IBoundExpression boundExpression = null;
133133
var asTypeName = lExpression.ReferencedDeclaration.AsTypeName;

RubberduckTests/Grammar/ResolverTests.cs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,32 @@ End Function
112112
}
113113
}
114114

115+
[TestCategory("Resolver")]
116+
[TestMethod]
117+
public void JaggedArrayReference_DoesNotBlowUp()
118+
{
119+
// see https://github.com/rubberduck-vba/Rubberduck/issues/3098
120+
var code = @"Option Explicit
121+
122+
Public Sub Test()
123+
Dim varTemp() As Variant
124+
125+
ReDim varTemp(0)
126+
127+
varTemp(0) = Array(0)
128+
varTemp(0)(0) = Array(0)
129+
130+
Debug.Print varTemp(0)(0)
131+
End Sub
132+
";
133+
134+
using (var state = Resolve(code))
135+
{
136+
var declaration = state.AllUserDeclarations.Single(item => item.DeclarationType == DeclarationType.Variable && item.IdentifierName == "varTemp");
137+
Assert.IsTrue(declaration.IsArray);
138+
}
139+
}
140+
115141
[TestCategory("Resolver")]
116142
[TestMethod]
117143
public void OptionalParameterDefaultConstValue_IsReferenceToDeclaredConst()

0 commit comments

Comments
 (0)