| Index: sdk/lib/_internal/compiler/implementation/js_emitter/program_builder.dart
|
| diff --git a/sdk/lib/_internal/compiler/implementation/js_emitter/program_builder.dart b/sdk/lib/_internal/compiler/implementation/js_emitter/program_builder.dart
|
| index 53794e30e3e481b24bcab52591e3106830976902..0529219bc9cfe8e16ae0f0819e7f380999470b09 100644
|
| --- a/sdk/lib/_internal/compiler/implementation/js_emitter/program_builder.dart
|
| +++ b/sdk/lib/_internal/compiler/implementation/js_emitter/program_builder.dart
|
| @@ -13,9 +13,10 @@ import '../js_backend/js_backend.dart' show
|
| JavaScriptBackend,
|
| JavaScriptConstantCompiler;
|
|
|
| -import '../js_emitter/js_emitter.dart' as emitterTask show
|
| +import 'js_emitter.dart' as emitterTask show
|
| CodeEmitterTask,
|
| - Emitter;
|
| + Emitter,
|
| + InterceptorStubGenerator;
|
|
|
| import '../universe/universe.dart' show Universe;
|
| import '../deferred_load.dart' show DeferredLoadTask, OutputUnit;
|
| @@ -189,6 +190,11 @@ class ProgramBuilder {
|
| .where((e) => universe.staticFunctionsNeedingGetter.contains(e))
|
| .map(_buildStaticMethodTearOff));
|
|
|
| + if (library == backend.interceptorsLibrary) {
|
| + statics.addAll(_generateGetInterceptorMethods());
|
| + statics.addAll(_generateOneShotInterceptors());
|
| + }
|
| +
|
| List<Class> classes = elements
|
| .where((e) => e is ClassElement)
|
| .map(_buildClass)
|
| @@ -221,6 +227,37 @@ class ProgramBuilder {
|
| return new Method(name, code);
|
| }
|
|
|
| + Iterable<StaticMethod> _generateGetInterceptorMethods() {
|
| + emitterTask.InterceptorStubGenerator stubGenerator =
|
| + new emitterTask.InterceptorStubGenerator(_compiler, namer, backend);
|
| +
|
| + String holderName = namer.globalObjectFor(backend.interceptorsLibrary);
|
| + Holder holder = _registry.registerHolder(holderName);
|
| +
|
| + Map<String, Set<ClassElement>> specializedGetInterceptors =
|
| + backend.specializedGetInterceptors;
|
| + List<String> names = specializedGetInterceptors.keys.toList()..sort();
|
| + return names.map((String name) {
|
| + Set<ClassElement> classes = specializedGetInterceptors[name];
|
| + js.Expression code = stubGenerator.generateGetInterceptorMethod(classes);
|
| + return new StaticMethod(name, holder, code);
|
| + });
|
| + }
|
| +
|
| + Iterable<StaticMethod> _generateOneShotInterceptors() {
|
| + emitterTask.InterceptorStubGenerator stubGenerator =
|
| + new emitterTask.InterceptorStubGenerator(_compiler, namer, backend);
|
| +
|
| + String holderName = namer.globalObjectFor(backend.interceptorsLibrary);
|
| + Holder holder = _registry.registerHolder(holderName);
|
| +
|
| + List<String> names = backend.oneShotInterceptors.keys.toList()..sort();
|
| + return names.map((String name) {
|
| + js.Expression code = stubGenerator.generateOneShotInterceptor(name);
|
| + return new StaticMethod(name, holder, code);
|
| + });
|
| + }
|
| +
|
| StaticMethod _buildStaticMethod(FunctionElement element) {
|
| String name = namer.getNameOfMember(element);
|
| String holder = namer.globalObjectFor(element);
|
|
|