| OLD | NEW |
| 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE.md file. | 3 // BSD-style license that can be found in the LICENSE.md file. |
| 4 | 4 |
| 5 import 'package:kernel/ast.dart' as ir; | 5 import 'package:kernel/ast.dart' as ir; |
| 6 | 6 |
| 7 import "../elements/elements.dart" | 7 import "../elements/elements.dart" |
| 8 show | 8 show |
| 9 AstElement, | 9 AstElement, |
| 10 ConstructorElement, | 10 ConstructorElement, |
| 11 Element, | 11 Element, |
| 12 ErroneousElement, | 12 ErroneousElement, |
| 13 FunctionElement, | 13 FunctionElement, |
| 14 MethodElement; | 14 GetterElement, |
| 15 MethodElement, |
| 16 SetterElement; |
| 15 import "../elements/operators.dart" | 17 import "../elements/operators.dart" |
| 16 show AssignmentOperator, BinaryOperator, IncDecOperator, UnaryOperator; | 18 show AssignmentOperator, BinaryOperator, IncDecOperator, UnaryOperator; |
| 17 import "../elements/resolution_types.dart" | 19 import "../elements/resolution_types.dart" |
| 18 show ResolutionDartType, ResolutionInterfaceType; | 20 show ResolutionDartType, ResolutionInterfaceType; |
| 19 import "../tree/tree.dart" show Expression, NewExpression, Node, NodeList, Send; | 21 import "../tree/tree.dart" |
| 22 show Expression, NewExpression, Node, NodeList, Send, SendSet; |
| 20 import "../universe/call_structure.dart" show CallStructure; | 23 import "../universe/call_structure.dart" show CallStructure; |
| 21 import "../universe/selector.dart" show Selector; | 24 import "../universe/selector.dart" show Selector; |
| 22 import 'accessors.dart'; | 25 import 'accessors.dart'; |
| 23 import "kernel.dart" show Kernel; | 26 import "kernel.dart" show Kernel; |
| 24 | 27 |
| 25 abstract class UnresolvedVisitor { | 28 abstract class UnresolvedVisitor { |
| 26 Kernel get kernel; | 29 Kernel get kernel; |
| 27 | 30 |
| 28 // Implemented in KernelVisitor | 31 // Implemented in KernelVisitor |
| 29 AstElement get currentElement; | 32 AstElement get currentElement; |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 177 NodeList arguments, | 180 NodeList arguments, |
| 178 Selector selector, | 181 Selector selector, |
| 179 _) { | 182 _) { |
| 180 ir.Expression receiver = new ir.TypeLiteral(kernel.interfaceTypeToIr(type)); | 183 ir.Expression receiver = new ir.TypeLiteral(kernel.interfaceTypeToIr(type)); |
| 181 String methodName = | 184 String methodName = |
| 182 node.send.selector != null ? '${node.send.selector}' : type.name; | 185 node.send.selector != null ? '${node.send.selector}' : type.name; |
| 183 return buildThrowNoSuchMethodError(kernel.getUnresolvedConstructorBuilder(), | 186 return buildThrowNoSuchMethodError(kernel.getUnresolvedConstructorBuilder(), |
| 184 receiver, methodName, buildArguments(arguments), constructor); | 187 receiver, methodName, buildArguments(arguments), constructor); |
| 185 } | 188 } |
| 186 | 189 |
| 187 ir.Expression visitUnresolvedCompound( | 190 ir.Expression visitUnresolvedCompound(Send node, ErroneousElement element, |
| 188 Send node, Element element, AssignmentOperator operator, Node rhs, _) { | 191 AssignmentOperator operator, Node rhs, _) { |
| 189 return buildThrowUnresolvedGetter('${node.selector}'); | 192 return buildThrowUnresolvedGetter('${node.selector}'); |
| 190 } | 193 } |
| 191 | 194 |
| 192 ir.Expression visitUnresolvedGet(Send node, Element element, _) { | 195 ir.Expression visitUnresolvedGet(Send node, Element element, _) { |
| 193 return buildThrowUnresolvedGetter('${node.selector}'); | 196 return buildThrowUnresolvedGetter('${node.selector}'); |
| 194 } | 197 } |
| 195 | 198 |
| 196 ir.Expression visitUnresolvedInvoke( | 199 ir.Expression visitUnresolvedInvoke( |
| 197 Send node, Element element, NodeList arguments, Selector selector, _) { | 200 Send node, Element element, NodeList arguments, Selector selector, _) { |
| 198 // TODO(asgerf): Should we use a type literal as receiver for unresolved | 201 // TODO(asgerf): Should we use a type literal as receiver for unresolved |
| 199 // static invocations? | 202 // static invocations? |
| 200 return buildThrowNoSuchMethodError(kernel.getGenericNoSuchMethodBuilder(), | 203 return buildThrowNoSuchMethodError(kernel.getGenericNoSuchMethodBuilder(), |
| 201 new ir.NullLiteral(), element.name, buildArguments(arguments), element); | 204 new ir.NullLiteral(), element.name, buildArguments(arguments), element); |
| 202 } | 205 } |
| 203 | 206 |
| 204 ir.Expression visitUnresolvedPostfix( | 207 ir.Expression visitUnresolvedPostfix( |
| 205 Send node, Element element, IncDecOperator operator, _) { | 208 Send node, ErroneousElement element, IncDecOperator operator, _) { |
| 206 return buildThrowUnresolvedGetter('${node.selector}'); | 209 return buildThrowUnresolvedGetter('${node.selector}'); |
| 207 } | 210 } |
| 208 | 211 |
| 209 ir.Expression visitUnresolvedPrefix( | 212 ir.Expression visitUnresolvedPrefix( |
| 210 Send node, Element element, IncDecOperator operator, _) { | 213 Send node, ErroneousElement element, IncDecOperator operator, _) { |
| 211 return buildThrowUnresolvedGetter('${node.selector}'); | 214 return buildThrowUnresolvedGetter('${node.selector}'); |
| 212 } | 215 } |
| 213 | 216 |
| 214 ir.Expression visitUnresolvedRedirectingFactoryConstructorInvoke( | 217 ir.Expression visitUnresolvedRedirectingFactoryConstructorInvoke( |
| 215 NewExpression node, | 218 NewExpression node, |
| 216 ConstructorElement constructor, | 219 ConstructorElement constructor, |
| 217 ResolutionInterfaceType type, | 220 ResolutionInterfaceType type, |
| 218 NodeList arguments, | 221 NodeList arguments, |
| 219 CallStructure callStructure, | 222 CallStructure callStructure, |
| 220 _) { | 223 _) { |
| 221 // The body of the factory will throw an error. | 224 // The body of the factory will throw an error. |
| 222 return new ir.StaticInvocation( | 225 return new ir.StaticInvocation( |
| 223 possiblyErroneousFunctionToIr(constructor), buildArguments(arguments)); | 226 possiblyErroneousFunctionToIr(constructor), buildArguments(arguments)); |
| 224 } | 227 } |
| 225 | 228 |
| 226 ir.Expression visitUnresolvedSet(Send node, Element element, Node rhs, _) { | 229 ir.Expression visitUnresolvedSet(SendSet node, Element element, Node rhs, _) { |
| 227 return buildThrowUnresolvedSetter('${node.selector}', visitForValue(rhs)); | 230 return buildThrowUnresolvedSetter('${node.selector}', visitForValue(rhs)); |
| 228 } | 231 } |
| 229 | 232 |
| 230 ir.Expression visitUnresolvedSetIfNull( | 233 ir.Expression visitUnresolvedSetIfNull( |
| 231 Send node, Element element, Node rhs, _) { | 234 Send node, Element element, Node rhs, _) { |
| 232 return buildThrowUnresolvedGetter('${node.selector}'); | 235 return buildThrowUnresolvedGetter('${node.selector}'); |
| 233 } | 236 } |
| 234 | 237 |
| 235 ir.Expression visitUnresolvedStaticGetterCompound(Send node, Element element, | 238 ir.Expression visitUnresolvedStaticGetterCompound(Send node, Element element, |
| 236 MethodElement setter, AssignmentOperator operator, Node rhs, _) { | 239 MethodElement setter, AssignmentOperator operator, Node rhs, _) { |
| (...skipping 14 matching lines...) Expand all Loading... |
| 251 } | 254 } |
| 252 | 255 |
| 253 ir.Expression visitUnresolvedStaticGetterSetIfNull( | 256 ir.Expression visitUnresolvedStaticGetterSetIfNull( |
| 254 Send node, Element element, MethodElement setter, Node rhs, _) { | 257 Send node, Element element, MethodElement setter, Node rhs, _) { |
| 255 return buildThrowUnresolvedGetter( | 258 return buildThrowUnresolvedGetter( |
| 256 '${node.selector}', kernel.getUnresolvedStaticGetterBuilder()); | 259 '${node.selector}', kernel.getUnresolvedStaticGetterBuilder()); |
| 257 } | 260 } |
| 258 | 261 |
| 259 ir.Expression visitUnresolvedStaticSetterCompound( | 262 ir.Expression visitUnresolvedStaticSetterCompound( |
| 260 Send node, | 263 Send node, |
| 261 MethodElement getter, | 264 GetterElement getter, |
| 262 Element element, | 265 Element element, |
| 263 AssignmentOperator operator, | 266 AssignmentOperator operator, |
| 264 Node rhs, | 267 Node rhs, |
| 265 _) { | 268 _) { |
| 266 return buildThrowUnresolvedSetter('${node.selector}', visitForValue(rhs), | 269 return buildThrowUnresolvedSetter('${node.selector}', visitForValue(rhs), |
| 267 kernel.getUnresolvedStaticSetterBuilder()); | 270 kernel.getUnresolvedStaticSetterBuilder()); |
| 268 } | 271 } |
| 269 | 272 |
| 270 ir.Expression visitUnresolvedStaticSetterPostfix(Send node, | 273 ir.Expression visitUnresolvedStaticSetterPostfix(Send node, |
| 271 MethodElement getter, Element element, IncDecOperator operator, _) { | 274 GetterElement getter, Element element, IncDecOperator operator, _) { |
| 272 var accessor = new ClassStaticAccessor( | 275 var accessor = new ClassStaticAccessor( |
| 273 this, getter.name, possiblyErroneousFunctionToIr(getter), null); | 276 this, getter.name, possiblyErroneousFunctionToIr(getter), null); |
| 274 var result = accessor.buildPostfixIncrement( | 277 var result = accessor.buildPostfixIncrement( |
| 275 new ir.Name(operator.selectorName), | 278 new ir.Name(operator.selectorName), |
| 276 voidContext: isVoidContext); | 279 voidContext: isVoidContext); |
| 277 associateCompoundComponents(accessor, node); | 280 associateCompoundComponents(accessor, node); |
| 278 return result; | 281 return result; |
| 279 } | 282 } |
| 280 | 283 |
| 281 ir.Expression visitUnresolvedStaticSetterPrefix(Send node, | 284 ir.Expression visitUnresolvedStaticSetterPrefix(Send node, |
| 282 MethodElement getter, Element element, IncDecOperator operator, _) { | 285 GetterElement getter, Element element, IncDecOperator operator, _) { |
| 283 var accessor = new ClassStaticAccessor( | 286 var accessor = new ClassStaticAccessor( |
| 284 this, getter.name, possiblyErroneousFunctionToIr(getter), null); | 287 this, getter.name, possiblyErroneousFunctionToIr(getter), null); |
| 285 var result = accessor.buildPrefixIncrement( | 288 var result = accessor.buildPrefixIncrement( |
| 286 new ir.Name(operator.selectorName), | 289 new ir.Name(operator.selectorName), |
| 287 voidContext: isVoidContext); | 290 voidContext: isVoidContext); |
| 288 associateCompoundComponents(accessor, node); | 291 associateCompoundComponents(accessor, node); |
| 289 return result; | 292 return result; |
| 290 } | 293 } |
| 291 | 294 |
| 292 ir.Expression visitUnresolvedStaticSetterSetIfNull( | 295 ir.Expression visitUnresolvedStaticSetterSetIfNull( |
| 293 Send node, MethodElement getter, Element element, Node rhs, _) { | 296 Send node, GetterElement getter, Element element, Node rhs, _) { |
| 294 var accessor = new ClassStaticAccessor( | 297 var accessor = new ClassStaticAccessor( |
| 295 this, getter.name, possiblyErroneousFunctionToIr(getter), null); | 298 this, getter.name, possiblyErroneousFunctionToIr(getter), null); |
| 296 return accessor.buildNullAwareAssignment(visitForValue(rhs), null, | 299 return accessor.buildNullAwareAssignment(visitForValue(rhs), null, |
| 297 voidContext: isVoidContext); | 300 voidContext: isVoidContext); |
| 298 } | 301 } |
| 299 | 302 |
| 300 ir.Expression visitUnresolvedSuperBinary( | 303 ir.Expression visitUnresolvedSuperBinary( |
| 301 Send node, Element element, BinaryOperator operator, Node argument, _) { | 304 Send node, Element element, BinaryOperator operator, Node argument, _) { |
| 302 // TODO(sra): This is incorrect when the superclass defines noSuchMethod. | 305 // TODO(sra): This is incorrect when the superclass defines noSuchMethod. |
| 303 return buildThrowNoSuchMethodError( | 306 return buildThrowNoSuchMethodError( |
| 304 kernel.getUnresolvedSuperMethodBuilder(), | 307 kernel.getUnresolvedSuperMethodBuilder(), |
| 305 new ir.ThisExpression(), | 308 new ir.ThisExpression(), |
| 306 operator.selectorName, | 309 operator.selectorName, |
| 307 new ir.Arguments(<ir.Expression>[visitForValue(argument)])); | 310 new ir.Arguments(<ir.Expression>[visitForValue(argument)])); |
| 308 } | 311 } |
| 309 | 312 |
| 310 ir.Expression visitUnresolvedSuperCompound( | 313 ir.Expression visitUnresolvedSuperCompound( |
| 311 Send node, Element element, AssignmentOperator operator, Node rhs, _) { | 314 Send node, Element element, AssignmentOperator operator, Node rhs, _) { |
| 312 return buildThrowUnresolvedSuperGetter('${node.selector}'); | 315 return buildThrowUnresolvedSuperGetter('${node.selector}'); |
| 313 } | 316 } |
| 314 | 317 |
| 315 ir.Expression visitUnresolvedSuperCompoundIndexSet(Send node, Element element, | 318 ir.Expression visitUnresolvedSuperCompoundIndexSet(SendSet node, |
| 316 Node index, AssignmentOperator operator, Node rhs, _) { | 319 Element element, Node index, AssignmentOperator operator, Node rhs, _) { |
| 317 return buildUnresolvedSuperIndexAccessor(index, element) | 320 return buildUnresolvedSuperIndexAccessor(index, element) |
| 318 .buildCompoundAssignment( | 321 .buildCompoundAssignment( |
| 319 new ir.Name(operator.selectorName), visitForValue(rhs)); | 322 new ir.Name(operator.selectorName), visitForValue(rhs)); |
| 320 } | 323 } |
| 321 | 324 |
| 322 ir.Expression visitUnresolvedSuperGet(Send node, Element element, _) { | 325 ir.Expression visitUnresolvedSuperGet(Send node, Element element, _) { |
| 323 return buildThrowUnresolvedSuperGetter('${node.selector}'); | 326 return buildThrowUnresolvedSuperGetter('${node.selector}'); |
| 324 } | 327 } |
| 325 | 328 |
| 326 ir.Expression visitUnresolvedSuperGetterCompound(Send node, Element element, | 329 ir.Expression visitUnresolvedSuperGetterCompound( |
| 327 MethodElement setter, AssignmentOperator operator, Node rhs, _) { | 330 SendSet node, |
| 331 Element element, |
| 332 SetterElement setter, |
| 333 AssignmentOperator operator, |
| 334 Node rhs, |
| 335 _) { |
| 328 return buildThrowUnresolvedSuperGetter('${node.selector}'); | 336 return buildThrowUnresolvedSuperGetter('${node.selector}'); |
| 329 } | 337 } |
| 330 | 338 |
| 331 ir.Expression visitUnresolvedSuperGetterCompoundIndexSet( | 339 ir.Expression visitUnresolvedSuperGetterCompoundIndexSet( |
| 332 Send node, | 340 SendSet node, |
| 333 Element element, | 341 Element element, |
| 334 MethodElement setter, | 342 MethodElement setter, |
| 335 Node index, | 343 Node index, |
| 336 AssignmentOperator operator, | 344 AssignmentOperator operator, |
| 337 Node rhs, | 345 Node rhs, |
| 338 _) { | 346 _) { |
| 339 return buildThrowUnresolvedSuperGetter('${node.selector}'); | 347 return buildThrowUnresolvedSuperGetter('${node.selector}'); |
| 340 } | 348 } |
| 341 | 349 |
| 342 ir.Expression visitUnresolvedSuperGetterIndexPostfix( | 350 ir.Expression visitUnresolvedSuperGetterIndexPostfix( |
| 343 Send node, | 351 SendSet node, |
| 344 Element element, | 352 Element element, |
| 345 MethodElement setter, | 353 MethodElement setter, |
| 346 Node index, | 354 Node index, |
| 347 IncDecOperator operator, | 355 IncDecOperator operator, |
| 348 _) { | 356 _) { |
| 349 return buildThrowUnresolvedSuperGetter('${node.selector}'); | 357 return buildThrowUnresolvedSuperGetter('${node.selector}'); |
| 350 } | 358 } |
| 351 | 359 |
| 352 ir.Expression visitUnresolvedSuperGetterIndexPrefix( | 360 ir.Expression visitUnresolvedSuperGetterIndexPrefix( |
| 353 Send node, | 361 SendSet node, |
| 354 Element element, | 362 Element element, |
| 355 MethodElement setter, | 363 MethodElement setter, |
| 356 Node index, | 364 Node index, |
| 357 IncDecOperator operator, | 365 IncDecOperator operator, |
| 358 _) { | 366 _) { |
| 359 return buildThrowUnresolvedSuperGetter('${node.selector}'); | 367 return buildThrowUnresolvedSuperGetter('${node.selector}'); |
| 360 } | 368 } |
| 361 | 369 |
| 362 ir.Expression visitUnresolvedSuperGetterPostfix(Send node, Element element, | 370 ir.Expression visitUnresolvedSuperGetterPostfix(SendSet node, Element element, |
| 363 MethodElement setter, IncDecOperator operator, _) { | 371 SetterElement setter, IncDecOperator operator, _) { |
| 364 return buildThrowUnresolvedSuperGetter('${node.selector}'); | 372 return buildThrowUnresolvedSuperGetter('${node.selector}'); |
| 365 } | 373 } |
| 366 | 374 |
| 367 ir.Expression visitUnresolvedSuperGetterPrefix(Send node, Element element, | 375 ir.Expression visitUnresolvedSuperGetterPrefix(SendSet node, Element element, |
| 368 MethodElement setter, IncDecOperator operator, _) { | 376 SetterElement setter, IncDecOperator operator, _) { |
| 369 return buildThrowUnresolvedSuperGetter('${node.selector}'); | 377 return buildThrowUnresolvedSuperGetter('${node.selector}'); |
| 370 } | 378 } |
| 371 | 379 |
| 372 ir.Expression visitUnresolvedSuperGetterSetIfNull( | 380 ir.Expression visitUnresolvedSuperGetterSetIfNull( |
| 373 Send node, Element element, MethodElement setter, Node rhs, _) { | 381 Send node, Element element, MethodElement setter, Node rhs, _) { |
| 374 return buildThrowUnresolvedSuperGetter('${node.selector}'); | 382 return buildThrowUnresolvedSuperGetter('${node.selector}'); |
| 375 } | 383 } |
| 376 | 384 |
| 377 ir.Expression visitUnresolvedSuperIndex( | 385 ir.Expression visitUnresolvedSuperIndex( |
| 378 Send node, Element element, Node index, _) { | 386 Send node, Element element, Node index, _) { |
| 379 return buildUnresolvedSuperIndexAccessor(index, element).buildSimpleRead(); | 387 return buildUnresolvedSuperIndexAccessor(index, element).buildSimpleRead(); |
| 380 } | 388 } |
| 381 | 389 |
| 382 ir.Expression visitUnresolvedSuperIndexPostfix( | 390 ir.Expression visitUnresolvedSuperIndexPostfix( |
| 383 Send node, Element element, Node index, IncDecOperator operator, _) { | 391 Send node, Element element, Node index, IncDecOperator operator, _) { |
| 384 return buildUnresolvedSuperIndexAccessor(index, element).buildSimpleRead(); | 392 return buildUnresolvedSuperIndexAccessor(index, element).buildSimpleRead(); |
| 385 } | 393 } |
| 386 | 394 |
| 387 ir.Expression visitUnresolvedSuperIndexPrefix( | 395 ir.Expression visitUnresolvedSuperIndexPrefix( |
| 388 Send node, Element element, Node index, IncDecOperator operator, _) { | 396 Send node, Element element, Node index, IncDecOperator operator, _) { |
| 389 return buildUnresolvedSuperIndexAccessor(index, element).buildSimpleRead(); | 397 return buildUnresolvedSuperIndexAccessor(index, element).buildSimpleRead(); |
| 390 } | 398 } |
| 391 | 399 |
| 392 ir.Expression visitUnresolvedSuperIndexSet( | 400 ir.Expression visitUnresolvedSuperIndexSet( |
| 393 Send node, Element element, Node index, Node rhs, _) { | 401 SendSet node, ErroneousElement element, Node index, Node rhs, _) { |
| 394 return buildUnresolvedSuperIndexAccessor(index, element) | 402 return buildUnresolvedSuperIndexAccessor(index, element) |
| 395 .buildAssignment(visitForValue(rhs)); | 403 .buildAssignment(visitForValue(rhs)); |
| 396 } | 404 } |
| 397 | 405 |
| 398 ir.Expression visitUnresolvedSuperInvoke( | 406 ir.Expression visitUnresolvedSuperInvoke( |
| 399 Send node, Element element, NodeList arguments, Selector selector, _) { | 407 Send node, Element element, NodeList arguments, Selector selector, _) { |
| 400 // TODO(asgerf): Should really invoke 'super.noSuchMethod'. | 408 // TODO(asgerf): Should really invoke 'super.noSuchMethod'. |
| 401 return buildThrowNoSuchMethodError(kernel.getUnresolvedSuperMethodBuilder(), | 409 return buildThrowNoSuchMethodError(kernel.getUnresolvedSuperMethodBuilder(), |
| 402 new ir.ThisExpression(), '${node.selector}', buildArguments(arguments)); | 410 new ir.ThisExpression(), '${node.selector}', buildArguments(arguments)); |
| 403 } | 411 } |
| 404 | 412 |
| 405 ir.Expression visitUnresolvedSuperPostfix( | 413 ir.Expression visitUnresolvedSuperPostfix( |
| 406 Send node, Element element, IncDecOperator operator, _) { | 414 SendSet node, Element element, IncDecOperator operator, _) { |
| 407 return buildThrowUnresolvedSuperGetter('${node.selector}'); | 415 return buildThrowUnresolvedSuperGetter('${node.selector}'); |
| 408 } | 416 } |
| 409 | 417 |
| 410 ir.Expression visitUnresolvedSuperPrefix( | 418 ir.Expression visitUnresolvedSuperPrefix( |
| 411 Send node, Element element, IncDecOperator operator, _) { | 419 SendSet node, Element element, IncDecOperator operator, _) { |
| 412 return buildThrowUnresolvedSuperGetter('${node.selector}'); | 420 return buildThrowUnresolvedSuperGetter('${node.selector}'); |
| 413 } | 421 } |
| 414 | 422 |
| 415 ir.Expression visitUnresolvedSuperSetIfNull( | 423 ir.Expression visitUnresolvedSuperSetIfNull( |
| 416 Send node, Element element, Node rhs, _) { | 424 Send node, Element element, Node rhs, _) { |
| 417 return buildThrowUnresolvedSuperGetter('${node.selector}'); | 425 return buildThrowUnresolvedSuperGetter('${node.selector}'); |
| 418 } | 426 } |
| 419 | 427 |
| 420 ir.Expression visitUnresolvedSuperSetterCompound( | 428 ir.Expression visitUnresolvedSuperSetterCompound( |
| 421 Send node, | 429 Send node, |
| 422 MethodElement getter, | 430 GetterElement getter, |
| 423 Element element, | 431 Element element, |
| 424 AssignmentOperator operator, | 432 AssignmentOperator operator, |
| 425 Node rhs, | 433 Node rhs, |
| 426 _) { | 434 _) { |
| 427 return buildUnresolvedSuperPropertyAccessor('${node.selector}', getter) | 435 return buildUnresolvedSuperPropertyAccessor('${node.selector}', getter) |
| 428 .buildCompoundAssignment( | 436 .buildCompoundAssignment( |
| 429 new ir.Name(operator.selectorName), visitForValue(rhs)); | 437 new ir.Name(operator.selectorName), visitForValue(rhs)); |
| 430 } | 438 } |
| 431 | 439 |
| 432 ir.Expression visitUnresolvedSuperSetterCompoundIndexSet( | 440 ir.Expression visitUnresolvedSuperSetterCompoundIndexSet( |
| 433 Send node, | 441 SendSet node, |
| 434 MethodElement getter, | 442 MethodElement getter, |
| 435 Element element, | 443 Element element, |
| 436 Node index, | 444 Node index, |
| 437 AssignmentOperator operator, | 445 AssignmentOperator operator, |
| 438 Node rhs, | 446 Node rhs, |
| 439 _) { | 447 _) { |
| 440 return buildUnresolvedSuperIndexAccessor(index, element) | 448 return buildUnresolvedSuperIndexAccessor(index, element) |
| 441 .buildCompoundAssignment( | 449 .buildCompoundAssignment( |
| 442 new ir.Name(operator.selectorName), visitForValue(rhs)); | 450 new ir.Name(operator.selectorName), visitForValue(rhs)); |
| 443 } | 451 } |
| 444 | 452 |
| 445 ir.Expression visitUnresolvedSuperSetterIndexPostfix( | 453 ir.Expression visitUnresolvedSuperSetterIndexPostfix( |
| 446 Send node, | 454 SendSet node, |
| 447 MethodElement indexFunction, | 455 MethodElement indexFunction, |
| 448 Element element, | 456 Element element, |
| 449 Node index, | 457 Node index, |
| 450 IncDecOperator operator, | 458 IncDecOperator operator, |
| 451 _) { | 459 _) { |
| 452 return buildUnresolvedSuperIndexAccessor(index, element) | 460 return buildUnresolvedSuperIndexAccessor(index, element) |
| 453 .buildPostfixIncrement(new ir.Name(operator.selectorName)); | 461 .buildPostfixIncrement(new ir.Name(operator.selectorName)); |
| 454 } | 462 } |
| 455 | 463 |
| 456 ir.Expression visitUnresolvedSuperSetterIndexPrefix( | 464 ir.Expression visitUnresolvedSuperSetterIndexPrefix( |
| 457 Send node, | 465 SendSet node, |
| 458 MethodElement indexFunction, | 466 MethodElement indexFunction, |
| 459 Element element, | 467 Element element, |
| 460 Node index, | 468 Node index, |
| 461 IncDecOperator operator, | 469 IncDecOperator operator, |
| 462 _) { | 470 _) { |
| 463 return buildUnresolvedSuperIndexAccessor(index, element) | 471 return buildUnresolvedSuperIndexAccessor(index, element) |
| 464 .buildPrefixIncrement(new ir.Name(operator.selectorName)); | 472 .buildPrefixIncrement(new ir.Name(operator.selectorName)); |
| 465 } | 473 } |
| 466 | 474 |
| 467 ir.Expression visitUnresolvedSuperSetterPostfix(Send node, | 475 ir.Expression visitUnresolvedSuperSetterPostfix(SendSet node, |
| 468 MethodElement getter, Element element, IncDecOperator operator, _) { | 476 GetterElement getter, Element element, IncDecOperator operator, _) { |
| 469 return buildUnresolvedSuperPropertyAccessor('${node.selector}', getter) | 477 return buildUnresolvedSuperPropertyAccessor('${node.selector}', getter) |
| 470 .buildPostfixIncrement(new ir.Name(operator.selectorName)); | 478 .buildPostfixIncrement(new ir.Name(operator.selectorName)); |
| 471 } | 479 } |
| 472 | 480 |
| 473 ir.Expression visitUnresolvedSuperSetterPrefix(Send node, | 481 ir.Expression visitUnresolvedSuperSetterPrefix(SendSet node, |
| 474 MethodElement getter, Element element, IncDecOperator operator, _) { | 482 GetterElement getter, Element element, IncDecOperator operator, _) { |
| 475 return buildUnresolvedSuperPropertyAccessor('${node.selector}', getter) | 483 return buildUnresolvedSuperPropertyAccessor('${node.selector}', getter) |
| 476 .buildPrefixIncrement(new ir.Name(operator.selectorName)); | 484 .buildPrefixIncrement(new ir.Name(operator.selectorName)); |
| 477 } | 485 } |
| 478 | 486 |
| 479 ir.Expression visitUnresolvedSuperSetterSetIfNull( | 487 ir.Expression visitUnresolvedSuperSetterSetIfNull( |
| 480 Send node, MethodElement getter, Element element, Node rhs, _) { | 488 Send node, GetterElement getter, Element element, Node rhs, _) { |
| 481 return buildUnresolvedSuperPropertyAccessor('${node.selector}', getter) | 489 return buildUnresolvedSuperPropertyAccessor('${node.selector}', getter) |
| 482 .buildNullAwareAssignment(visitForValue(rhs), null); | 490 .buildNullAwareAssignment(visitForValue(rhs), null); |
| 483 } | 491 } |
| 484 | 492 |
| 485 ir.Expression visitUnresolvedSuperUnary( | 493 ir.Expression visitUnresolvedSuperUnary( |
| 486 Send node, UnaryOperator operator, Element element, _) { | 494 Send node, UnaryOperator operator, Element element, _) { |
| 487 // TODO(asgerf): Should really call 'super.noSuchMethod'. | 495 // TODO(asgerf): Should really call 'super.noSuchMethod'. |
| 488 return buildThrowNoSuchMethodError( | 496 return buildThrowNoSuchMethodError( |
| 489 kernel.getUnresolvedSuperMethodBuilder(), | 497 kernel.getUnresolvedSuperMethodBuilder(), |
| 490 new ir.ThisExpression(), | 498 new ir.ThisExpression(), |
| (...skipping 25 matching lines...) Expand all Loading... |
| 516 } | 524 } |
| 517 | 525 |
| 518 ir.Expression visitUnresolvedTopLevelGetterSetIfNull( | 526 ir.Expression visitUnresolvedTopLevelGetterSetIfNull( |
| 519 Send node, Element element, MethodElement setter, Node rhs, _) { | 527 Send node, Element element, MethodElement setter, Node rhs, _) { |
| 520 return buildThrowUnresolvedGetter( | 528 return buildThrowUnresolvedGetter( |
| 521 '${node.selector}', kernel.getUnresolvedTopLevelGetterBuilder()); | 529 '${node.selector}', kernel.getUnresolvedTopLevelGetterBuilder()); |
| 522 } | 530 } |
| 523 | 531 |
| 524 ir.Expression visitUnresolvedTopLevelSetterCompound( | 532 ir.Expression visitUnresolvedTopLevelSetterCompound( |
| 525 Send node, | 533 Send node, |
| 526 MethodElement getter, | 534 GetterElement getter, |
| 527 Element element, | 535 Element element, |
| 528 AssignmentOperator operator, | 536 AssignmentOperator operator, |
| 529 Node rhs, | 537 Node rhs, |
| 530 _) { | 538 _) { |
| 531 var accessor = new TopLevelStaticAccessor( | 539 var accessor = new TopLevelStaticAccessor( |
| 532 this, getter.name, possiblyErroneousFunctionToIr(getter), null); | 540 this, getter.name, possiblyErroneousFunctionToIr(getter), null); |
| 533 var result = accessor.buildCompoundAssignment( | 541 var result = accessor.buildCompoundAssignment( |
| 534 new ir.Name(operator.selectorName), visitForValue(rhs), | 542 new ir.Name(operator.selectorName), visitForValue(rhs), |
| 535 voidContext: isVoidContext); | 543 voidContext: isVoidContext); |
| 536 associateCompoundComponents(accessor, node); | 544 associateCompoundComponents(accessor, node); |
| 537 return result; | 545 return result; |
| 538 } | 546 } |
| 539 | 547 |
| 540 ir.Expression visitUnresolvedTopLevelSetterPostfix(Send node, | 548 ir.Expression visitUnresolvedTopLevelSetterPostfix(Send node, |
| 541 MethodElement getter, Element element, IncDecOperator operator, _) { | 549 GetterElement getter, Element element, IncDecOperator operator, _) { |
| 542 var accessor = new TopLevelStaticAccessor( | 550 var accessor = new TopLevelStaticAccessor( |
| 543 this, getter.name, possiblyErroneousFunctionToIr(getter), null); | 551 this, getter.name, possiblyErroneousFunctionToIr(getter), null); |
| 544 var result = accessor.buildPostfixIncrement( | 552 var result = accessor.buildPostfixIncrement( |
| 545 new ir.Name(operator.selectorName), | 553 new ir.Name(operator.selectorName), |
| 546 voidContext: isVoidContext); | 554 voidContext: isVoidContext); |
| 547 associateCompoundComponents(accessor, node); | 555 associateCompoundComponents(accessor, node); |
| 548 return result; | 556 return result; |
| 549 } | 557 } |
| 550 | 558 |
| 551 ir.Expression visitUnresolvedTopLevelSetterPrefix(Send node, | 559 ir.Expression visitUnresolvedTopLevelSetterPrefix(Send node, |
| 552 MethodElement getter, Element element, IncDecOperator operator, _) { | 560 GetterElement getter, Element element, IncDecOperator operator, _) { |
| 553 var accessor = new TopLevelStaticAccessor( | 561 var accessor = new TopLevelStaticAccessor( |
| 554 this, getter.name, possiblyErroneousFunctionToIr(getter), null); | 562 this, getter.name, possiblyErroneousFunctionToIr(getter), null); |
| 555 var result = accessor.buildPrefixIncrement( | 563 var result = accessor.buildPrefixIncrement( |
| 556 new ir.Name(operator.selectorName), | 564 new ir.Name(operator.selectorName), |
| 557 voidContext: isVoidContext); | 565 voidContext: isVoidContext); |
| 558 associateCompoundComponents(accessor, node); | 566 associateCompoundComponents(accessor, node); |
| 559 return result; | 567 return result; |
| 560 } | 568 } |
| 561 | 569 |
| 562 ir.Expression visitUnresolvedTopLevelSetterSetIfNull( | 570 ir.Expression visitUnresolvedTopLevelSetterSetIfNull( |
| 563 Send node, MethodElement getter, Element element, Node rhs, _) { | 571 Send node, GetterElement getter, Element element, Node rhs, _) { |
| 564 var accessor = new TopLevelStaticAccessor( | 572 var accessor = new TopLevelStaticAccessor( |
| 565 this, getter.name, possiblyErroneousFunctionToIr(getter), null); | 573 this, getter.name, possiblyErroneousFunctionToIr(getter), null); |
| 566 return accessor.buildNullAwareAssignment(visitForValue(rhs), null, | 574 return accessor.buildNullAwareAssignment(visitForValue(rhs), null, |
| 567 voidContext: isVoidContext); | 575 voidContext: isVoidContext); |
| 568 } | 576 } |
| 569 | 577 |
| 570 ir.Expression visitUnresolvedSuperGetterIndexSetIfNull(Send node, | 578 ir.Expression visitUnresolvedSuperGetterIndexSetIfNull(SendSet node, |
| 571 Element element, MethodElement setter, Node index, Node rhs, _) { | 579 Element element, MethodElement setter, Node index, Node rhs, _) { |
| 572 return buildUnresolvedSuperIndexAccessor(index, element) | 580 return buildUnresolvedSuperIndexAccessor(index, element) |
| 573 .buildNullAwareAssignment(visitForValue(rhs), null); | 581 .buildNullAwareAssignment(visitForValue(rhs), null); |
| 574 } | 582 } |
| 575 | 583 |
| 576 ir.Expression visitUnresolvedSuperSetterIndexSetIfNull(Send node, | 584 ir.Expression visitUnresolvedSuperSetterIndexSetIfNull(SendSet node, |
| 577 MethodElement getter, Element element, Node index, Node rhs, _) { | 585 MethodElement getter, Element element, Node index, Node rhs, _) { |
| 578 return buildUnresolvedSuperIndexAccessor(index, element) | 586 return buildUnresolvedSuperIndexAccessor(index, element) |
| 579 .buildNullAwareAssignment(visitForValue(rhs), null); | 587 .buildNullAwareAssignment(visitForValue(rhs), null); |
| 580 } | 588 } |
| 581 | 589 |
| 582 ir.Expression visitUnresolvedSuperIndexSetIfNull( | 590 ir.Expression visitUnresolvedSuperIndexSetIfNull( |
| 583 Send node, Element element, Node index, Node rhs, _) { | 591 Send node, Element element, Node index, Node rhs, _) { |
| 584 return buildUnresolvedSuperIndexAccessor(index, element) | 592 return buildUnresolvedSuperIndexAccessor(index, element) |
| 585 .buildNullAwareAssignment(visitForValue(rhs), null); | 593 .buildNullAwareAssignment(visitForValue(rhs), null); |
| 586 } | 594 } |
| 587 | 595 |
| 588 ir.Expression visitUnresolvedSuperSet( | 596 ir.Expression visitUnresolvedSuperSet( |
| 589 Send node, Element element, Node rhs, _) { | 597 Send node, Element element, Node rhs, _) { |
| 590 return buildThrowUnresolvedSuperSetter( | 598 return buildThrowUnresolvedSuperSetter( |
| 591 '${node.selector}', visitForValue(rhs)); | 599 '${node.selector}', visitForValue(rhs)); |
| 592 } | 600 } |
| 593 } | 601 } |
| OLD | NEW |