summaryrefslogtreecommitdiff
path: root/coreMacros/src/main/scala/chisel3/internal/sourceinfo
diff options
context:
space:
mode:
authorJack Koenig2020-03-22 18:13:58 -0700
committerJack Koenig2020-03-25 19:17:15 -0700
commitfbf5e6f1a0e8bf535d465b748ad554575fe62156 (patch)
tree578858ab6d219ca6daf44cf87b73f75054989097 /coreMacros/src/main/scala/chisel3/internal/sourceinfo
parentb2e004fb615a3c931d910a338b9faa99c1c975d7 (diff)
Rename subprojects to more canonical names
* Rename coreMacros to macros * Rename chiselFrontend to core Also make each subproject publish with "chisel3-" as a prefix
Diffstat (limited to 'coreMacros/src/main/scala/chisel3/internal/sourceinfo')
-rw-r--r--coreMacros/src/main/scala/chisel3/internal/sourceinfo/SourceInfoTransform.scala186
1 files changed, 0 insertions, 186 deletions
diff --git a/coreMacros/src/main/scala/chisel3/internal/sourceinfo/SourceInfoTransform.scala b/coreMacros/src/main/scala/chisel3/internal/sourceinfo/SourceInfoTransform.scala
deleted file mode 100644
index 6d7c3411..00000000
--- a/coreMacros/src/main/scala/chisel3/internal/sourceinfo/SourceInfoTransform.scala
+++ /dev/null
@@ -1,186 +0,0 @@
-// See LICENSE for license details.
-
-// This file transform macro definitions to explicitly add implicit source info to Chisel method
-// calls.
-
-package chisel3.internal.sourceinfo
-
-import scala.language.experimental.macros
-import scala.reflect.macros.blackbox.Context
-import scala.reflect.macros.whitebox
-
-
-/** Transforms a function call so that it can both provide implicit-style source information and
- * have a chained apply call. Without macros, only one is possible, since having a implicit
- * argument in the definition will cause the compiler to interpret a chained apply as an
- * explicit implicit argument and give type errors.
- *
- * Instead of an implicit argument, the public-facing function no longer takes a SourceInfo at all.
- * The macro transforms the public-facing function into a call to an internal function that takes
- * an explicit SourceInfo by inserting an implicitly[SourceInfo] as the explicit argument.
- */
-trait SourceInfoTransformMacro {
- val c: Context
- import c.universe._
- def thisObj: Tree = c.prefix.tree
- def implicitSourceInfo = q"implicitly[_root_.chisel3.internal.sourceinfo.SourceInfo]"
- def implicitCompileOptions = q"implicitly[_root_.chisel3.CompileOptions]"
-}
-
-// Workaround for https://github.com/sbt/sbt/issues/3966
-object UIntTransform
-class UIntTransform(val c: Context) extends SourceInfoTransformMacro {
- import c.universe._
- def bitset(off: c.Tree, dat: c.Tree): c.Tree = {
- q"$thisObj.do_bitSet($off, $dat)($implicitSourceInfo, $implicitCompileOptions)"
- }
-}
-
-// Workaround for https://github.com/sbt/sbt/issues/3966
-object InstTransform
-// Module instantiation transform
-class InstTransform(val c: Context) extends SourceInfoTransformMacro {
- import c.universe._
- def apply[T: c.WeakTypeTag](bc: c.Tree): c.Tree = {
- q"$thisObj.do_apply($bc)($implicitSourceInfo, $implicitCompileOptions)"
- }
-}
-
-// Workaround for https://github.com/sbt/sbt/issues/3966
-object MemTransform
-class MemTransform(val c: Context) extends SourceInfoTransformMacro {
- import c.universe._
- def apply[T: c.WeakTypeTag](size: c.Tree, t: c.Tree): c.Tree = {
- q"$thisObj.do_apply($size, $t)($implicitSourceInfo, $implicitCompileOptions)"
- }
- def apply_ruw[T: c.WeakTypeTag](size: c.Tree, t: c.Tree, ruw: c.Tree): c.Tree = {
- q"$thisObj.do_apply($size, $t, $ruw)($implicitSourceInfo, $implicitCompileOptions)"
- }
-}
-
-// Workaround for https://github.com/sbt/sbt/issues/3966
-object MuxTransform
-class MuxTransform(val c: Context) extends SourceInfoTransformMacro {
- import c.universe._
- def apply[T: c.WeakTypeTag](cond: c.Tree, con: c.Tree, alt: c.Tree): c.Tree = {
- val tpe = weakTypeOf[T]
- q"$thisObj.do_apply[$tpe]($cond, $con, $alt)($implicitSourceInfo, $implicitCompileOptions)"
- }
-}
-
-// Workaround for https://github.com/sbt/sbt/issues/3966
-object VecTransform
-class VecTransform(val c: Context) extends SourceInfoTransformMacro {
- import c.universe._
- def apply_elts(elts: c.Tree): c.Tree = {
- q"$thisObj.do_apply($elts)($implicitSourceInfo, $implicitCompileOptions)"
- }
- def apply_elt0(elt0: c.Tree, elts: c.Tree*): c.Tree = {
- q"$thisObj.do_apply($elt0, ..$elts)($implicitSourceInfo, $implicitCompileOptions)"
- }
- def tabulate(n: c.Tree)(gen: c.Tree): c.Tree = {
- q"$thisObj.do_tabulate($n)($gen)($implicitSourceInfo, $implicitCompileOptions)"
- }
- def fill(n: c.Tree)(gen: c.Tree): c.Tree = {
- q"$thisObj.do_fill($n)($gen)($implicitSourceInfo, $implicitCompileOptions)"
- }
- def contains(x: c.Tree)(ev: c.Tree): c.Tree = {
- q"$thisObj.do_contains($x)($implicitSourceInfo, $ev, $implicitCompileOptions)"
- }
- def reduceTree(redOp: c.Tree, layerOp: c.Tree): c.Tree = {
- q"$thisObj.do_reduceTree($redOp,$layerOp)($implicitSourceInfo, $implicitCompileOptions)"
- }
- def reduceTreeDefault(redOp: c.Tree ): c.Tree = {
- q"$thisObj.do_reduceTree($redOp)($implicitSourceInfo, $implicitCompileOptions)"
- }
-}
-
-/** "Automatic" source information transform / insertion macros, which generate the function name
- * based on the macro invocation (instead of explicitly writing out every transform).
- */
-abstract class AutoSourceTransform extends SourceInfoTransformMacro {
- import c.universe._
- /** Returns the TermName of the transformed function, which is the applied function name with do_
- * prepended.
- */
- def doFuncTerm: TermName = {
- val funcName = c.macroApplication match {
- case q"$_.$funcName[..$_](...$_)" => funcName
- case _ => throw new Exception(s"Chisel Internal Error: Could not resolve function name from macro application: ${showCode(c.macroApplication)}") // scalastyle:ignore line.size.limit
- }
- TermName("do_" + funcName)
- }
-}
-
-// Workaround for https://github.com/sbt/sbt/issues/3966
-object SourceInfoTransform
-class SourceInfoTransform(val c: Context) extends AutoSourceTransform {
- import c.universe._
-
- def noArg(): c.Tree = {
- q"$thisObj.$doFuncTerm($implicitSourceInfo, $implicitCompileOptions)"
- }
-
- def thatArg(that: c.Tree): c.Tree = {
- q"$thisObj.$doFuncTerm($that)($implicitSourceInfo, $implicitCompileOptions)"
- }
-
- def nArg(n: c.Tree): c.Tree = {
- q"$thisObj.$doFuncTerm($n)($implicitSourceInfo, $implicitCompileOptions)"
- }
-
- def pArg(p: c.Tree): c.Tree = {
- q"$thisObj.$doFuncTerm($p)($implicitSourceInfo, $implicitCompileOptions)"
- }
-
- def inArg(in: c.Tree): c.Tree = {
- q"$thisObj.$doFuncTerm($in)($implicitSourceInfo, $implicitCompileOptions)"
- }
-
- def xArg(x: c.Tree): c.Tree = {
- q"$thisObj.$doFuncTerm($x)($implicitSourceInfo, $implicitCompileOptions)"
- }
-
- def xyArg(x: c.Tree, y: c.Tree): c.Tree = {
- q"$thisObj.$doFuncTerm($x, $y)($implicitSourceInfo, $implicitCompileOptions)"
- }
-
- def xEnArg(x: c.Tree, en: c.Tree): c.Tree = {
- q"$thisObj.$doFuncTerm($x, $en)($implicitSourceInfo, $implicitCompileOptions)"
- }
-}
-
-// Workaround for https://github.com/sbt/sbt/issues/3966
-object CompileOptionsTransform
-class CompileOptionsTransform(val c: Context) extends AutoSourceTransform {
- import c.universe._
-
- def thatArg(that: c.Tree): c.Tree = {
- q"$thisObj.$doFuncTerm($that)($implicitCompileOptions)"
- }
-
- def inArg(in: c.Tree): c.Tree = {
- q"$thisObj.$doFuncTerm($in)($implicitCompileOptions)"
- }
-
- def pArg(p: c.Tree): c.Tree = {
- q"$thisObj.$doFuncTerm($p)($implicitCompileOptions)"
- }
-}
-
-// Workaround for https://github.com/sbt/sbt/issues/3966
-object SourceInfoWhiteboxTransform
-/** Special whitebox version of the blackbox SourceInfoTransform, used when fun things need to
- * happen to satisfy the type system while preventing the use of macro overrides.
- */
-class SourceInfoWhiteboxTransform(val c: whitebox.Context) extends AutoSourceTransform {
- import c.universe._
-
- def noArg(): c.Tree = {
- q"$thisObj.$doFuncTerm($implicitSourceInfo, $implicitCompileOptions)"
- }
-
- def thatArg(that: c.Tree): c.Tree = {
- q"$thisObj.$doFuncTerm($that)($implicitSourceInfo, $implicitCompileOptions)"
- }
-}