|
95 | 95 | <AbstractNode Name="BoundEarlyValuePlaceholderBase" Base="BoundValuePlaceholderBase"> |
96 | 96 | </AbstractNode> |
97 | 97 |
|
98 | | - <!-- |
99 | | - This node will not survive the local rewriting, |
100 | | - except in some scenarios in a Linq Expression Tree when the containing node |
101 | | - survives. |
102 | | - --> |
103 | | - <Node Name="BoundValuePlaceholder" Base="BoundValuePlaceholderBase"> |
| 98 | + <Node Name="BoundValuePlaceholder" Base="BoundValuePlaceholderBase" DoesNotSurvive="LocalRewriting"> |
104 | 99 | </Node> |
105 | 100 |
|
106 | 101 | <!-- |
|
113 | 108 |
|
114 | 109 | <!-- |
115 | 110 | This node is used to represent an expression returning value of a certain type. |
116 | | - It is used to perform intermediate binding, and will not survive the local rewriting. |
| 111 | + It is used to perform intermediate binding. |
117 | 112 | --> |
118 | | - <Node Name="BoundDeconstructValuePlaceholder" Base="BoundValuePlaceholderBase"> |
| 113 | + <Node Name="BoundDeconstructValuePlaceholder" Base="BoundValuePlaceholderBase" DoesNotSurvive="LocalRewriting"> |
119 | 114 | <Field Name="Type" Type="TypeSymbol" Override="true" Null="disallow"/> |
120 | 115 | <Field Name="VariableSymbol" Type="Symbol?"/> |
121 | 116 | <Field Name="IsDiscardExpression" Type="bool" Null="NotApplicable"/> |
|
124 | 119 | <!-- |
125 | 120 | In a tuple binary operator, this node is used to represent tuple elements in a tuple binary |
126 | 121 | operator, and to represent an element-wise comparison result to convert back to bool. |
127 | | - It does not survive the initial binding. |
128 | 122 | --> |
129 | | - <Node Name="BoundTupleOperandPlaceholder" Base="BoundValuePlaceholderBase"> |
| 123 | + <Node Name="BoundTupleOperandPlaceholder" Base="BoundValuePlaceholderBase" DoesNotSurvive="InitialBinding"> |
130 | 124 | <Field Name="Type" Type="TypeSymbol" Override="true" Null="disallow"/> |
131 | 125 | </Node> |
132 | 126 |
|
133 | 127 | <!-- |
134 | 128 | This node is used to represent an awaitable expression of a certain type, when binding an using-await statement. |
135 | 129 | --> |
136 | | - <Node Name="BoundAwaitableValuePlaceholder" Base="BoundValuePlaceholderBase"> |
| 130 | + <Node Name="BoundAwaitableValuePlaceholder" Base="BoundValuePlaceholderBase" DoesNotSurvive="StateMachineRewriting"> |
137 | 131 | <Field Name="Type" Type="TypeSymbol?" Override="true" Null="allow"/> |
138 | 132 | </Node> |
139 | 133 |
|
140 | 134 | <!-- |
141 | 135 | This node is used to represent an expression of a certain type, when attempting to bind its pattern dispose method |
142 | | - It does not survive past initial binding. |
143 | 136 | --> |
144 | | - <Node Name="BoundDisposableValuePlaceholder" Base="BoundValuePlaceholderBase"> |
| 137 | + <Node Name="BoundDisposableValuePlaceholder" Base="BoundValuePlaceholderBase" DoesNotSurvive="InitialBinding"> |
145 | 138 | <Field Name="Type" Type="TypeSymbol" Override="true" Null="disallow"/> |
146 | 139 | </Node> |
147 | 140 |
|
|
156 | 149 | <Field Name="Type" Type="TypeSymbol" Override="true" Null="disallow"/> |
157 | 150 | </Node> |
158 | 151 |
|
159 | | - <!-- This node is used to represent the receiver for an implicit Index or Range indexer. It does not survive lowering --> |
160 | | - <Node Name="BoundImplicitIndexerReceiverPlaceholder" Base="BoundValuePlaceholderBase"> |
| 152 | + <!-- This node is used to represent the receiver for an implicit Index or Range indexer. --> |
| 153 | + <Node Name="BoundImplicitIndexerReceiverPlaceholder" Base="BoundValuePlaceholderBase" DoesNotSurvive="LocalRewriting"> |
161 | 154 | <Field Name="Type" Type="TypeSymbol" Override="true" Null="disallow"/> |
162 | 155 | <Field Name="IsEquivalentToThisReference" Type="bool" PropertyOverrides="true"/> |
163 | 156 | </Node> |
164 | 157 |
|
165 | | - <!-- This node represents the receiver for a list pattern. It does not survive lowering --> |
166 | | - <Node Name="BoundListPatternReceiverPlaceholder" Base="BoundEarlyValuePlaceholderBase"> |
| 158 | + <!-- This node represents the receiver for a list pattern. --> |
| 159 | + <Node Name="BoundListPatternReceiverPlaceholder" Base="BoundEarlyValuePlaceholderBase" DoesNotSurvive="LocalRewriting"> |
167 | 160 | <Field Name="Type" Type="TypeSymbol" Override="true" Null="disallow"/> |
168 | 161 | </Node> |
169 | 162 |
|
170 | | - <!-- This node represents the Index value of accessing an element in a list pattern. It does not survive lowering --> |
171 | | - <Node Name="BoundListPatternIndexPlaceholder" Base="BoundEarlyValuePlaceholderBase"> |
| 163 | + <!-- This node represents the Index value of accessing an element in a list pattern. --> |
| 164 | + <Node Name="BoundListPatternIndexPlaceholder" Base="BoundEarlyValuePlaceholderBase" DoesNotSurvive="LocalRewriting"> |
172 | 165 | <Field Name="Type" Type="TypeSymbol" Override="true" Null="disallow"/> |
173 | 166 | </Node> |
174 | 167 |
|
175 | | - <!-- This node represents the receiver for a slice pattern. It does not survive lowering --> |
176 | | - <Node Name="BoundSlicePatternReceiverPlaceholder" Base="BoundEarlyValuePlaceholderBase"> |
| 168 | + <!-- This node represents the receiver for a slice pattern. --> |
| 169 | + <Node Name="BoundSlicePatternReceiverPlaceholder" Base="BoundEarlyValuePlaceholderBase" DoesNotSurvive="LocalRewriting"> |
177 | 170 | <Field Name="Type" Type="TypeSymbol" Override="true" Null="disallow"/> |
178 | 171 | </Node> |
179 | 172 |
|
180 | | - <!-- This node represents the Range value of accessing a range in a slice pattern. It does not survive lowering --> |
181 | | - <Node Name="BoundSlicePatternRangePlaceholder" Base="BoundEarlyValuePlaceholderBase"> |
| 173 | + <!-- This node represents the Range value of accessing a range in a slice pattern. --> |
| 174 | + <Node Name="BoundSlicePatternRangePlaceholder" Base="BoundEarlyValuePlaceholderBase" DoesNotSurvive="LocalRewriting"> |
182 | 175 | <Field Name="Type" Type="TypeSymbol" Override="true" Null="disallow"/> |
183 | 176 | </Node> |
184 | 177 |
|
|
393 | 386 | <Field Name="IsManaged" Type="bool"/> |
394 | 387 | </Node> |
395 | 388 | <!-- Represents an AddressOf operator that has not yet been assigned to a |
396 | | - target-type. It has no natural type, and should not survive initial binding |
397 | | - except in error cases that are observable via the SemanticModel. --> |
398 | | - <Node Name="BoundUnconvertedAddressOfOperator" Base="BoundExpression"> |
| 389 | + target-type. It has no natural type. --> |
| 390 | + <Node Name="BoundUnconvertedAddressOfOperator" Base="BoundExpression" DoesNotSurvive="InitialBinding"> |
399 | 391 | <Field Name="Operand" Type="BoundMethodGroup"/> |
400 | 392 | <!-- Type is null. --> |
401 | 393 | <Field Name="Type" Type="TypeSymbol?" Override="true" Null="always"/> |
|
637 | 629 | <Field Name="RightOperand" Type="BoundExpression" /> |
638 | 630 | </Node> |
639 | 631 |
|
640 | | - <Node Name="BoundUnconvertedConditionalOperator" Base="BoundExpression"> |
| 632 | + <Node Name="BoundUnconvertedConditionalOperator" Base="BoundExpression" DoesNotSurvive="InitialBinding"> |
641 | 633 | <!-- Type is null. --> |
642 | 634 | <Field Name="Type" Type="TypeSymbol?" Override="true" Null="always"/> |
643 | 635 |
|
|
694 | 686 | <Field Name="Expression" Type="BoundExpression"/> |
695 | 687 | </Node> |
696 | 688 |
|
697 | | - <Node Name="BoundAwaitableInfo" Base="BoundNode" HasValidate="true"> |
| 689 | + <Node Name="BoundAwaitableInfo" Base="BoundNode" HasValidate="true" DoesNotSurvive="StateMachineRewriting"> |
698 | 690 | <!-- Used to refer to the awaitable expression in GetAwaiter --> |
699 | 691 | <Field Name="AwaitableInstancePlaceholder" Type="BoundAwaitableValuePlaceholder?" Null="allow" /> |
700 | 692 | <Field Name="IsDynamic" Type="bool"/> |
|
709 | 701 | <Field Name="RuntimeAsyncAwaitCallPlaceholder" Type="BoundAwaitableValuePlaceholder?" Null="allow"/> |
710 | 702 | </Node> |
711 | 703 |
|
712 | | - <Node Name="BoundAwaitExpression" Base="BoundExpression"> |
| 704 | + <Node Name="BoundAwaitExpression" Base="BoundExpression" DoesNotSurvive="StateMachineRewriting"> |
713 | 705 | <!-- Non-null type is required for this node kind --> |
714 | 706 | <Field Name="Type" Type="TypeSymbol" Override="true" Null="disallow"/> |
715 | 707 |
|
|
843 | 835 | Default literals can convert to the target type. |
844 | 836 | Does not survive initial lowering. |
845 | 837 | --> |
846 | | - <Node Name="BoundDefaultLiteral" Base="BoundExpression"> |
| 838 | + <Node Name="BoundDefaultLiteral" Base="BoundExpression" DoesNotSurvive="LocalRewriting"> |
847 | 839 | <!-- Type is null. --> |
848 | 840 | <Field Name="Type" Type="TypeSymbol?" Override="true" Null="always"/> |
849 | 841 | </Node> |
|
1130 | 1122 | Bound node that represents a local function declaration: |
1131 | 1123 | void Foo() { } |
1132 | 1124 | --> |
1133 | | - <Node Name="BoundLocalFunctionStatement" Base="BoundStatement"> |
| 1125 | + <Node Name="BoundLocalFunctionStatement" Base="BoundStatement" DoesNotSurvive="ClosureConversion"> |
1134 | 1126 | <!-- Must be a LocalFunctionSymbol until the node reaches LocalRewriter --> |
1135 | 1127 | <Field Name="Symbol" Type="MethodSymbol"/> |
1136 | 1128 | <Field Name="BlockBody" Type="BoundBlock?"/> |
|
1161 | 1153 | <Field Name="Checked" Type="bool"/> |
1162 | 1154 | </Node> |
1163 | 1155 |
|
1164 | | - <Node Name="BoundYieldReturnStatement" Base="BoundStatement"> |
| 1156 | + <Node Name="BoundYieldReturnStatement" Base="BoundStatement" DoesNotSurvive="StateMachineRewriting"> |
1165 | 1157 | <Field Name="Expression" Type="BoundExpression" Null="disallow"/> |
1166 | 1158 | </Node> |
1167 | 1159 |
|
1168 | | - <Node Name="BoundYieldBreakStatement" Base="BoundStatement"/> |
| 1160 | + <Node Name="BoundYieldBreakStatement" Base="BoundStatement" DoesNotSurvive="StateMachineRewriting"/> |
1169 | 1161 |
|
1170 | 1162 | <Node Name="BoundThrowStatement" Base="BoundStatement"> |
1171 | 1163 | <Field Name="ExpressionOpt" Type="BoundExpression?"/> |
|
1223 | 1215 | <Field Name="LengthBasedStringSwitchDataOpt" Type="LengthBasedStringSwitchData?" /> |
1224 | 1216 | </Node> |
1225 | 1217 |
|
1226 | | - <Node Name="BoundIfStatement" Base="BoundStatement"> |
| 1218 | + <Node Name="BoundIfStatement" Base="BoundStatement" DoesNotSurvive="LocalRewriting"> |
1227 | 1219 | <Field Name="Condition" Type="BoundExpression"/> |
1228 | 1220 | <Field Name="Consequence" Type="BoundStatement"/> |
1229 | 1221 | <Field Name="AlternativeOpt" Type="BoundStatement?"/> |
|
1292 | 1284 | <Field Name="TargetPlaceholder" Type="BoundDeconstructValuePlaceholder" Null="disallow"/> |
1293 | 1285 | </Node> |
1294 | 1286 |
|
1295 | | - <Node Name="BoundUsingStatement" Base="BoundStatement"> |
| 1287 | + <Node Name="BoundUsingStatement" Base="BoundStatement" DoesNotSurvive="LocalRewriting"> |
1296 | 1288 | <!-- DeclarationsOpt and ExpressionOpt cannot both be non-null. --> |
1297 | 1289 | <Field Name="Locals" Type="ImmutableArray<LocalSymbol>"/> |
1298 | 1290 | <Field Name="DeclarationsOpt" Type="BoundMultipleLocalDeclarations?"/> |
|
1529 | 1521 | <Field Name="Label" Type="LabelSymbol" Null="disallow"/> |
1530 | 1522 | </Node> |
1531 | 1523 |
|
1532 | | - <Node Name="BoundUnconvertedSwitchExpression" Base="BoundSwitchExpression"> |
| 1524 | + <Node Name="BoundUnconvertedSwitchExpression" Base="BoundSwitchExpression" DoesNotSurvive="InitialBinding"> |
1533 | 1525 | </Node> |
1534 | 1526 |
|
1535 | 1527 | <!-- |
|
1881 | 1873 |
|
1882 | 1874 | <!-- |
1883 | 1875 | This node is used to represent a target-typed object creation expression |
1884 | | - It does not survive past initial binding. |
1885 | 1876 | --> |
1886 | | - <Node Name="BoundUnconvertedObjectCreationExpression" Base="BoundExpression"> |
| 1877 | + <Node Name="BoundUnconvertedObjectCreationExpression" Base="BoundExpression" DoesNotSurvive="InitialBinding"> |
1887 | 1878 | <!-- Type is not significant for this node type; always null --> |
1888 | 1879 | <Field Name="Type" Type="TypeSymbol?" Override="true" Null="always"/> |
1889 | 1880 | <Field Name="Arguments" Type="ImmutableArray<BoundExpression>"/> |
|
1927 | 1918 |
|
1928 | 1919 | <!-- |
1929 | 1920 | An unconverted collection expression. |
1930 | | - It does not survive past initial binding. |
1931 | 1921 | --> |
1932 | | - <Node Name="BoundUnconvertedCollectionExpression" Base="BoundCollectionExpressionBase"> |
| 1922 | + <Node Name="BoundUnconvertedCollectionExpression" Base="BoundCollectionExpressionBase" DoesNotSurvive="InitialBinding"> |
1933 | 1923 | <!-- Type is not significant for this node type; always null --> |
1934 | 1924 | <Field Name="Type" Type="TypeSymbol?" Override="true" Null="always"/> |
1935 | 1925 | </Node> |
|
1990 | 1980 | Once converted to a target type, they cannot be target-typed again. |
1991 | 1981 | The tuple literal is one which has not been converted to a target type. |
1992 | 1982 | --> |
1993 | | - <Node Name="BoundTupleLiteral" Base="BoundTupleExpression"> |
| 1983 | + <Node Name="BoundTupleLiteral" Base="BoundTupleExpression" DoesNotSurvive="InitialBinding"> |
1994 | 1984 | <!-- |
1995 | 1985 | It is possible for a tuple to not have a type in a literal form |
1996 | 1986 | Ex: |
|
2345 | 2335 |
|
2346 | 2336 | <!-- |
2347 | 2337 | Special node to encapsulate initializers added into a constructor. |
2348 | | - Helps to do special optimizations in lowering, doesn't survive the lowering. |
| 2338 | + Helps to do special optimizations in lowering. |
2349 | 2339 | --> |
2350 | | - <Node Name="BoundTypeOrInstanceInitializers" Base="BoundStatementList"> |
| 2340 | + <Node Name="BoundTypeOrInstanceInitializers" Base="BoundStatementList" DoesNotSurvive="LocalRewriting"> |
2351 | 2341 | </Node> |
2352 | 2342 |
|
2353 | 2343 | <Node Name="BoundNameOfOperator" Base="BoundExpression"> |
|
2365 | 2355 | <Field Name="ConstantValueOpt" Type="ConstantValue?" PropertyOverrides="true"/> |
2366 | 2356 | </AbstractNode> |
2367 | 2357 |
|
2368 | | - <Node Name="BoundUnconvertedInterpolatedString" Base="BoundInterpolatedStringBase"> |
| 2358 | + <Node Name="BoundUnconvertedInterpolatedString" Base="BoundInterpolatedStringBase" DoesNotSurvive="InitialBinding"> |
2369 | 2359 | </Node> |
2370 | 2360 |
|
2371 | 2361 | <Node Name="BoundInterpolatedString" Base="BoundInterpolatedStringBase"> |
2372 | 2362 | <Field Name="InterpolationData" Type="InterpolatedStringHandlerData?"/> |
2373 | 2363 | </Node> |
2374 | 2364 |
|
2375 | | - <Node Name="BoundInterpolatedStringHandlerPlaceholder" Base="BoundValuePlaceholderBase"/> |
| 2365 | + <Node Name="BoundInterpolatedStringHandlerPlaceholder" Base="BoundValuePlaceholderBase" DoesNotSurvive="LocalRewriting"/> |
2376 | 2366 |
|
2377 | 2367 | <!-- A typed expression placeholder for the arguments to the constructor call for an interpolated string handler |
2378 | 2368 | conversion. We intentionally use a placeholder for overload resolution here to ensure that no conversion |
2379 | | - from expression can occur. This node is only used for intermediate binding and does not survive local rewriting. --> |
2380 | | - <Node Name="BoundInterpolatedStringArgumentPlaceholder" Base="BoundValuePlaceholderBase"> |
| 2369 | + from expression can occur. --> |
| 2370 | + <Node Name="BoundInterpolatedStringArgumentPlaceholder" Base="BoundValuePlaceholderBase" DoesNotSurvive="LocalRewriting"> |
2381 | 2371 | <Field Name="Type" Type="TypeSymbol" Override="true" Null="disallow" /> |
2382 | 2372 | <!-- The index in the containing member of the argument this is the placeholder for. Should be a positive number or |
2383 | 2373 | one of the constants in the other part of the partial class. --> |
|
2573 | 2563 | <Node Name="OutVariablePendingInference" Base="VariablePendingInference" /> |
2574 | 2564 |
|
2575 | 2565 | <!-- The node is transformed into BoundLocal or BoundFieldAccess after inference --> |
2576 | | - <Node Name="DeconstructionVariablePendingInference" Base="VariablePendingInference" /> |
| 2566 | + <Node Name="DeconstructionVariablePendingInference" Base="VariablePendingInference" DoesNotSurvive="LocalRewriting" /> |
2577 | 2567 |
|
2578 | 2568 | <!-- The node is transformed into BoundDeconstructValuePlaceholder after inference --> |
2579 | 2569 | <Node Name="OutDeconstructVarPendingInference" Base="BoundExpression"> |
|
0 commit comments