Migrating to Dotty

Minor tweaks

  • sym.linkedClassOfClass => sym.linkedClass
  • definitions => ctx.definitions

Member Lookup

tpe.member(name) and tpe.decl(name) now return a Denotation, not a Symbol. If no definition is found they return NoDenotation (instead of NoSymbol).

Symbol Properties

Most sym.isProperty methods don't exist in dotc, test for flags instead. See dotc vs scalac: Trees, Symbols, Types & Denotations

Logging, Error Reporting, Failures

There are various kinds of logging:

  • Errors, warnings, etc: ctx.inform, ctx.warning, ctx.error, ...
  • Log messages displayed under -Ylog:phase: log(msg) in scalac => ctx.log(msg) in dotc
  • Debug-Log messages displayed under -Ydebug -Ylog:<phase>: debuglog(msg) in scalac => ctx.debuglog(msg) in dotc
  • Assertions: assert(invariant)
  • Fatal errors: abort(msg) in scalac => throw new dotty.tools.dotc.FatalError(msg) in dotc

During development / debugging

Instead of Predef.println, use dotc.config.Printers.somePrinter.println Printers.scala. Printers can be easily added, enabled and disabled without changing command line arguments.

val default: Printer = new Printer // new Printer => print
val core:    Printer = noPrinter   // noPrinter   => shut up