| Index: pkg/kernel/lib/verifier.dart
|
| diff --git a/pkg/kernel/lib/verifier.dart b/pkg/kernel/lib/verifier.dart
|
| index c923a8d7d8ae63fa57ba91655b87a83eda949e60..be3697eae8860748844e2c3a99e2ac42272e78ba 100644
|
| --- a/pkg/kernel/lib/verifier.dart
|
| +++ b/pkg/kernel/lib/verifier.dart
|
| @@ -57,8 +57,12 @@ class VerifyingVisitor extends RecursiveVisitor {
|
|
|
| bool inCatchBlock = false;
|
|
|
| + Library currentLibrary;
|
| +
|
| Member currentMember;
|
| +
|
| Class currentClass;
|
| +
|
| TreeNode currentParent;
|
|
|
| TreeNode get context => currentMember ?? currentClass;
|
| @@ -187,6 +191,12 @@ class VerifyingVisitor extends RecursiveVisitor {
|
| }
|
| }
|
|
|
| + void visitLibrary(Library node) {
|
| + currentLibrary = node;
|
| + super.visitLibrary(node);
|
| + currentLibrary = null;
|
| + }
|
| +
|
| void checkTypedef(Typedef node) {
|
| var state = typedefState[node];
|
| if (state == TypedefState.Done) return;
|
| @@ -216,6 +226,15 @@ class VerifyingVisitor extends RecursiveVisitor {
|
| visitField(Field node) {
|
| currentMember = node;
|
| var oldParent = enterParent(node);
|
| + bool isTopLevel = node.parent == currentLibrary;
|
| + if (isTopLevel && !node.isStatic) {
|
| + problem(node, "The top-level field '${node.name.name}' should be static",
|
| + context: node);
|
| + }
|
| + if (node.isConst && !node.isStatic) {
|
| + problem(node, "The const field '${node.name.name}' should be static",
|
| + context: node);
|
| + }
|
| classTypeParametersAreInScope = !node.isStatic;
|
| node.initializer?.accept(this);
|
| node.type.accept(this);
|
|
|