@@ -40,9 +40,9 @@ public DictionaryAccessDefaultBinding(
40
40
_argumentList = argumentList ;
41
41
}
42
42
43
- private void ResolveArgumentList ( Declaration calledProcedure )
43
+ private static void ResolveArgumentList ( Declaration calledProcedure , ArgumentList argumentList )
44
44
{
45
- foreach ( var argument in _argumentList . Arguments )
45
+ foreach ( var argument in argumentList . Arguments )
46
46
{
47
47
argument . Resolve ( calledProcedure ) ;
48
48
}
@@ -55,49 +55,54 @@ public IBoundExpression Resolve()
55
55
_lExpression = _lExpressionBinding . Resolve ( ) ;
56
56
}
57
57
58
- if ( _lExpression . Classification == ExpressionClassification . ResolutionFailed )
58
+ return Resolve ( _lExpression , _argumentList , _expression ) ;
59
+ }
60
+
61
+ private static IBoundExpression Resolve ( IBoundExpression lExpression , ArgumentList argumentList , ParserRuleContext expression )
62
+ {
63
+ if ( lExpression . Classification == ExpressionClassification . ResolutionFailed )
59
64
{
60
- ResolveArgumentList ( null ) ;
61
- return CreateFailedExpression ( _lExpression ) ;
65
+ ResolveArgumentList ( null , argumentList ) ;
66
+ return CreateFailedExpression ( lExpression , argumentList ) ;
62
67
}
63
68
64
- var lDeclaration = _lExpression . ReferencedDeclaration ;
69
+ var lDeclaration = lExpression . ReferencedDeclaration ;
65
70
66
- if ( _lExpression . Classification == ExpressionClassification . Unbound )
71
+ if ( lExpression . Classification == ExpressionClassification . Unbound )
67
72
{
68
73
/*
69
74
<l-expression> is classified as an unbound member. In this case, the dictionary access expression
70
75
is classified as an unbound member with a declared type of Variant, referencing <l-expression> with no member name.
71
76
*/
72
- ResolveArgumentList ( lDeclaration ) ;
73
- return new DictionaryAccessExpression ( null , ExpressionClassification . Unbound , _expression , _lExpression , _argumentList ) ;
77
+ ResolveArgumentList ( lDeclaration , argumentList ) ;
78
+ return new DictionaryAccessExpression ( null , ExpressionClassification . Unbound , expression , lExpression , argumentList ) ;
74
79
}
75
80
76
81
if ( lDeclaration == null )
77
82
{
78
- ResolveArgumentList ( null ) ;
79
- return CreateFailedExpression ( _lExpression ) ;
83
+ ResolveArgumentList ( null , argumentList ) ;
84
+ return CreateFailedExpression ( lExpression , argumentList ) ;
80
85
}
81
86
82
87
var asTypeName = lDeclaration . AsTypeName ;
83
88
var asTypeDeclaration = lDeclaration . AsTypeDeclaration ;
84
89
85
- return ResolveViaDefaultMember ( _lExpression , asTypeName , asTypeDeclaration ) ;
90
+ return ResolveViaDefaultMember ( lExpression , asTypeName , asTypeDeclaration , argumentList , expression ) ;
86
91
}
87
92
88
- private IBoundExpression CreateFailedExpression ( IBoundExpression lExpression )
93
+ private static IBoundExpression CreateFailedExpression ( IBoundExpression lExpression , ArgumentList argumentList )
89
94
{
90
95
var failedExpr = new ResolutionFailedExpression ( ) ;
91
96
failedExpr . AddSuccessfullyResolvedExpression ( lExpression ) ;
92
- foreach ( var arg in _argumentList . Arguments )
97
+ foreach ( var arg in argumentList . Arguments )
93
98
{
94
99
failedExpr . AddSuccessfullyResolvedExpression ( arg . Expression ) ;
95
100
}
96
101
97
102
return failedExpr ;
98
- }
103
+ }
99
104
100
- private IBoundExpression ResolveViaDefaultMember ( IBoundExpression lExpression , string asTypeName , Declaration asTypeDeclaration , int recursionDepth = 0 )
105
+ private static IBoundExpression ResolveViaDefaultMember ( IBoundExpression lExpression , string asTypeName , Declaration asTypeDeclaration , ArgumentList argumentList , ParserRuleContext expression , int recursionDepth = 0 )
101
106
{
102
107
if ( Tokens . Variant . Equals ( asTypeName , StringComparison . InvariantCultureIgnoreCase )
103
108
|| Tokens . Object . Equals ( asTypeName , StringComparison . InvariantCultureIgnoreCase ) )
@@ -107,8 +112,8 @@ The declared type of <l-expression> is Object or Variant.
107
112
In this case, the dictionary access expression is classified as an unbound member with
108
113
a declared type of Variant, referencing <l-expression> with no member name.
109
114
*/
110
- ResolveArgumentList ( null ) ;
111
- return new DictionaryAccessExpression ( null , ExpressionClassification . Unbound , _expression , lExpression , _argumentList ) ;
115
+ ResolveArgumentList ( null , argumentList ) ;
116
+ return new DictionaryAccessExpression ( null , ExpressionClassification . Unbound , expression , lExpression , argumentList ) ;
112
117
}
113
118
114
119
/*
@@ -120,8 +125,8 @@ The declared type of <l-expression> is Object or Variant.
120
125
|| ! IsPropertyGetLetFunctionProcedure ( defaultMember )
121
126
|| ! IsPublic ( defaultMember ) )
122
127
{
123
- ResolveArgumentList ( null ) ;
124
- return CreateFailedExpression ( lExpression ) ;
128
+ ResolveArgumentList ( null , argumentList ) ;
129
+ return CreateFailedExpression ( lExpression , argumentList ) ;
125
130
}
126
131
127
132
var defaultMemberClassification = DefaultMemberClassification ( defaultMember ) ;
@@ -135,8 +140,8 @@ The declared type of <l-expression> is Object or Variant.
135
140
dictionary access expression references this default member and takes on its classification and
136
141
declared type.
137
142
*/
138
- ResolveArgumentList ( defaultMember ) ;
139
- return new DictionaryAccessExpression ( defaultMember , defaultMemberClassification , _expression , lExpression , _argumentList ) ;
143
+ ResolveArgumentList ( defaultMember , argumentList ) ;
144
+ return new DictionaryAccessExpression ( defaultMember , defaultMemberClassification , expression , lExpression , argumentList ) ;
140
145
}
141
146
142
147
if ( parameters . Count ( param => ! param . IsOptional ) == 0
@@ -148,11 +153,11 @@ declared type.
148
153
same <argument-list>.
149
154
*/
150
155
151
- return ResolveRecursiveDefaultMember ( defaultMember , defaultMemberClassification , recursionDepth ) ;
156
+ return ResolveRecursiveDefaultMember ( defaultMember , defaultMemberClassification , argumentList , expression , recursionDepth ) ;
152
157
}
153
158
154
- ResolveArgumentList ( null ) ;
155
- return CreateFailedExpression ( lExpression ) ;
159
+ ResolveArgumentList ( null , argumentList ) ;
160
+ return CreateFailedExpression ( lExpression , argumentList ) ;
156
161
}
157
162
158
163
private static bool IsCompatibleWithOneStringArgument ( List < ParameterDeclaration > parameters )
@@ -163,16 +168,18 @@ private static bool IsCompatibleWithOneStringArgument(List<ParameterDeclaration>
163
168
|| Tokens . Variant . Equals ( parameters [ 0 ] . AsTypeName , StringComparison . InvariantCultureIgnoreCase ) ) ;
164
169
}
165
170
166
- private IBoundExpression ResolveRecursiveDefaultMember ( Declaration defaultMember , ExpressionClassification defaultMemberClassification , int recursionDepth )
171
+ private static IBoundExpression ResolveRecursiveDefaultMember ( Declaration defaultMember , ExpressionClassification defaultMemberClassification , ArgumentList argumentList , ParserRuleContext expression , int recursionDepth )
167
172
{
168
- var defaultMemberAsLExpression = new SimpleNameExpression ( defaultMember , defaultMemberClassification , _expression ) ;
173
+ var defaultMemberAsLExpression = new SimpleNameExpression ( defaultMember , defaultMemberClassification , expression ) ;
169
174
var defaultMemberAsTypeName = defaultMember . AsTypeName ;
170
175
var defaultMemberAsTypeDeclaration = defaultMember . AsTypeDeclaration ;
171
176
172
177
return ResolveViaDefaultMember (
173
178
defaultMemberAsLExpression ,
174
179
defaultMemberAsTypeName ,
175
180
defaultMemberAsTypeDeclaration ,
181
+ argumentList ,
182
+ expression ,
176
183
recursionDepth + 1 ) ;
177
184
}
178
185
@@ -193,7 +200,7 @@ private static bool IsPublic(Declaration declaration)
193
200
|| accessibility == Accessibility . Public ;
194
201
}
195
202
196
- private ExpressionClassification DefaultMemberClassification ( Declaration defaultMember )
203
+ private static ExpressionClassification DefaultMemberClassification ( Declaration defaultMember )
197
204
{
198
205
if ( defaultMember . DeclarationType . HasFlag ( DeclarationType . Property ) )
199
206
{
0 commit comments