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

Unified Diff: pkg/kernel/lib/verifier.dart

Issue 2614143003: Restore verifier flags after failed verification. (Closed)
Patch Set: Add comment. Created 3 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/kernel/lib/verifier.dart
diff --git a/pkg/kernel/lib/verifier.dart b/pkg/kernel/lib/verifier.dart
index bed541706342a9719e87cc246e47823734604c06..b2ceb9cf7f0a9cef5248ad3a01b7cfdc0980c41e 100644
--- a/pkg/kernel/lib/verifier.dart
+++ b/pkg/kernel/lib/verifier.dart
@@ -19,6 +19,10 @@ class VerifyingVisitor extends RecursiveVisitor {
final List<VariableDeclaration> variableStack = <VariableDeclaration>[];
bool classTypeParametersAreInScope = false;
+ /// If true, relax certain checks for *outline* mode. For example, don't
+ /// attempt to validate constructor initializers.
+ bool isOutline = false;
+
Member currentMember;
Class currentClass;
TreeNode currentParent;
@@ -113,23 +117,27 @@ class VerifyingVisitor extends RecursiveVisitor {
}
visitProgram(Program program) {
- for (var library in program.libraries) {
- for (var class_ in library.classes) {
- if (!classes.add(class_)) {
- throw 'Class $class_ declared more than once';
+ try {
+ for (var library in program.libraries) {
+ for (var class_ in library.classes) {
+ if (!classes.add(class_)) {
+ throw 'Class $class_ declared more than once.';
+ }
+ }
+ library.members.forEach(declareMember);
+ for (var class_ in library.classes) {
+ class_.members.forEach(declareMember);
}
}
- library.members.forEach(declareMember);
- for (var class_ in library.classes) {
- class_.members.forEach(declareMember);
- }
- }
- visitChildren(program);
- for (var library in program.libraries) {
- library.members.forEach(undeclareMember);
- for (var class_ in library.classes) {
- class_.members.forEach(undeclareMember);
+ visitChildren(program);
+ } finally {
+ for (var library in program.libraries) {
+ library.members.forEach(undeclareMember);
+ for (var class_ in library.classes) {
+ class_.members.forEach(undeclareMember);
+ }
}
+ variableStack.forEach(undeclareVariable);
}
}
@@ -164,6 +172,9 @@ class VerifyingVisitor extends RecursiveVisitor {
int stackHeight = enterLocalScope();
visitChildren(node.function);
visitList(node.initializers, this);
+ if (!isOutline) {
+ checkInitializers(node);
+ }
exitLocalScope(stackHeight);
classTypeParametersAreInScope = false;
visitList(node.annotations, this);
@@ -448,3 +459,7 @@ class CheckParentPointers extends Visitor {
parent = oldParent;
}
}
+
+void checkInitializers(Constructor constructor) {
+ // TODO(ahe): I'll add more here in other CLs.
+}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698