Skip to content

Commit 2c3378d

Browse files
committed
Allow toplevel definitions in syntax and parsing
1 parent 2d16d9f commit 2c3378d

File tree

2 files changed

+7
-8
lines changed

2 files changed

+7
-8
lines changed

compiler/src/dotty/tools/dotc/parsing/Parsers.scala

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1994,7 +1994,7 @@ object Parsers {
19941994
/** ClsParamClauses ::= {ClsParamClause} [[nl] `(' [FunArgMods] ClsParams `)']
19951995
* ClsParamClause ::= [nl] `(' [`erased'] [ClsParams] ')'
19961996
* ClsParams ::= ClsParam {`' ClsParam}
1997-
* ClsParam ::= {Annotation} [{Modifier} (`val' | `var') | `inline'] Param
1997+
* ClsParam ::= {Annotation} [{ParamModifier} (`val' | `var') | `inline'] Param
19981998
* DefParamClauses ::= {DefParamClause} [[nl] `(' [FunArgMods] DefParams `)']
19991999
* DefParamClause ::= [nl] `(' [`erased'] [DefParams] ')'
20002000
* DefParams ::= DefParam {`,' DefParam}
@@ -2594,7 +2594,7 @@ object Parsers {
25942594
}
25952595

25962596
/** TopStatSeq ::= TopStat {semi TopStat}
2597-
* TopStat ::= Annotations Modifiers TmplDef
2597+
* TopStat ::= Annotations Modifiers Def
25982598
* | Packaging
25992599
* | package object objectDef
26002600
* | Import
@@ -2614,15 +2614,13 @@ object Parsers {
26142614
}
26152615
else if (in.token == IMPORT)
26162616
stats ++= importClause()
2617-
else if (in.token == AT || isTemplateIntro || isModifier)
2618-
stats +++= tmplDef(in.offset, defAnnotsMods(modifierTokens))
2617+
else if (in.token == AT || isDefIntro(modifierTokens))
2618+
stats +++= defOrDcl(in.offset, defAnnotsMods(modifierTokens))
26192619
else if (!isStatSep) {
26202620
if (in.token == CASE)
26212621
syntaxErrorOrIncomplete(OnlyCaseClassOrCaseObjectAllowed())
26222622
else
26232623
syntaxErrorOrIncomplete(ExpectedClassOrObjectDef())
2624-
if (mustStartStat) // do parse all definitions even if they are probably local (i.e. a "}" has been forgotten)
2625-
defOrDcl(in.offset, defAnnotsMods(modifierTokens))
26262624
}
26272625
acceptStatSepUnlessAtEnd()
26282626
}

docs/docs/internals/syntax.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -390,10 +390,11 @@ EnumStat ::= TemplateStat
390390
EnumCase ::= ‘case’ (id ClassConstr [‘extends’ ConstrApps]] | ids)
391391
392392
TopStatSeq ::= TopStat {semi TopStat}
393-
TopStat ::= {Annotation [nl]} {Modifier} TmplDef
394-
| Import
393+
TopStat ::= Import
394+
| {Annotation [nl]} {Modifier} Def
395395
| Packaging
396396
| PackageObject
397+
|
397398
Packaging ::= ‘package’ QualId [nl] ‘{’ TopStatSeq ‘}’ Package(qid, stats)
398399
PackageObject ::= ‘package’ ‘object’ ObjectDef object with package in mods.
399400

0 commit comments

Comments
 (0)