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

Side by Side Diff: pkg/compiler/lib/src/kernel/element_map_mixins.dart

Issue 2964683003: Split implementation of KernelToElementMapImpl (Closed)
Patch Set: 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) 2017, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2017, 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 'package:js_runtime/shared/embedded_names.dart'; 5 import 'package:js_runtime/shared/embedded_names.dart';
6 import 'package:kernel/ast.dart' as ir; 6 import 'package:kernel/ast.dart' as ir;
7 7
8 import '../common.dart'; 8 import '../common.dart';
9 import '../common/names.dart'; 9 import '../common/names.dart';
10 import '../constants/constructors.dart'; 10 import '../constants/constructors.dart';
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after
299 299
300 /// Converts [annotations] into a list of [ConstantValue]s. 300 /// Converts [annotations] into a list of [ConstantValue]s.
301 List<ConstantValue> getMetadata(List<ir.Expression> annotations) { 301 List<ConstantValue> getMetadata(List<ir.Expression> annotations) {
302 if (annotations.isEmpty) return const <ConstantValue>[]; 302 if (annotations.isEmpty) return const <ConstantValue>[];
303 List<ConstantValue> metadata = <ConstantValue>[]; 303 List<ConstantValue> metadata = <ConstantValue>[];
304 annotations.forEach((ir.Expression node) { 304 annotations.forEach((ir.Expression node) {
305 metadata.add(getConstantValue(node)); 305 metadata.add(getConstantValue(node));
306 }); 306 });
307 return metadata; 307 return metadata;
308 } 308 }
309
310 FunctionEntity getSuperNoSuchMethod(ClassEntity cls) {
311 while (cls != null) {
312 cls = elementEnvironment.getSuperClass(cls);
313 MemberEntity member =
314 elementEnvironment.lookupClassMember(cls, Identifiers.noSuchMethod_);
315 if (member != null) {
316 if (member.isFunction) {
317 FunctionEntity function = member;
318 if (function.parameterStructure.positionalParameters >= 1) {
319 return function;
320 }
321 }
322 // If [member] is not a valid `noSuchMethod` the target is
323 // `Object.superNoSuchMethod`.
324 break;
325 }
326 }
327 FunctionEntity function = elementEnvironment.lookupClassMember(
328 commonElements.objectClass, Identifiers.noSuchMethod_);
329 assert(function != null,
330 failedAt(cls, "No super noSuchMethod found for class $cls."));
331 return function;
332 }
309 } 333 }
310 334
311 abstract class KernelToElementMapForImpactMixin 335 abstract class KernelToElementMapForImpactMixin
312 implements KernelToElementMapForImpact, KernelToElementMapBaseMixin { 336 implements KernelToElementMapForImpact, KernelToElementMapBaseMixin {
313 DiagnosticReporter get reporter; 337 DiagnosticReporter get reporter;
314 native.BehaviorBuilder get nativeBehaviorBuilder; 338 native.BehaviorBuilder get nativeBehaviorBuilder;
315 339
316 /// Returns `true` is [node] has a `@Native(...)` annotation. 340 /// Returns `true` is [node] has a `@Native(...)` annotation.
317 // TODO(johnniwinther): Cache this for later use. 341 // TODO(johnniwinther): Cache this for later use.
318 bool isNativeClass(ir.Class node) { 342 bool isNativeClass(ir.Class node) {
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
384 DartType type = getFunctionType(procedure.function); 408 DartType type = getFunctionType(procedure.function);
385 List<ConstantValue> metadata = getMetadata(procedure.annotations); 409 List<ConstantValue> metadata = getMetadata(procedure.annotations);
386 return nativeBehaviorBuilder.buildMethodBehavior( 410 return nativeBehaviorBuilder.buildMethodBehavior(
387 type, metadata, typeLookup(resolveAsRaw: false), 411 type, metadata, typeLookup(resolveAsRaw: false),
388 isJsInterop: isJsInterop); 412 isJsInterop: isJsInterop);
389 } 413 }
390 } 414 }
391 415
392 abstract class KernelToElementMapForBuildingMixin 416 abstract class KernelToElementMapForBuildingMixin
393 implements KernelToElementMapForBuilding, KernelToElementMapBaseMixin { 417 implements KernelToElementMapForBuilding, KernelToElementMapBaseMixin {
394 @override
395 FunctionEntity getSuperNoSuchMethod(ClassEntity cls) {
396 while (cls != null) {
397 cls = elementEnvironment.getSuperClass(cls);
398 MemberEntity member =
399 elementEnvironment.lookupClassMember(cls, Identifiers.noSuchMethod_);
400 if (member != null) {
401 if (member.isFunction) {
402 FunctionEntity function = member;
403 if (function.parameterStructure.positionalParameters >= 1) {
404 return function;
405 }
406 }
407 // If [member] is not a valid `noSuchMethod` the target is
408 // `Object.superNoSuchMethod`.
409 break;
410 }
411 }
412 FunctionEntity function = elementEnvironment.lookupClassMember(
413 commonElements.objectClass, Identifiers.noSuchMethod_);
414 assert(function != null,
415 failedAt(cls, "No super noSuchMethod found for class $cls."));
416 return function;
417 }
418
419 js.Template getJsBuiltinTemplate( 418 js.Template getJsBuiltinTemplate(
420 ConstantValue constant, CodeEmitterTask emitter) { 419 ConstantValue constant, CodeEmitterTask emitter) {
421 int index = _extractEnumIndexFromConstantValue( 420 int index = _extractEnumIndexFromConstantValue(
422 constant, commonElements.jsBuiltinEnum); 421 constant, commonElements.jsBuiltinEnum);
423 if (index == null) return null; 422 if (index == null) return null;
424 return emitter.builtinTemplateFor(JsBuiltin.values[index]); 423 return emitter.builtinTemplateFor(JsBuiltin.values[index]);
425 } 424 }
426 } 425 }
427 426
428 /// Visitor that converts string literals and concatenations of string literals 427 /// Visitor that converts string literals and concatenations of string literals
(...skipping 414 matching lines...) Expand 10 before | Expand all | Expand 10 after
843 } 842 }
844 if (isRedirecting) { 843 if (isRedirecting) {
845 return new RedirectingGenerativeConstantConstructor( 844 return new RedirectingGenerativeConstantConstructor(
846 defaultValues, superConstructorInvocation); 845 defaultValues, superConstructorInvocation);
847 } else { 846 } else {
848 return new GenerativeConstantConstructor( 847 return new GenerativeConstantConstructor(
849 type, defaultValues, fieldMap, superConstructorInvocation); 848 type, defaultValues, fieldMap, superConstructorInvocation);
850 } 849 }
851 } 850 }
852 } 851 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698