// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

/// @assertion A script is a library whose exported namespace includes a
/// top-level function main().
///
/// libraryDefinition:
///   scriptTag? libraryName? importOrImport* partDirective* topLevelDefinition*
/// ;
/// topLevelDefinition:
///   classDefinition |
///   enumType |
///   typeAlias |
///   external? functionSignature ‘;’ |
///   external? getterSignature ‘;’ |
///   external? setterSignature ‘;’ |
///   functionSignature functionBody |
///   returnType? get identifier functionBody |
///   returnType? set identifier formalParameterList functionBody |
///   (final | const) type? staticFinalDeclarationList ‘;’ |
///   variableDeclaration ‘;’
/// ;
/// @description Checks that it is a compile-time error when a comma character
/// is used in place of a top level definition in a script.
/// @author msyabro


class C {}
,
//^
// [analyzer] unspecified
// [cfe] unspecified
class D {}

main() {
  D();
}
