Skip to content

Conversation

olhotak
Copy link
Contributor

@olhotak olhotak commented Jun 17, 2021

This is an attempt to implement map for the list in the list-encoding test. Currently this crashes the compiler:

Fatal compiler crash when compiling: tests/pos-special/captures/list-encoding.scala: TermParamRef(op) (of class dotty.tools.dotc.core.Types$TermParamRefImpl) dotty.tools.dotc.typer.CheckCaptures.traverse$$anonfun$3$$anonfun$2(CheckCaptures.scala:126) scala.runtime.function.JProcedure1.apply(JProcedure1.java:15) scala.runtime.function.JProcedure1.apply(JProcedure1.java:10) dotty.tools.dotc.util.SimpleIdentitySet$Set1.foreach(SimpleIdentitySet.scala:69) dotty.tools.dotc.typer.CheckCaptures.dotty$tools$dotc$typer$CheckCaptures$PostRefinerCheck$$$_$traverse$$anonfun$1(CheckCaptures.scala:136) scala.runtime.function.JProcedure1.apply(JProcedure1.java:15) scala.runtime.function.JProcedure1.apply(JProcedure1.java:10) scala.collection.immutable.List.foreach(List.scala:333) dotty.tools.dotc.typer.CheckCaptures$PostRefinerCheck$.traverse(CheckCaptures.scala:136) dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1631) dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1631) dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1525) dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1632) dotty.tools.dotc.typer.CheckCaptures$PostRefinerCheck$.traverse(CheckCaptures.scala:147) dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1631) dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1631) dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1519) dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1632) dotty.tools.dotc.typer.CheckCaptures$PostRefinerCheck$.traverse(CheckCaptures.scala:147) dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1631) dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1631) dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1525) dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1632) dotty.tools.dotc.typer.CheckCaptures$PostRefinerCheck$.traverse(CheckCaptures.scala:147) dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1631) dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1631) dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1594) dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1632) dotty.tools.dotc.typer.CheckCaptures$PostRefinerCheck$.traverse(CheckCaptures.scala:147) dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1631) dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1631) dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.fold$1(Trees.scala:1506) dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.apply(Trees.scala:1508) dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1601) dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1632) dotty.tools.dotc.typer.CheckCaptures$PostRefinerCheck$.traverse(CheckCaptures.scala:147) dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1631) dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1631) dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1598) dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1632) dotty.tools.dotc.typer.CheckCaptures$PostRefinerCheck$.traverse(CheckCaptures.scala:147) dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1631) dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1631) dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.fold$1(Trees.scala:1506) dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.apply(Trees.scala:1508) dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1607) dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1632) dotty.tools.dotc.typer.CheckCaptures$PostRefinerCheck$.traverse(CheckCaptures.scala:147) dotty.tools.dotc.typer.CheckCaptures.postRefinerCheck(CheckCaptures.scala:150) dotty.tools.dotc.typer.RefineTypes.run(RefineTypes.scala:66) dotty.tools.dotc.core.Phases$Phase.runOn$$anonfun$1(Phases.scala:308) 
odersky added 30 commits June 17, 2021 15:56
Use the same direction when re-typing during refinement
We are throwing away the refined trees, so we should keep the old type variables unchanged.
Outer references cannot be re-typed with the usual typedSelect algorithm. Their types have to be preserved. Test case is pos/i8892.scala.
Prefer old instance over extremal bound Nothing or Any when refining
 - that way we avoid an overly long valOrDefDefSig - the method can be reused in RefineTypes
Add refiner tests that exercise the setting
and drop unused hook method
odersky added 3 commits July 5, 2021 17:47
 - Fix bug in copy for dependent function types: parent type needs to be changed as well if refinement has changed. - Refine redundant type checking to eliminate false notices.
Support abbreviated capturing annotations
Make CapturingTypes take sets instead of single references
@anatoliykmetyuk
Copy link
Contributor

What's the status of this PR? Is it still being worked on? Or can we close it? @olhotak @odersky

@odersky
Copy link
Contributor

odersky commented Sep 23, 2021

I think it would be good to rebase on the current add-cc2 branch and try again.

@olhotak
Copy link
Contributor Author

olhotak commented Sep 23, 2021

Replaced by dotty-staging#21

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cc-experiment Intended to be merged with cc-experiment branch on origin

3 participants