Chromium Code Reviews| Index: pkg/kernel/lib/verifier.dart |
| diff --git a/pkg/kernel/lib/verifier.dart b/pkg/kernel/lib/verifier.dart |
| index bed541706342a9719e87cc246e47823734604c06..b53565dbf74c36d048d89ee3ea8838b96849f6a4 100644 |
| --- a/pkg/kernel/lib/verifier.dart |
| +++ b/pkg/kernel/lib/verifier.dart |
| @@ -18,6 +18,7 @@ class VerifyingVisitor extends RecursiveVisitor { |
| final Set<TypeParameter> typeParameters = new Set<TypeParameter>(); |
| final List<VariableDeclaration> variableStack = <VariableDeclaration>[]; |
| bool classTypeParametersAreInScope = false; |
| + bool isOutline = false; |
|
asgerf
2017/01/06 15:56:26
Please add a short comment.
ahe
2017/01/11 11:39:28
Done.
|
| Member currentMember; |
| Class currentClass; |
| @@ -113,23 +114,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 +169,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 +456,7 @@ class CheckParentPointers extends Visitor { |
| parent = oldParent; |
| } |
| } |
| + |
| +void checkInitializers(Constructor constructor) { |
| + // TODO(ahe): I'll add more here in other CLs. |
| +} |