Chromium Code Reviews| 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 import '../common.dart'; | 5 import '../common.dart'; |
| 6 import '../compiler.dart' show Compiler; | 6 import '../compiler.dart' show Compiler; |
| 7 import '../constants/values.dart'; | 7 import '../constants/values.dart'; |
| 8 import '../dart_types.dart'; | 8 import '../dart_types.dart'; |
| 9 import '../elements/elements.dart'; | 9 import '../elements/elements.dart'; |
| 10 import '../io/code_output.dart'; | 10 import '../io/code_output.dart'; |
| (...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 247 emittedArgumentCount != 4) || | 247 emittedArgumentCount != 4) || |
| 248 (className == JavaScriptMapConstant.DART_GENERAL_CLASS && | 248 (className == JavaScriptMapConstant.DART_GENERAL_CLASS && |
| 249 emittedArgumentCount != 1)) { | 249 emittedArgumentCount != 1)) { |
| 250 reporter.internalError(classElement, | 250 reporter.internalError(classElement, |
| 251 "Compiler and ${className} disagree on number of fields."); | 251 "Compiler and ${className} disagree on number of fields."); |
| 252 } | 252 } |
| 253 | 253 |
| 254 jsAst.Expression constructor = | 254 jsAst.Expression constructor = |
| 255 backend.emitter.constructorAccess(classElement); | 255 backend.emitter.constructorAccess(classElement); |
| 256 jsAst.Expression value = new jsAst.New(constructor, arguments); | 256 jsAst.Expression value = new jsAst.New(constructor, arguments); |
| 257 // Fix. Add an argument. | |
|
Siggi Cherem (dart-lang)
2016/08/19 16:39:46
did you indent to fix this one with this CL too?
| |
| 257 return maybeAddTypeArguments(constant.type, value); | 258 return maybeAddTypeArguments(constant.type, value); |
| 258 } | 259 } |
| 259 | 260 |
| 260 JavaScriptBackend get backend => compiler.backend; | 261 JavaScriptBackend get backend => compiler.backend; |
| 261 | 262 |
| 262 jsAst.PropertyAccess getHelperProperty(Element helper) { | 263 jsAst.PropertyAccess getHelperProperty(Element helper) { |
| 263 return backend.emitter.staticFunctionAccess(helper); | 264 return backend.emitter.staticFunctionAccess(helper); |
| 264 } | 265 } |
| 265 | 266 |
| 266 @override | 267 @override |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 300 StringConstantValue str = constant.fields.values.single; | 301 StringConstantValue str = constant.fields.values.single; |
| 301 String value = str.primitiveValue.slowToString(); | 302 String value = str.primitiveValue.slowToString(); |
| 302 return new jsAst.LiteralExpression(stripComments(value)); | 303 return new jsAst.LiteralExpression(stripComments(value)); |
| 303 } | 304 } |
| 304 jsAst.Expression constructor = | 305 jsAst.Expression constructor = |
| 305 backend.emitter.constructorAccess(constant.type.element); | 306 backend.emitter.constructorAccess(constant.type.element); |
| 306 List<jsAst.Expression> fields = <jsAst.Expression>[]; | 307 List<jsAst.Expression> fields = <jsAst.Expression>[]; |
| 307 element.forEachInstanceField((_, FieldElement field) { | 308 element.forEachInstanceField((_, FieldElement field) { |
| 308 fields.add(constantReferenceGenerator(constant.fields[field])); | 309 fields.add(constantReferenceGenerator(constant.fields[field])); |
| 309 }, includeSuperAndInjectedMembers: true); | 310 }, includeSuperAndInjectedMembers: true); |
| 311 if (backend.classNeedsRti(constant.type.element)) { | |
| 312 fields.add(_reifiedTypeArguments(constant.type)); | |
| 313 } | |
| 310 jsAst.New instantiation = new jsAst.New(constructor, fields); | 314 jsAst.New instantiation = new jsAst.New(constructor, fields); |
| 311 return maybeAddTypeArguments(constant.type, instantiation); | 315 return instantiation; |
| 312 } | 316 } |
| 313 | 317 |
| 314 String stripComments(String rawJavaScript) { | 318 String stripComments(String rawJavaScript) { |
| 315 return rawJavaScript.replaceAll(COMMENT_RE, ''); | 319 return rawJavaScript.replaceAll(COMMENT_RE, ''); |
| 316 } | 320 } |
| 317 | 321 |
| 318 jsAst.Expression maybeAddTypeArguments( | 322 jsAst.Expression maybeAddTypeArguments( |
| 319 InterfaceType type, jsAst.Expression value) { | 323 InterfaceType type, jsAst.Expression value) { |
| 320 if (type is InterfaceType && | 324 if (type is InterfaceType && |
| 321 !type.treatAsRaw && | 325 !type.treatAsRaw && |
| 322 backend.classNeedsRti(type.element)) { | 326 backend.classNeedsRti(type.element)) { |
| 323 InterfaceType interface = type; | |
| 324 RuntimeTypesEncoder rtiEncoder = backend.rtiEncoder; | |
| 325 Iterable<jsAst.Expression> arguments = interface.typeArguments.map( | |
| 326 (DartType type) => | |
| 327 rtiEncoder.getTypeRepresentationWithPlaceholders(type, (_) {})); | |
| 328 jsAst.Expression argumentList = | |
| 329 new jsAst.ArrayInitializer(arguments.toList()); | |
| 330 return new jsAst.Call( | 327 return new jsAst.Call( |
| 331 getHelperProperty(backend.helpers.setRuntimeTypeInfo), | 328 getHelperProperty(backend.helpers.setRuntimeTypeInfo), |
| 332 [value, argumentList]); | 329 [value, _reifiedTypeArguments(type)]); |
| 333 } | 330 } |
| 334 return value; | 331 return value; |
| 335 } | 332 } |
| 336 | 333 |
| 334 jsAst.Expression _reifiedTypeArguments(InterfaceType type) { | |
| 335 RuntimeTypesEncoder rtiEncoder = backend.rtiEncoder; | |
| 336 Iterable<jsAst.Expression> arguments = type.typeArguments.map( | |
| 337 (DartType type) => | |
| 338 rtiEncoder.getTypeRepresentationWithPlaceholders(type, (_) {})); | |
| 339 jsAst.Expression argumentList = | |
| 340 new jsAst.ArrayInitializer(arguments.toList()); | |
| 341 return argumentList; | |
| 342 } | |
| 343 | |
| 337 @override | 344 @override |
| 338 jsAst.Expression visitDeferred(DeferredConstantValue constant, [_]) { | 345 jsAst.Expression visitDeferred(DeferredConstantValue constant, [_]) { |
| 339 return constantReferenceGenerator(constant.referenced); | 346 return constantReferenceGenerator(constant.referenced); |
| 340 } | 347 } |
| 341 } | 348 } |
| OLD | NEW |