Skip to content

Fix #2024: TypeApply can be a final apply of a recursive method. #2025

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Apr 5, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 15 additions & 7 deletions compiler/src/dotty/tools/backend/jvm/GenBCode.scala
Original file line number Diff line number Diff line change
@@ -1,19 +1,18 @@
package dotty.tools.backend.jvm

import dotty.tools.dotc.CompilationUnit
import dotty.tools.dotc.ast.Trees.{ValDef, PackageDef}
import dotty.tools.dotc.ast.Trees.{PackageDef, ValDef}
import dotty.tools.dotc.ast.tpd
import dotty.tools.dotc.core.Phases.Phase
import dotty.tools.dotc.core.Names.TypeName

import scala.collection.mutable
import scala.tools.asm.{CustomAttr, ClassVisitor, MethodVisitor, FieldVisitor}
import scala.tools.asm.{ClassVisitor, CustomAttr, FieldVisitor, MethodVisitor}
import scala.tools.nsc.Settings
import scala.tools.nsc.backend.jvm._
import dotty.tools.dotc
import dotty.tools.dotc.backend.jvm.DottyPrimitives
import dotty.tools.dotc.transform.Erasure

import dotty.tools.dotc.interfaces
import java.util.Optional

Expand All @@ -27,14 +26,15 @@ import Symbols._
import Denotations._
import Phases._
import java.lang.AssertionError
import java.io.{ File => JFile }
import java.io.{FileOutputStream, File => JFile}

import scala.tools.asm
import scala.tools.asm.tree._
import dotty.tools.dotc.util.{Positions, DotClass}
import dotty.tools.dotc.util.{DotClass, Positions}
import tpd._
import StdNames._
import scala.reflect.io.{Directory, PlainDirectory, AbstractFile}

import scala.reflect.io.{AbstractFile, Directory, PlainDirectory}
import scala.tools.nsc.backend.jvm.opt.LocalOpt

class GenBCode extends Phase {
Expand Down Expand Up @@ -205,7 +205,15 @@ class GenBCodePipeline(val entryPoints: List[Symbol], val int: DottyBackendInter
if (claszSymbol.isClass) // @DarkDimius is this test needed here?
for (binary <- ctx.compilationUnit.pickled.get(claszSymbol.asClass)) {
val dataAttr = new CustomAttr(nme.TASTYATTR.toString, binary)
(if (mirrorC ne null) mirrorC else plainC).visitAttribute(dataAttr)
val store = if (mirrorC ne null) mirrorC else plainC
store.visitAttribute(dataAttr)
if (ctx.settings.emitTasty.value) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This does not seem to be relevant to this PR as -XemitTasty is never enabled.

val outTastyFile = getFileForClassfile(outF, store.name, ".tasty").file
val fos = new FileOutputStream(outTastyFile, false)
fos.write(binary)
fos.close()

}
}

// -------------- bean info class, if needed --------------
Expand Down
1 change: 1 addition & 0 deletions compiler/src/dotty/tools/dotc/config/ScalaSettings.scala
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ class ScalaSettings extends Settings.SettingGroup {
val debugOwners = BooleanSetting("-Ydebug-owners", "Print all owners of definitions (requires -Yprint-syms)")
val termConflict = ChoiceSetting("-Yresolve-term-conflict", "strategy", "Resolve term conflicts", List("package", "object", "error"), "error")
val log = PhasesSetting("-Ylog", "Log operations during")
val emitTasty = BooleanSetting("-YemitTasty", "Generate tasty in separate *.tasty file.")
val Ylogcp = BooleanSetting("-Ylog-classpath", "Output information about what classpath is being applied.")
val YnoImports = BooleanSetting("-Yno-imports", "Compile without importing scala.*, java.lang.*, or Predef.")
val YnoPredef = BooleanSetting("-Yno-predef", "Compile without importing Predef.")
Expand Down
4 changes: 4 additions & 0 deletions compiler/src/dotty/tools/dotc/transform/TailRec.scala
Original file line number Diff line number Diff line change
Expand Up @@ -325,6 +325,10 @@ class TailRec extends MiniPhaseTransform with DenotTransformer with FullParamete
else
rewriteApply(tree, meth)

case TypeApply(fun, targs) =>
val meth = fun.symbol
rewriteApply(tree, meth)

case tree@Block(stats, expr) =>
tpd.cpy.Block(tree)(
noTailTransforms(stats),
Expand Down
4 changes: 4 additions & 0 deletions tests/pos/tailcall/i2024.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
object Test {
// def main(args: Array[String]): Unit = { }
def assume[T]: Any = assume
}
2 changes: 1 addition & 1 deletion tests/pos/tailcall/return.scala
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
object Test {
object Return {

def foo(x: Int): Int = return 3

Expand Down