diff --git a/compiler/src/dotty/tools/dotc/parsing/Parsers.scala b/compiler/src/dotty/tools/dotc/parsing/Parsers.scala index b89b01d6b427..88b3908d325a 100644 --- a/compiler/src/dotty/tools/dotc/parsing/Parsers.scala +++ b/compiler/src/dotty/tools/dotc/parsing/Parsers.scala @@ -3582,17 +3582,19 @@ object Parsers { def extensionDef(start: Offset, mods: Modifiers): ModuleDef = in.nextToken() val name = if isIdent && !isIdent(nme.on) then ident() else EmptyTermName - if !isIdent(nme.on) then syntaxErrorOrIncomplete("`on` expected") - if isIdent(nme.on) then in.nextToken() - val tparams = typeParamClauseOpt(ParamOwner.Def) - val extParams = paramClause(0, prefix = true) - val givenParamss = paramClauses(givenOnly = true) - possibleTemplateStart() - if !in.isNestedStart then syntaxError("Extension without extension methods") - val templ = templateBodyOpt(makeConstructor(tparams, extParams :: givenParamss), Nil, Nil) - templ.body.foreach(checkExtensionMethod(tparams, _)) - val edef = ModuleDef(name, templ) - finalizeDef(edef, addFlag(mods, Given), start) + in.endMarkerScope(if name.isEmpty then nme.extension else name) { + if !isIdent(nme.on) then syntaxErrorOrIncomplete("`on` expected") + if isIdent(nme.on) then in.nextToken() + val tparams = typeParamClauseOpt(ParamOwner.Def) + val extParams = paramClause(0, prefix = true) + val givenParamss = paramClauses(givenOnly = true) + possibleTemplateStart() + if !in.isNestedStart then syntaxError("Extension without extension methods") + val templ = templateBodyOpt(makeConstructor(tparams, extParams :: givenParamss), Nil, Nil) + templ.body.foreach(checkExtensionMethod(tparams, _)) + val edef = ModuleDef(name, templ) + finalizeDef(edef, addFlag(mods, Given), start) + } /* -------- TEMPLATES ------------------------------------------- */ diff --git a/tests/pos/i8241.scala b/tests/pos/i8241.scala new file mode 100644 index 000000000000..e6d1f863e7ad --- /dev/null +++ b/tests/pos/i8241.scala @@ -0,0 +1,7 @@ +extension NameOps on (name: String): + def isWildcard = ??? +end NameOps + +extension on (name: String): + def f = ??? +end extension