blob: 4b6b0a8c4cf44085f8abcc104627bf031bd59880 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
// See LICENSE for license details.
package chisel3
/** Provides ScalaDoc information for "hidden" `do_*` methods
*
* Mix this into classes/objects that have `do_*` methods to get access to the shared `SourceInfoTransformMacro`
* ScalaDoc group and the lengthy `groupdesc` below.
*
* @groupdesc SourceInfoTransformMacro
*
* <p>
* '''These internal methods are not part of the public-facing API!'''
* <br>
* <br>
*
* The equivalent public-facing methods do not have the `do_` prefix or have the same name. Use and look at the
* documentation for those. If you want left shift, use `<<`, not `do_<<`. If you want conversion to a
* [[scala.collection.Seq Seq]] of [[Bool]]s look at the `asBools` above, not the one below. Users can safely ignore
* every method in this group! <br> <br>
*
* 🐉🐉🐉 '''Here be dragons...''' 🐉🐉🐉
* <br>
* <br>
*
* These `do_X` methods are used to enable both implicit passing of SourceInfo and [[chisel3.core.CompileOptions]]
* while also supporting chained apply methods. In effect all "normal" methods that you, as a user, will use in your
* designs, are converted to their "hidden", `do_*`, via macro transformations. Without using macros here, only one
* of the above wanted behaviors is allowed (implicit passing and chained applies)---the compiler interprets a
* chained apply as an explicit 'implicit' argument and will throw type errors. <br> <br>
*
* The "normal", public-facing methods then take no SourceInfo. However, a macro transforms this public-facing method
* into a call to an internal, hidden `do_*` that takes an explicit SourceInfo by inserting an
* `implicitly[SourceInfo]` as the explicit argument. </p>
*
* @groupprio SourceInfoTransformMacro 1001
*/
trait SourceInfoDoc
|