| OLD | NEW |
| 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:convert'; | 7 import 'dart:convert'; |
| 8 import 'dart:collection' show HashMap; | 8 import 'dart:collection' show HashMap; |
| 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' show | 11 import 'package:js_runtime/shared/embedded_names.dart' show |
| 12 JsBuiltin, | 12 JsBuiltin, |
| 13 JsGetName; | 13 JsGetName; |
| 14 | 14 |
| 15 import '../headers.dart'; | 15 import '../headers.dart'; |
| 16 import '../js_emitter.dart' hide Emitter; | 16 import '../js_emitter.dart' hide Emitter; |
| 17 import '../js_emitter.dart' as js_emitter show Emitter; | 17 import '../js_emitter.dart' as js_emitter show Emitter; |
| 18 import '../model.dart'; | 18 import '../model.dart'; |
| 19 import '../program_builder/program_builder.dart'; | 19 import '../program_builder/program_builder.dart'; |
| 20 import '../constant_ordering.dart' show deepCompareConstants; | |
| 21 | 20 |
| 22 import '../../common.dart'; | 21 import '../../common.dart'; |
| 23 import '../../common/names.dart' show | 22 import '../../common/names.dart' show |
| 24 Names; | 23 Names; |
| 25 import '../../compiler.dart' show | 24 import '../../compiler.dart' show |
| 26 Compiler; | 25 Compiler; |
| 27 import '../../constants/values.dart'; | 26 import '../../constants/values.dart'; |
| 28 import '../../core_types.dart' show | 27 import '../../core_types.dart' show |
| 29 CoreClasses; | 28 CoreClasses; |
| 30 import '../../dart_types.dart' show | 29 import '../../dart_types.dart' show |
| (...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 246 // Emit constant interceptors first. Constant interceptors for primitives | 245 // Emit constant interceptors first. Constant interceptors for primitives |
| 247 // might be used by code that builds other constants. See Issue 18173. | 246 // might be used by code that builds other constants. See Issue 18173. |
| 248 if (a.isInterceptor != b.isInterceptor) { | 247 if (a.isInterceptor != b.isInterceptor) { |
| 249 return a.isInterceptor ? -1 : 1; | 248 return a.isInterceptor ? -1 : 1; |
| 250 } | 249 } |
| 251 | 250 |
| 252 // Sorting by the long name clusters constants with the same constructor | 251 // Sorting by the long name clusters constants with the same constructor |
| 253 // which compresses a tiny bit better. | 252 // which compresses a tiny bit better. |
| 254 int r = namer.constantLongName(a).compareTo(namer.constantLongName(b)); | 253 int r = namer.constantLongName(a).compareTo(namer.constantLongName(b)); |
| 255 if (r != 0) return r; | 254 if (r != 0) return r; |
| 256 | 255 // Resolve collisions in the long name by using the constant name (i.e. JS |
| 257 // Resolve collisions in the long name by using a structural order. | 256 // name) which is unique. |
| 258 return deepCompareConstants(a, b); | 257 // TODO(herhut): Find a better way to resolve collisions. |
| 258 return namer.constantName(a).hashCode.compareTo( |
| 259 namer.constantName(b).hashCode); |
| 259 } | 260 } |
| 260 | 261 |
| 261 @override | 262 @override |
| 262 jsAst.Expression constantReference(ConstantValue value) { | 263 jsAst.Expression constantReference(ConstantValue value) { |
| 263 if (value.isFunction) { | 264 if (value.isFunction) { |
| 264 FunctionConstantValue functionConstant = value; | 265 FunctionConstantValue functionConstant = value; |
| 265 return isolateStaticClosureAccess(functionConstant.element); | 266 return isolateStaticClosureAccess(functionConstant.element); |
| 266 } | 267 } |
| 267 | 268 |
| 268 // We are only interested in the "isInlined" part, but it does not hurt to | 269 // We are only interested in the "isInlined" part, but it does not hurt to |
| (...skipping 1861 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2130 for (Element element in compiler.enqueuer.codegen.newlyEnqueuedElements) { | 2131 for (Element element in compiler.enqueuer.codegen.newlyEnqueuedElements) { |
| 2131 if (element.isInstanceMember) { | 2132 if (element.isInstanceMember) { |
| 2132 cachedClassBuilders.remove(element.enclosingClass); | 2133 cachedClassBuilders.remove(element.enclosingClass); |
| 2133 | 2134 |
| 2134 nativeEmitter.cachedBuilders.remove(element.enclosingClass); | 2135 nativeEmitter.cachedBuilders.remove(element.enclosingClass); |
| 2135 | 2136 |
| 2136 } | 2137 } |
| 2137 } | 2138 } |
| 2138 } | 2139 } |
| 2139 } | 2140 } |
| OLD | NEW |