Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(438)

Side by Side Diff: pkg/compiler/lib/src/js_emitter/full_emitter/emitter.dart

Issue 2981633002: Introduce TypedefEntity (Closed)
Patch Set: Updated cf. comments Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, 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 library dart2js.js_emitter.full_emitter; 5 library dart2js.js_emitter.full_emitter;
6 6
7 import 'dart:collection' show HashMap; 7 import 'dart:collection' show HashMap;
8 import 'dart:convert'; 8 import 'dart:convert';
9 9
10 import 'package:js_runtime/shared/embedded_names.dart' as embeddedNames; 10 import 'package:js_runtime/shared/embedded_names.dart' as embeddedNames;
11 import 'package:js_runtime/shared/embedded_names.dart' 11 import 'package:js_runtime/shared/embedded_names.dart'
12 show JsBuiltin, JsGetName; 12 show JsBuiltin, JsGetName;
13 13
14 import '../../../compiler_new.dart'; 14 import '../../../compiler_new.dart';
15 import '../../common.dart'; 15 import '../../common.dart';
16 import '../../compiler.dart' show Compiler; 16 import '../../compiler.dart' show Compiler;
17 import '../../constants/values.dart'; 17 import '../../constants/values.dart';
18 import '../../common_elements.dart' show CommonElements, ElementEnvironment; 18 import '../../common_elements.dart' show CommonElements, ElementEnvironment;
19 import '../../elements/resolution_types.dart' show ResolutionDartType;
20 import '../../deferred_load.dart' show OutputUnit; 19 import '../../deferred_load.dart' show OutputUnit;
21 import '../../elements/elements.dart' show LibraryElement, TypedefElement;
22 import '../../elements/entities.dart'; 20 import '../../elements/entities.dart';
23 import '../../elements/entity_utils.dart' as utils; 21 import '../../elements/entity_utils.dart' as utils;
22 import '../../elements/types.dart';
24 import '../../elements/names.dart'; 23 import '../../elements/names.dart';
25 import '../../hash/sha1.dart' show Hasher; 24 import '../../hash/sha1.dart' show Hasher;
26 import '../../io/code_output.dart'; 25 import '../../io/code_output.dart';
27 import '../../io/location_provider.dart' show LocationCollector; 26 import '../../io/location_provider.dart' show LocationCollector;
28 import '../../io/source_map_builder.dart' show SourceMapBuilder; 27 import '../../io/source_map_builder.dart' show SourceMapBuilder;
29 import '../../js/js.dart' as jsAst; 28 import '../../js/js.dart' as jsAst;
30 import '../../js/js.dart' show js; 29 import '../../js/js.dart' show js;
31 import '../../js_backend/js_backend.dart' 30 import '../../js_backend/js_backend.dart'
32 show 31 show
33 ConstantEmitter, 32 ConstantEmitter,
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 83
85 class Emitter extends js_emitter.EmitterBase { 84 class Emitter extends js_emitter.EmitterBase {
86 final Compiler compiler; 85 final Compiler compiler;
87 final CodeEmitterTask task; 86 final CodeEmitterTask task;
88 final ClosedWorld _closedWorld; 87 final ClosedWorld _closedWorld;
89 88
90 // The following fields will be set to copies of the program-builder's 89 // The following fields will be set to copies of the program-builder's
91 // collector. 90 // collector.
92 Map<OutputUnit, List<FieldEntity>> outputStaticNonFinalFieldLists; 91 Map<OutputUnit, List<FieldEntity>> outputStaticNonFinalFieldLists;
93 Map<OutputUnit, Set<LibraryEntity>> outputLibraryLists; 92 Map<OutputUnit, Set<LibraryEntity>> outputLibraryLists;
94 List<TypedefElement> typedefsNeededForReflection; 93 List<TypedefEntity> typedefsNeededForReflection;
95 94
96 final ContainerBuilder containerBuilder = new ContainerBuilder(); 95 final ContainerBuilder containerBuilder = new ContainerBuilder();
97 final ClassEmitter classEmitter; 96 final ClassEmitter classEmitter;
98 final NsmEmitter nsmEmitter; 97 final NsmEmitter nsmEmitter;
99 final InterceptorEmitter interceptorEmitter; 98 final InterceptorEmitter interceptorEmitter;
100 final Sorter _sorter; 99 final Sorter _sorter;
101 100
102 // TODO(johnniwinther): Wrap these fields in a caching strategy. 101 // TODO(johnniwinther): Wrap these fields in a caching strategy.
103 final List<jsAst.Statement> cachedEmittedConstantsAst = <jsAst.Statement>[]; 102 final List<jsAst.Statement> cachedEmittedConstantsAst = <jsAst.Statement>[];
104 103
(...skipping 401 matching lines...) Expand 10 before | Expand all | Expand 10 after
506 } else if (selector.isSetter) { 505 } else if (selector.isSetter) {
507 return _getReflectionSetterName(selector.memberName, mangledName); 506 return _getReflectionSetterName(selector.memberName, mangledName);
508 } else { 507 } else {
509 return _getReflectionFunctionName( 508 return _getReflectionFunctionName(
510 selector.memberName, selector.callStructure); 509 selector.memberName, selector.callStructure);
511 } 510 }
512 } 511 }
513 return null; 512 return null;
514 } 513 }
515 514
516 /// Returns the "reflection name" of a [TypedefElement], if needed. 515 /// Returns the "reflection name" of a [TypedefEntity], if needed.
517 /// 516 ///
518 /// The reflection name of typedef 'F' is 'F'. 517 /// The reflection name of typedef 'F' is 'F'.
519 /// 518 ///
520 /// This is used by js_mirrors.dart. 519 /// This is used by js_mirrors.dart.
521 String getReflectionTypedefName( 520 String getReflectionTypedefName(
522 TypedefElement typedef, jsAst.Name mangledName) { 521 TypedefEntity typedef, jsAst.Name mangledName) {
523 String name = typedef.name; 522 String name = typedef.name;
524 if (backend.mirrorsData.shouldRetainName(name)) { 523 if (backend.mirrorsData.shouldRetainName(name)) {
525 // TODO(ahe): Enable the next line when I can tell the difference between 524 // TODO(ahe): Enable the next line when I can tell the difference between
526 // an instance method and a global. They may have the same mangled name. 525 // an instance method and a global. They may have the same mangled name.
527 // if (recordedMangledNames.contains(mangledName)) return null; 526 // if (recordedMangledNames.contains(mangledName)) return null;
528 recordedMangledNames.add(mangledName); 527 recordedMangledNames.add(mangledName);
529 return typedef.name; 528 return typedef.name;
530 } 529 }
531 return null; 530 return null;
532 } 531 }
(...skipping 617 matching lines...) Expand 10 before | Expand all | Expand 10 after
1150 cspPrecompiledConstructorNamesFor(outputUnit).add(js('#', constructorName)); 1149 cspPrecompiledConstructorNamesFor(outputUnit).add(js('#', constructorName));
1151 } 1150 }
1152 1151
1153 void assembleTypedefs(Program program) { 1152 void assembleTypedefs(Program program) {
1154 Fragment mainFragment = program.mainFragment; 1153 Fragment mainFragment = program.mainFragment;
1155 OutputUnit mainOutputUnit = mainFragment.outputUnit; 1154 OutputUnit mainOutputUnit = mainFragment.outputUnit;
1156 1155
1157 // Emit all required typedef declarations into the main output unit. 1156 // Emit all required typedef declarations into the main output unit.
1158 // TODO(karlklose): unify required classes and typedefs to declarations 1157 // TODO(karlklose): unify required classes and typedefs to declarations
1159 // and have builders for each kind. 1158 // and have builders for each kind.
1160 for (TypedefElement typedef in typedefsNeededForReflection) { 1159 for (TypedefEntity typedef in typedefsNeededForReflection) {
1161 LibraryElement library = typedef.library; 1160 LibraryEntity library = typedef.library;
1162 // TODO(karlklose): add a TypedefBuilder and move this code there. 1161 // TODO(karlklose): add a TypedefBuilder and move this code there.
1163 ResolutionDartType type = typedef.alias; 1162 FunctionType type = _elementEnvironment.getFunctionTypeOfTypedef(typedef);
1164 // TODO(zarah): reify type variables once reflection on type arguments of 1163 // TODO(zarah): reify type variables once reflection on type arguments of
1165 // typedefs is supported. 1164 // typedefs is supported.
1166 jsAst.Expression typeIndex = 1165 jsAst.Expression typeIndex =
1167 task.metadataCollector.reifyType(type, ignoreTypeVariables: true); 1166 task.metadataCollector.reifyType(type, ignoreTypeVariables: true);
1168 ClassBuilder builder = new ClassBuilder.forStatics(typedef, namer); 1167 ClassBuilder builder = new ClassBuilder.forStatics(typedef, namer);
1169 builder.addPropertyByName( 1168 builder.addPropertyByName(
1170 embeddedNames.TYPEDEF_TYPE_PROPERTY_NAME, typeIndex); 1169 embeddedNames.TYPEDEF_TYPE_PROPERTY_NAME, typeIndex);
1171 builder.addPropertyByName( 1170 builder.addPropertyByName(
1172 embeddedNames.TYPEDEF_PREDICATE_PROPERTY_NAME, js.boolean(true)); 1171 embeddedNames.TYPEDEF_PREDICATE_PROPERTY_NAME, js.boolean(true));
1173 1172
(...skipping 789 matching lines...) Expand 10 before | Expand all | Expand 10 after
1963 // data. 1962 // data.
1964 mapping["_comment"] = "This mapping shows which compiled `.js` files are " 1963 mapping["_comment"] = "This mapping shows which compiled `.js` files are "
1965 "needed for a given deferred library import."; 1964 "needed for a given deferred library import.";
1966 mapping.addAll(compiler.deferredLoadTask.computeDeferredMap()); 1965 mapping.addAll(compiler.deferredLoadTask.computeDeferredMap());
1967 compiler.outputProvider( 1966 compiler.outputProvider(
1968 compiler.options.deferredMapUri.path, '', OutputType.info) 1967 compiler.options.deferredMapUri.path, '', OutputType.info)
1969 ..add(const JsonEncoder.withIndent(" ").convert(mapping)) 1968 ..add(const JsonEncoder.withIndent(" ").convert(mapping))
1970 ..close(); 1969 ..close();
1971 } 1970 }
1972 } 1971 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/js_backend/namer.dart ('k') | pkg/compiler/lib/src/js_emitter/program_builder/collector.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698