| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 part of ssa; | 5 part of ssa; |
| 6 | 6 |
| 7 class SsaFunctionCompiler implements FunctionCompiler { | 7 class SsaFunctionCompiler implements FunctionCompiler { |
| 8 final SsaCodeGeneratorTask generator; | 8 final SsaCodeGeneratorTask generator; |
| 9 final SsaBuilderTask builder; | 9 final SsaBuilderTask builder; |
| 10 final SsaOptimizerTask optimizer; | 10 final SsaOptimizerTask optimizer; |
| (...skipping 3320 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3331 pushInvokeDynamic(send, selector, mask, [receiver], | 3331 pushInvokeDynamic(send, selector, mask, [receiver], |
| 3332 sourceInformation: sourceInformationBuilder.buildGet(send)); | 3332 sourceInformation: sourceInformationBuilder.buildGet(send)); |
| 3333 } | 3333 } |
| 3334 | 3334 |
| 3335 /// Inserts a call to checkDeferredIsLoaded for [prefixElement]. | 3335 /// Inserts a call to checkDeferredIsLoaded for [prefixElement]. |
| 3336 /// If [prefixElement] is [null] ndo nothing. | 3336 /// If [prefixElement] is [null] ndo nothing. |
| 3337 void generateIsDeferredLoadedCheckIfNeeded(PrefixElement prefixElement, | 3337 void generateIsDeferredLoadedCheckIfNeeded(PrefixElement prefixElement, |
| 3338 ast.Node location) { | 3338 ast.Node location) { |
| 3339 if (prefixElement == null) return; | 3339 if (prefixElement == null) return; |
| 3340 String loadId = | 3340 String loadId = |
| 3341 compiler.deferredLoadTask.importDeferName[prefixElement.deferredImport]; | 3341 compiler.deferredLoadTask.getImportDeferName(location, prefixElement); |
| 3342 HInstruction loadIdConstant = addConstantString(loadId); | 3342 HInstruction loadIdConstant = addConstantString(loadId); |
| 3343 String uri = prefixElement.deferredImport.uri.dartString.slowToString(); | 3343 String uri = prefixElement.deferredImport.uri.dartString.slowToString(); |
| 3344 HInstruction uriConstant = addConstantString(uri); | 3344 HInstruction uriConstant = addConstantString(uri); |
| 3345 Element helper = backend.getCheckDeferredIsLoaded(); | 3345 Element helper = backend.getCheckDeferredIsLoaded(); |
| 3346 pushInvokeStatic(location, helper, [loadIdConstant, uriConstant]); | 3346 pushInvokeStatic(location, helper, [loadIdConstant, uriConstant]); |
| 3347 pop(); | 3347 pop(); |
| 3348 } | 3348 } |
| 3349 | 3349 |
| 3350 /// Inserts a call to checkDeferredIsLoaded if the send has a prefix that | 3350 /// Inserts a call to checkDeferredIsLoaded if the send has a prefix that |
| 3351 /// resolves to a deferred library. | 3351 /// resolves to a deferred library. |
| (...skipping 1054 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4406 } | 4406 } |
| 4407 } | 4407 } |
| 4408 | 4408 |
| 4409 generateDeferredLoaderGet(ast.Send node, | 4409 generateDeferredLoaderGet(ast.Send node, |
| 4410 FunctionElement deferredLoader, | 4410 FunctionElement deferredLoader, |
| 4411 SourceInformation sourceInformation) { | 4411 SourceInformation sourceInformation) { |
| 4412 // Until now we only handle these as getters. | 4412 // Until now we only handle these as getters. |
| 4413 invariant(node, deferredLoader.isDeferredLoaderGetter); | 4413 invariant(node, deferredLoader.isDeferredLoaderGetter); |
| 4414 Element loadFunction = compiler.loadLibraryFunction; | 4414 Element loadFunction = compiler.loadLibraryFunction; |
| 4415 PrefixElement prefixElement = deferredLoader.enclosingElement; | 4415 PrefixElement prefixElement = deferredLoader.enclosingElement; |
| 4416 String loadId = compiler.deferredLoadTask | 4416 String loadId = |
| 4417 .importDeferName[prefixElement.deferredImport]; | 4417 compiler.deferredLoadTask.getImportDeferName(node, prefixElement); |
| 4418 var inputs = [graph.addConstantString( | 4418 var inputs = [graph.addConstantString( |
| 4419 new ast.DartString.literal(loadId), compiler)]; | 4419 new ast.DartString.literal(loadId), compiler)]; |
| 4420 push(new HInvokeStatic(loadFunction, inputs, backend.nonNullType, | 4420 push(new HInvokeStatic(loadFunction, inputs, backend.nonNullType, |
| 4421 targetCanThrow: false) | 4421 targetCanThrow: false) |
| 4422 ..sourceInformation = sourceInformation); | 4422 ..sourceInformation = sourceInformation); |
| 4423 } | 4423 } |
| 4424 | 4424 |
| 4425 generateSuperNoSuchMethodSend(ast.Send node, | 4425 generateSuperNoSuchMethodSend(ast.Send node, |
| 4426 Selector selector, | 4426 Selector selector, |
| 4427 List<HInstruction> arguments) { | 4427 List<HInstruction> arguments) { |
| (...skipping 4511 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8939 if (unaliased is TypedefType) throw 'unable to unalias $type'; | 8939 if (unaliased is TypedefType) throw 'unable to unalias $type'; |
| 8940 unaliased.accept(this, builder); | 8940 unaliased.accept(this, builder); |
| 8941 } | 8941 } |
| 8942 | 8942 |
| 8943 void visitDynamicType(DynamicType type, SsaBuilder builder) { | 8943 void visitDynamicType(DynamicType type, SsaBuilder builder) { |
| 8944 JavaScriptBackend backend = builder.compiler.backend; | 8944 JavaScriptBackend backend = builder.compiler.backend; |
| 8945 ClassElement cls = backend.findHelper('DynamicRuntimeType'); | 8945 ClassElement cls = backend.findHelper('DynamicRuntimeType'); |
| 8946 builder.push(new HDynamicType(type, new TypeMask.exact(cls, classWorld))); | 8946 builder.push(new HDynamicType(type, new TypeMask.exact(cls, classWorld))); |
| 8947 } | 8947 } |
| 8948 } | 8948 } |
| OLD | NEW |