diff options
author | odersky <odersky@gmail.com> | 2017-02-01 18:21:58 +1100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-02-01 18:21:58 +1100 |
commit | af7fdb32df34b352bf39f01a26653b169e0d55cf (patch) | |
tree | 4307381bb799db513dd07a0f40aec968ae99e877 /compiler/src/dotty/tools/dotc/typer/Typer.scala | |
parent | bb2e99cdfa9876561df912d26e9870526de3dd5d (diff) | |
parent | 678e8e47b630786df7548c1be5bee744342f826c (diff) | |
download | dotty-af7fdb32df34b352bf39f01a26653b169e0d55cf.tar.gz dotty-af7fdb32df34b352bf39f01a26653b169e0d55cf.tar.bz2 dotty-af7fdb32df34b352bf39f01a26653b169e0d55cf.zip |
Merge pull request #1881 from dotty-staging/add-structural-select
Implement structural type member access
Diffstat (limited to 'compiler/src/dotty/tools/dotc/typer/Typer.scala')
-rw-r--r-- | compiler/src/dotty/tools/dotc/typer/Typer.scala | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/compiler/src/dotty/tools/dotc/typer/Typer.scala b/compiler/src/dotty/tools/dotc/typer/Typer.scala index d05a0aaa7..59df98a93 100644 --- a/compiler/src/dotty/tools/dotc/typer/Typer.scala +++ b/compiler/src/dotty/tools/dotc/typer/Typer.scala @@ -1040,9 +1040,8 @@ class Typer extends Namer with TypeAssigner with Applications with Implicits wit typr.println(s"adding refinement $refinement") checkRefinementNonCyclic(refinement, refineCls, seen) val rsym = refinement.symbol - if (rsym.is(Method) && rsym.allOverriddenSymbols.isEmpty) - ctx.error(i"refinement $rsym without matching type in parent $tpt1", refinement.pos) - } + if (rsym.info.isInstanceOf[PolyType] && rsym.allOverriddenSymbols.isEmpty) + ctx.error(i"polymorphic refinement $rsym without matching type in parent $tpt1 is no longer allowed", refinement.pos) } assignType(cpy.RefinedTypeTree(tree)(tpt1, refinements1), tpt1, refinements1, refineCls) } @@ -2067,7 +2066,8 @@ class Typer extends Namer with TypeAssigner with Applications with Implicits wit adaptInterpolated(tree.appliedToTypeTrees(typeArgs), pt, original)) } case wtp => - pt match { + if (isStructuralTermSelect(tree)) adapt(handleStructural(tree), pt) + else pt match { case pt: FunProto => adaptToArgs(wtp, pt) case pt: PolyProto => |