| 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 class TypeCheckerTask extends CompilerTask { | 5 class TypeCheckerTask extends CompilerTask { |
| 6 TypeCheckerTask(Compiler compiler) : super(compiler); | 6 TypeCheckerTask(Compiler compiler) : super(compiler); |
| 7 String get name => "Type checker"; | 7 String get name => "Type checker"; |
| 8 | 8 |
| 9 static const bool LOG_FAILURES = false; | 9 static const bool LOG_FAILURES = false; |
| 10 | 10 |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 55 | 55 |
| 56 class TypeVariableType implements DartType { | 56 class TypeVariableType implements DartType { |
| 57 final TypeVariableElement element; | 57 final TypeVariableElement element; |
| 58 | 58 |
| 59 TypeVariableType(this.element); | 59 TypeVariableType(this.element); |
| 60 | 60 |
| 61 SourceString get name => element.name; | 61 SourceString get name => element.name; |
| 62 | 62 |
| 63 DartType unalias(Compiler compiler) => this; | 63 DartType unalias(Compiler compiler) => this; |
| 64 | 64 |
| 65 int hashCode() => 17 * element.hashCode(); | 65 int get hashCode => 17 * element.hashCode; |
| 66 | 66 |
| 67 bool operator ==(other) { | 67 bool operator ==(other) { |
| 68 if (other is !TypeVariableType) return false; | 68 if (other is !TypeVariableType) return false; |
| 69 return identical(other.element, element); | 69 return identical(other.element, element); |
| 70 } | 70 } |
| 71 | 71 |
| 72 String toString() => name.slowToString(); | 72 String toString() => name.slowToString(); |
| 73 } | 73 } |
| 74 | 74 |
| 75 /** | 75 /** |
| (...skipping 11 matching lines...) Expand all Loading... |
| 87 static const NOT_RETURNING = const StatementType('<not returning>'); | 87 static const NOT_RETURNING = const StatementType('<not returning>'); |
| 88 static const MAYBE_RETURNING = const StatementType('<maybe returning>'); | 88 static const MAYBE_RETURNING = const StatementType('<maybe returning>'); |
| 89 | 89 |
| 90 /** Combine the information about two control-flow edges that are joined. */ | 90 /** Combine the information about two control-flow edges that are joined. */ |
| 91 StatementType join(StatementType other) { | 91 StatementType join(StatementType other) { |
| 92 return (identical(this, other)) ? this : MAYBE_RETURNING; | 92 return (identical(this, other)) ? this : MAYBE_RETURNING; |
| 93 } | 93 } |
| 94 | 94 |
| 95 DartType unalias(Compiler compiler) => this; | 95 DartType unalias(Compiler compiler) => this; |
| 96 | 96 |
| 97 int hashCode() => 17 * stringName.hashCode(); | 97 int get hashCode => 17 * stringName.hashCode; |
| 98 | 98 |
| 99 bool operator ==(other) { | 99 bool operator ==(other) { |
| 100 if (other is !StatementType) return false; | 100 if (other is !StatementType) return false; |
| 101 return other.stringName == stringName; | 101 return other.stringName == stringName; |
| 102 } | 102 } |
| 103 | 103 |
| 104 String toString() => stringName; | 104 String toString() => stringName; |
| 105 } | 105 } |
| 106 | 106 |
| 107 class VoidType implements DartType { | 107 class VoidType implements DartType { |
| 108 const VoidType(this.element); | 108 const VoidType(this.element); |
| 109 SourceString get name => element.name; | 109 SourceString get name => element.name; |
| 110 final VoidElement element; | 110 final VoidElement element; |
| 111 | 111 |
| 112 DartType unalias(Compiler compiler) => this; | 112 DartType unalias(Compiler compiler) => this; |
| 113 | 113 |
| 114 int hashCode() => 1729; | 114 int get hashCode => 1729; |
| 115 | 115 |
| 116 bool operator ==(other) => other is VoidType; | 116 bool operator ==(other) => other is VoidType; |
| 117 | 117 |
| 118 String toString() => name.slowToString(); | 118 String toString() => name.slowToString(); |
| 119 } | 119 } |
| 120 | 120 |
| 121 class InterfaceType implements DartType { | 121 class InterfaceType implements DartType { |
| 122 final Element element; | 122 final Element element; |
| 123 final Link<DartType> arguments; | 123 final Link<DartType> arguments; |
| 124 | 124 |
| 125 const InterfaceType(this.element, | 125 const InterfaceType(this.element, |
| 126 [this.arguments = const Link<DartType>()]); | 126 [this.arguments = const Link<DartType>()]); |
| 127 | 127 |
| 128 SourceString get name => element.name; | 128 SourceString get name => element.name; |
| 129 | 129 |
| 130 DartType unalias(Compiler compiler) => this; | 130 DartType unalias(Compiler compiler) => this; |
| 131 | 131 |
| 132 String toString() { | 132 String toString() { |
| 133 StringBuffer sb = new StringBuffer(); | 133 StringBuffer sb = new StringBuffer(); |
| 134 sb.add(name.slowToString()); | 134 sb.add(name.slowToString()); |
| 135 if (!arguments.isEmpty()) { | 135 if (!arguments.isEmpty()) { |
| 136 sb.add('<'); | 136 sb.add('<'); |
| 137 arguments.printOn(sb, ', '); | 137 arguments.printOn(sb, ', '); |
| 138 sb.add('>'); | 138 sb.add('>'); |
| 139 } | 139 } |
| 140 return sb.toString(); | 140 return sb.toString(); |
| 141 } | 141 } |
| 142 | 142 |
| 143 int hashCode() { | 143 int get hashCode { |
| 144 int hash = element.hashCode(); | 144 int hash = element.hashCode; |
| 145 for (Link<DartType> arguments = this.arguments; | 145 for (Link<DartType> arguments = this.arguments; |
| 146 !arguments.isEmpty(); | 146 !arguments.isEmpty(); |
| 147 arguments = arguments.tail) { | 147 arguments = arguments.tail) { |
| 148 int argumentHash = arguments.head != null ? arguments.head.hashCode() : 0; | 148 int argumentHash = arguments.head != null ? arguments.head.hashCode : 0; |
| 149 hash = 17 * hash + 3 * argumentHash; | 149 hash = 17 * hash + 3 * argumentHash; |
| 150 } | 150 } |
| 151 return hash; | 151 return hash; |
| 152 } | 152 } |
| 153 | 153 |
| 154 bool operator ==(other) { | 154 bool operator ==(other) { |
| 155 if (other is !InterfaceType) return false; | 155 if (other is !InterfaceType) return false; |
| 156 if (!identical(element, other.element)) return false; | 156 if (!identical(element, other.element)) return false; |
| 157 return arguments == other.arguments; | 157 return arguments == other.arguments; |
| 158 } | 158 } |
| (...skipping 28 matching lines...) Expand all Loading... |
| 187 return arity; | 187 return arity; |
| 188 } | 188 } |
| 189 | 189 |
| 190 void initializeFrom(FunctionType other) { | 190 void initializeFrom(FunctionType other) { |
| 191 assert(returnType == null); | 191 assert(returnType == null); |
| 192 assert(parameterTypes == null); | 192 assert(parameterTypes == null); |
| 193 returnType = other.returnType; | 193 returnType = other.returnType; |
| 194 parameterTypes = other.parameterTypes; | 194 parameterTypes = other.parameterTypes; |
| 195 } | 195 } |
| 196 | 196 |
| 197 int hashCode() { | 197 int get hashCode { |
| 198 int hash = 17 * element.hashCode() + 3 * returnType.hashCode(); | 198 int hash = 17 * element.hashCode + 3 * returnType.hashCode; |
| 199 for (Link<DartType> parameters = parameterTypes; | 199 for (Link<DartType> parameters = parameterTypes; |
| 200 !parameters.isEmpty(); | 200 !parameters.isEmpty(); |
| 201 parameters = parameters.tail) { | 201 parameters = parameters.tail) { |
| 202 hash = 17 * hash + 3 * parameters.head.hashCode(); | 202 hash = 17 * hash + 3 * parameters.head.hashCode; |
| 203 } | 203 } |
| 204 return hash; | 204 return hash; |
| 205 } | 205 } |
| 206 | 206 |
| 207 bool operator ==(other) { | 207 bool operator ==(other) { |
| 208 if (other is !FunctionType) return false; | 208 if (other is !FunctionType) return false; |
| 209 return returnType == other.returnType | 209 return returnType == other.returnType |
| 210 && parameterTypes == other.parameterTypes; | 210 && parameterTypes == other.parameterTypes; |
| 211 } | 211 } |
| 212 } | 212 } |
| (...skipping 17 matching lines...) Expand all Loading... |
| 230 StringBuffer sb = new StringBuffer(); | 230 StringBuffer sb = new StringBuffer(); |
| 231 sb.add(name.slowToString()); | 231 sb.add(name.slowToString()); |
| 232 if (!typeArguments.isEmpty()) { | 232 if (!typeArguments.isEmpty()) { |
| 233 sb.add('<'); | 233 sb.add('<'); |
| 234 typeArguments.printOn(sb, ', '); | 234 typeArguments.printOn(sb, ', '); |
| 235 sb.add('>'); | 235 sb.add('>'); |
| 236 } | 236 } |
| 237 return sb.toString(); | 237 return sb.toString(); |
| 238 } | 238 } |
| 239 | 239 |
| 240 int hashCode() => 17 * element.hashCode(); | 240 int get hashCode => 17 * element.hashCode; |
| 241 | 241 |
| 242 bool operator ==(other) { | 242 bool operator ==(other) { |
| 243 if (other is !TypedefType) return false; | 243 if (other is !TypedefType) return false; |
| 244 if (!identical(element, other.element)) return false; | 244 if (!identical(element, other.element)) return false; |
| 245 return typeArguments == other.typeArguments; | 245 return typeArguments == other.typeArguments; |
| 246 } | 246 } |
| 247 } | 247 } |
| 248 | 248 |
| 249 class Types { | 249 class Types { |
| 250 final Compiler compiler; | 250 final Compiler compiler; |
| (...skipping 732 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 983 } | 983 } |
| 984 | 984 |
| 985 DartType visitStatement(Statement node) { | 985 DartType visitStatement(Statement node) { |
| 986 compiler.unimplemented('visitNode', node: node); | 986 compiler.unimplemented('visitNode', node: node); |
| 987 } | 987 } |
| 988 | 988 |
| 989 DartType visitStringNode(StringNode node) { | 989 DartType visitStringNode(StringNode node) { |
| 990 compiler.unimplemented('visitNode', node: node); | 990 compiler.unimplemented('visitNode', node: node); |
| 991 } | 991 } |
| 992 } | 992 } |
| OLD | NEW |