| OLD | NEW |
| 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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 /// ----------------------------------------------------------------------- | 5 /// ----------------------------------------------------------------------- |
| 6 /// ERROR HANDLING | 6 /// ERROR HANDLING |
| 7 /// ----------------------------------------------------------------------- | 7 /// ----------------------------------------------------------------------- |
| 8 /// | 8 /// |
| 9 /// As a rule of thumb, errors that can be detected statically are handled by | 9 /// As a rule of thumb, errors that can be detected statically are handled by |
| 10 /// the frontend, typically by translating the erroneous code into a 'throw' or | 10 /// the frontend, typically by translating the erroneous code into a 'throw' or |
| (...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 257 /// | 257 /// |
| 258 /// Classes of an external library are loaded at one of the [ClassLevel]s | 258 /// Classes of an external library are loaded at one of the [ClassLevel]s |
| 259 /// other than [ClassLevel.Body]. Members in an external library have no | 259 /// other than [ClassLevel.Body]. Members in an external library have no |
| 260 /// body, but have their typed interface present. | 260 /// body, but have their typed interface present. |
| 261 /// | 261 /// |
| 262 /// If the libary is non-external, then its classes are at [ClassLevel.Body] | 262 /// If the libary is non-external, then its classes are at [ClassLevel.Body] |
| 263 /// and all members are loaded. | 263 /// and all members are loaded. |
| 264 bool isExternal; | 264 bool isExternal; |
| 265 | 265 |
| 266 String name; | 266 String name; |
| 267 final List<Expression> annotations; |
| 267 final List<LibraryDependency> dependencies; | 268 final List<LibraryDependency> dependencies; |
| 268 final List<Typedef> typedefs; | 269 final List<Typedef> typedefs; |
| 269 final List<Class> classes; | 270 final List<Class> classes; |
| 270 final List<Procedure> procedures; | 271 final List<Procedure> procedures; |
| 271 final List<Field> fields; | 272 final List<Field> fields; |
| 272 | 273 |
| 273 Library(this.importUri, | 274 Library(this.importUri, |
| 274 {this.name, | 275 {this.name, |
| 275 this.isExternal: false, | 276 this.isExternal: false, |
| 277 List<Expression> annotations, |
| 276 List<LibraryDependency> dependencies, | 278 List<LibraryDependency> dependencies, |
| 277 List<Typedef> typedefs, | 279 List<Typedef> typedefs, |
| 278 List<Class> classes, | 280 List<Class> classes, |
| 279 List<Procedure> procedures, | 281 List<Procedure> procedures, |
| 280 List<Field> fields, | 282 List<Field> fields, |
| 281 this.fileUri, | 283 this.fileUri, |
| 282 Reference reference}) | 284 Reference reference}) |
| 283 : this.dependencies = dependencies ?? <LibraryDependency>[], | 285 : this.annotations = annotations ?? <Expression>[], |
| 286 this.dependencies = dependencies ?? <LibraryDependency>[], |
| 284 this.typedefs = typedefs ?? <Typedef>[], | 287 this.typedefs = typedefs ?? <Typedef>[], |
| 285 this.classes = classes ?? <Class>[], | 288 this.classes = classes ?? <Class>[], |
| 286 this.procedures = procedures ?? <Procedure>[], | 289 this.procedures = procedures ?? <Procedure>[], |
| 287 this.fields = fields ?? <Field>[], | 290 this.fields = fields ?? <Field>[], |
| 288 super(reference) { | 291 super(reference) { |
| 289 setParents(this.dependencies, this); | 292 setParents(this.dependencies, this); |
| 290 setParents(this.typedefs, this); | 293 setParents(this.typedefs, this); |
| 291 setParents(this.classes, this); | 294 setParents(this.classes, this); |
| 292 setParents(this.procedures, this); | 295 setParents(this.procedures, this); |
| 293 setParents(this.fields, this); | 296 setParents(this.fields, this); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 314 void addClass(Class class_) { | 317 void addClass(Class class_) { |
| 315 class_.parent = this; | 318 class_.parent = this; |
| 316 classes.add(class_); | 319 classes.add(class_); |
| 317 } | 320 } |
| 318 | 321 |
| 319 void addTypedef(Typedef typedef_) { | 322 void addTypedef(Typedef typedef_) { |
| 320 typedef_.parent = this; | 323 typedef_.parent = this; |
| 321 typedefs.add(typedef_); | 324 typedefs.add(typedef_); |
| 322 } | 325 } |
| 323 | 326 |
| 327 void addAnnotation(Expression node) { |
| 328 node.parent = this; |
| 329 annotations.add(node); |
| 330 } |
| 331 |
| 324 void computeCanonicalNames() { | 332 void computeCanonicalNames() { |
| 325 assert(canonicalName != null); | 333 assert(canonicalName != null); |
| 326 for (var typedef_ in typedefs) { | 334 for (var typedef_ in typedefs) { |
| 327 canonicalName.getChildFromTypedef(typedef_).bindTo(typedef_.reference); | 335 canonicalName.getChildFromTypedef(typedef_).bindTo(typedef_.reference); |
| 328 } | 336 } |
| 329 for (var field in fields) { | 337 for (var field in fields) { |
| 330 canonicalName.getChildFromMember(field).bindTo(field.reference); | 338 canonicalName.getChildFromMember(field).bindTo(field.reference); |
| 331 } | 339 } |
| 332 for (var member in procedures) { | 340 for (var member in procedures) { |
| 333 canonicalName.getChildFromMember(member).bindTo(member.reference); | 341 canonicalName.getChildFromMember(member).bindTo(member.reference); |
| (...skipping 4262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4596 /// typedef has not been assigned a canonical name yet. | 4604 /// typedef has not been assigned a canonical name yet. |
| 4597 /// | 4605 /// |
| 4598 /// Returns `null` if the typedef is `null`. | 4606 /// Returns `null` if the typedef is `null`. |
| 4599 CanonicalName getCanonicalNameOfTypedef(Typedef typedef_) { | 4607 CanonicalName getCanonicalNameOfTypedef(Typedef typedef_) { |
| 4600 if (typedef_ == null) return null; | 4608 if (typedef_ == null) return null; |
| 4601 if (typedef_.canonicalName == null) { | 4609 if (typedef_.canonicalName == null) { |
| 4602 throw '$typedef_ has no canonical name'; | 4610 throw '$typedef_ has no canonical name'; |
| 4603 } | 4611 } |
| 4604 return typedef_.canonicalName; | 4612 return typedef_.canonicalName; |
| 4605 } | 4613 } |
| OLD | NEW |