| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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 elements.modelx; | 5 library elements.modelx; |
| 6 | 6 |
| 7 import 'elements.dart'; | 7 import 'elements.dart'; |
| 8 import '../constants/expressions.dart'; | 8 import '../constants/expressions.dart'; |
| 9 import '../helpers/helpers.dart'; // Included for debug helpers. | 9 import '../helpers/helpers.dart'; // Included for debug helpers. |
| 10 import '../tree/tree.dart'; | 10 import '../tree/tree.dart'; |
| (...skipping 1432 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1443 class FunctionSignatureX implements FunctionSignature { | 1443 class FunctionSignatureX implements FunctionSignature { |
| 1444 final Link<Element> requiredParameters; | 1444 final Link<Element> requiredParameters; |
| 1445 final Link<Element> optionalParameters; | 1445 final Link<Element> optionalParameters; |
| 1446 final int requiredParameterCount; | 1446 final int requiredParameterCount; |
| 1447 final int optionalParameterCount; | 1447 final int optionalParameterCount; |
| 1448 final bool optionalParametersAreNamed; | 1448 final bool optionalParametersAreNamed; |
| 1449 final List<Element> orderedOptionalParameters; | 1449 final List<Element> orderedOptionalParameters; |
| 1450 final FunctionType type; | 1450 final FunctionType type; |
| 1451 final bool hasOptionalParameters; | 1451 final bool hasOptionalParameters; |
| 1452 | 1452 |
| 1453 FunctionSignatureX(this.requiredParameters, | 1453 FunctionSignatureX({this.requiredParameters: const Link<Element>(), |
| 1454 Link<Element> optionalParameters, | 1454 this.requiredParameterCount: 0, |
| 1455 this.requiredParameterCount, | 1455 Link<Element> optionalParameters: const Link<Element>(), |
| 1456 this.optionalParameterCount, | 1456 this.optionalParameterCount: 0, |
| 1457 this.optionalParametersAreNamed, | 1457 this.optionalParametersAreNamed: false, |
| 1458 this.orderedOptionalParameters, | 1458 this.orderedOptionalParameters: const <Element>[], |
| 1459 this.type) | 1459 this.type}) |
| 1460 : optionalParameters = optionalParameters, | 1460 : optionalParameters = optionalParameters, |
| 1461 hasOptionalParameters = !optionalParameters.isEmpty; | 1461 hasOptionalParameters = !optionalParameters.isEmpty; |
| 1462 | 1462 |
| 1463 void forEachRequiredParameter(void function(Element parameter)) { | 1463 void forEachRequiredParameter(void function(Element parameter)) { |
| 1464 for (Link<Element> link = requiredParameters; | 1464 for (Link<Element> link = requiredParameters; |
| 1465 !link.isEmpty; | 1465 !link.isEmpty; |
| 1466 link = link.tail) { | 1466 link = link.tail) { |
| 1467 function(link.head); | 1467 function(link.head); |
| 1468 } | 1468 } |
| 1469 } | 1469 } |
| (...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1711 : this.prefix = prefix, | 1711 : this.prefix = prefix, |
| 1712 super("loadLibrary", | 1712 super("loadLibrary", |
| 1713 ElementKind.FUNCTION, | 1713 ElementKind.FUNCTION, |
| 1714 Modifiers.EMPTY, | 1714 Modifiers.EMPTY, |
| 1715 prefix, true); | 1715 prefix, true); |
| 1716 | 1716 |
| 1717 FunctionSignature computeSignature(Compiler compiler) { | 1717 FunctionSignature computeSignature(Compiler compiler) { |
| 1718 if (functionSignatureCache != null) return functionSignature; | 1718 if (functionSignatureCache != null) return functionSignature; |
| 1719 compiler.withCurrentElement(this, () { | 1719 compiler.withCurrentElement(this, () { |
| 1720 DartType inner = new FunctionType(this); | 1720 DartType inner = new FunctionType(this); |
| 1721 functionSignatureCache = new FunctionSignatureX(const Link(), | 1721 functionSignatureCache = new FunctionSignatureX(type: inner); |
| 1722 const Link(), 0, 0, false, [], inner); | |
| 1723 }); | 1722 }); |
| 1724 return functionSignatureCache; | 1723 return functionSignatureCache; |
| 1725 } | 1724 } |
| 1726 | 1725 |
| 1727 bool get isClassMember => false; | 1726 bool get isClassMember => false; |
| 1728 | 1727 |
| 1729 bool isForeign(Backend backend) => true; | 1728 bool isForeign(Backend backend) => true; |
| 1730 | 1729 |
| 1731 bool get isSynthesized => true; | 1730 bool get isSynthesized => true; |
| 1732 | 1731 |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1813 FunctionExpression get node => null; | 1812 FunctionExpression get node => null; |
| 1814 | 1813 |
| 1815 Token get position => enclosingElement.position; | 1814 Token get position => enclosingElement.position; |
| 1816 | 1815 |
| 1817 bool get isSynthesized => true; | 1816 bool get isSynthesized => true; |
| 1818 | 1817 |
| 1819 FunctionSignature computeSignature(compiler) { | 1818 FunctionSignature computeSignature(compiler) { |
| 1820 if (functionSignatureCache != null) return functionSignatureCache; | 1819 if (functionSignatureCache != null) return functionSignatureCache; |
| 1821 if (isDefaultConstructor) { | 1820 if (isDefaultConstructor) { |
| 1822 return functionSignatureCache = new FunctionSignatureX( | 1821 return functionSignatureCache = new FunctionSignatureX( |
| 1823 const Link<Element>(), const Link<Element>(), 0, 0, false, | 1822 type: new FunctionType(this, enclosingClass.thisType)); |
| 1824 const <Element>[], | |
| 1825 new FunctionType(this, enclosingClass.thisType)); | |
| 1826 } | 1823 } |
| 1827 if (definingConstructor.isErroneous) { | 1824 if (definingConstructor.isErroneous) { |
| 1828 return functionSignatureCache = | 1825 return functionSignatureCache = |
| 1829 compiler.objectClass.localLookup('').computeSignature(compiler); | 1826 compiler.objectClass.localLookup('').computeSignature(compiler); |
| 1830 } | 1827 } |
| 1831 // TODO(johnniwinther): Ensure that the function signature (and with it the | 1828 // TODO(johnniwinther): Ensure that the function signature (and with it the |
| 1832 // function type) substitutes type variables correctly. | 1829 // function type) substitutes type variables correctly. |
| 1833 return functionSignatureCache = | 1830 return functionSignatureCache = |
| 1834 definingConstructor.computeSignature(compiler); | 1831 definingConstructor.computeSignature(compiler); |
| 1835 } | 1832 } |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1966 : supertypeLoadState = initialState, | 1963 : supertypeLoadState = initialState, |
| 1967 resolutionState = initialState, | 1964 resolutionState = initialState, |
| 1968 super(name, ElementKind.CLASS, enclosing); | 1965 super(name, ElementKind.CLASS, enclosing); |
| 1969 | 1966 |
| 1970 int get hashCode => id; | 1967 int get hashCode => id; |
| 1971 | 1968 |
| 1972 bool get hasBackendMembers => !backendMembers.isEmpty; | 1969 bool get hasBackendMembers => !backendMembers.isEmpty; |
| 1973 | 1970 |
| 1974 bool get isUnnamedMixinApplication => false; | 1971 bool get isUnnamedMixinApplication => false; |
| 1975 | 1972 |
| 1973 @override |
| 1974 bool get isEnumClass => false; |
| 1975 |
| 1976 InterfaceType computeType(Compiler compiler) { | 1976 InterfaceType computeType(Compiler compiler) { |
| 1977 if (thisTypeCache == null) { | 1977 if (thisTypeCache == null) { |
| 1978 computeThisAndRawType(compiler, computeTypeParameters(compiler)); | 1978 computeThisAndRawType(compiler, computeTypeParameters(compiler)); |
| 1979 } | 1979 } |
| 1980 return thisTypeCache; | 1980 return thisTypeCache; |
| 1981 } | 1981 } |
| 1982 | 1982 |
| 1983 void computeThisAndRawType(Compiler compiler, List<DartType> typeVariables) { | 1983 void computeThisAndRawType(Compiler compiler, List<DartType> typeVariables) { |
| 1984 if (thisTypeCache == null) { | 1984 if (thisTypeCache == null) { |
| 1985 if (origin == null) { | 1985 if (origin == null) { |
| (...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2348 Link<Element> get localMembers { | 2348 Link<Element> get localMembers { |
| 2349 if (localMembersCache == null) { | 2349 if (localMembersCache == null) { |
| 2350 localMembersCache = localMembersReversed.reverse(); | 2350 localMembersCache = localMembersReversed.reverse(); |
| 2351 } | 2351 } |
| 2352 return localMembersCache; | 2352 return localMembersCache; |
| 2353 } | 2353 } |
| 2354 | 2354 |
| 2355 ClassElementX(String name, Element enclosing, int id, int initialState) | 2355 ClassElementX(String name, Element enclosing, int id, int initialState) |
| 2356 : super(name, enclosing, id, initialState); | 2356 : super(name, enclosing, id, initialState); |
| 2357 | 2357 |
| 2358 ClassNode parseNode(Compiler compiler); | |
| 2359 | |
| 2360 bool get isMixinApplication => false; | 2358 bool get isMixinApplication => false; |
| 2361 bool get hasLocalScopeMembers => !localScope.isEmpty; | 2359 bool get hasLocalScopeMembers => !localScope.isEmpty; |
| 2362 | 2360 |
| 2363 void addMember(Element element, DiagnosticListener listener) { | 2361 void addMember(Element element, DiagnosticListener listener) { |
| 2364 localMembersCache = null; | 2362 localMembersCache = null; |
| 2365 localMembersReversed = localMembersReversed.prepend(element); | 2363 localMembersReversed = localMembersReversed.prepend(element); |
| 2366 addToScope(element, listener); | 2364 addToScope(element, listener); |
| 2367 } | 2365 } |
| 2368 | 2366 |
| 2369 void addToScope(Element element, DiagnosticListener listener) { | 2367 void addToScope(Element element, DiagnosticListener listener) { |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2409 if (origin != null) { | 2407 if (origin != null) { |
| 2410 return 'patch ${super.toString()}'; | 2408 return 'patch ${super.toString()}'; |
| 2411 } else if (patch != null) { | 2409 } else if (patch != null) { |
| 2412 return 'origin ${super.toString()}'; | 2410 return 'origin ${super.toString()}'; |
| 2413 } else { | 2411 } else { |
| 2414 return super.toString(); | 2412 return super.toString(); |
| 2415 } | 2413 } |
| 2416 } | 2414 } |
| 2417 } | 2415 } |
| 2418 | 2416 |
| 2417 class EnumClassElementX extends ClassElementX { |
| 2418 final Enum node; |
| 2419 |
| 2420 EnumClassElementX(String name, Element enclosing, int id, this.node) |
| 2421 : super(name, enclosing, id, STATE_NOT_STARTED); |
| 2422 |
| 2423 @override |
| 2424 bool get hasNode => true; |
| 2425 |
| 2426 @override |
| 2427 Token get position => node.name.token; |
| 2428 |
| 2429 @override |
| 2430 bool get isEnumClass => true; |
| 2431 |
| 2432 @override |
| 2433 Node parseNode(Compiler compiler) => node; |
| 2434 |
| 2435 @override |
| 2436 accept(ElementVisitor visitor) => visitor.visitClassElement(this); |
| 2437 |
| 2438 List<DartType> computeTypeParameters(Compiler compiler) => const <DartType>[]; |
| 2439 } |
| 2440 |
| 2441 class EnumConstructorElementX extends ConstructorElementX { |
| 2442 final FunctionExpression node; |
| 2443 |
| 2444 EnumConstructorElementX(EnumClassElementX enumClass, |
| 2445 Modifiers modifiers, |
| 2446 this.node) |
| 2447 : super('', // Name. |
| 2448 ElementKind.GENERATIVE_CONSTRUCTOR, |
| 2449 modifiers, |
| 2450 enumClass); |
| 2451 |
| 2452 @override |
| 2453 bool get hasNode => true; |
| 2454 |
| 2455 @override |
| 2456 FunctionExpression parseNode(Compiler compiler) => node; |
| 2457 } |
| 2458 |
| 2459 class EnumMethodElementX extends FunctionElementX { |
| 2460 final FunctionExpression node; |
| 2461 |
| 2462 EnumMethodElementX(String name, |
| 2463 EnumClassElementX enumClass, |
| 2464 Modifiers modifiers, |
| 2465 this.node) |
| 2466 : super(name, |
| 2467 ElementKind.FUNCTION, |
| 2468 modifiers, |
| 2469 enumClass, |
| 2470 false); |
| 2471 |
| 2472 @override |
| 2473 bool get hasNode => true; |
| 2474 |
| 2475 @override |
| 2476 FunctionExpression parseNode(Compiler compiler) => node; |
| 2477 } |
| 2478 |
| 2479 class EnumFormalElementX extends InitializingFormalElementX { |
| 2480 EnumFormalElementX(ConstructorElement constructor, |
| 2481 VariableDefinitions variables, |
| 2482 Identifier identifier, |
| 2483 EnumFieldElementX fieldElement) |
| 2484 : super(constructor, variables, identifier, null, fieldElement) { |
| 2485 typeCache = fieldElement.type; |
| 2486 } |
| 2487 } |
| 2488 |
| 2489 class EnumFieldElementX extends FieldElementX { |
| 2490 |
| 2491 EnumFieldElementX(Identifier name, |
| 2492 EnumClassElementX enumClass, |
| 2493 VariableList variableList, |
| 2494 Node definition, |
| 2495 [Expression initializer]) |
| 2496 : super(name, enumClass, variableList) { |
| 2497 definitionsCache = new VariableDefinitions(null, |
| 2498 variableList.modifiers, new NodeList.singleton(definition)); |
| 2499 initializerCache = initializer; |
| 2500 } |
| 2501 } |
| 2502 |
| 2419 class MixinApplicationElementX extends BaseClassElementX | 2503 class MixinApplicationElementX extends BaseClassElementX |
| 2420 implements MixinApplicationElement { | 2504 implements MixinApplicationElement { |
| 2421 final Node node; | 2505 final Node node; |
| 2422 final Modifiers modifiers; | 2506 final Modifiers modifiers; |
| 2423 | 2507 |
| 2424 Link<FunctionElement> constructors = new Link<FunctionElement>(); | 2508 Link<FunctionElement> constructors = new Link<FunctionElement>(); |
| 2425 | 2509 |
| 2426 InterfaceType mixinType; | 2510 InterfaceType mixinType; |
| 2427 | 2511 |
| 2428 MixinApplicationElementX(String name, Element enclosing, int id, | 2512 MixinApplicationElementX(String name, Element enclosing, int id, |
| (...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2712 AstElement get definingElement; | 2796 AstElement get definingElement; |
| 2713 | 2797 |
| 2714 bool get hasResolvedAst => definingElement.hasTreeElements; | 2798 bool get hasResolvedAst => definingElement.hasTreeElements; |
| 2715 | 2799 |
| 2716 ResolvedAst get resolvedAst { | 2800 ResolvedAst get resolvedAst { |
| 2717 return new ResolvedAst(declaration, | 2801 return new ResolvedAst(declaration, |
| 2718 definingElement.node, definingElement.treeElements); | 2802 definingElement.node, definingElement.treeElements); |
| 2719 } | 2803 } |
| 2720 | 2804 |
| 2721 } | 2805 } |
| OLD | NEW |