object dyna
- Source
- Typers.scala
- Alphabetic
- By Inheritance
- dyna
- AnyRef
- Any
- Hide All
- Show All
- Public
- All
Value Members
- def acceptsApplyDynamic(tp: Global.Type): Boolean
-
def
acceptsApplyDynamicWithType(qual: Global.Tree, name: Global.Name): Option[Global.Type]
Returns
Some(t)
ifname
can be selected dynamically onqual
,None
if not.Returns
Some(t)
ifname
can be selected dynamically onqual
,None
if not.t
specifies the type to be passed to the applyDynamic/selectDynamic call (unless it is NoType) NOTE: currently either returns None or Some(NoType) (scala-virtualized extends this to Some(t) for selections on staged Structs) - def isApplyDynamicNamed(fun: Global.Tree): Boolean
- def isDynamicallyUpdatable(tree: Global.Tree): Boolean
-
def
mkInvoke(context: Analyzer.Context, tree: Global.Tree, qual: Global.Tree, name: Global.Name): Option[Global.Tree]
Translate selection that does not typecheck according to the normal rules into a selectDynamic/applyDynamic.
Translate selection that does not typecheck according to the normal rules into a selectDynamic/applyDynamic.
foo.method("blah") ~~> foo.applyDynamic("method")("blah") foo.method(x = "blah") ~~> foo.applyDynamicNamed("method")(("x", "blah")) foo.varia = 10 ~~> foo.updateDynamic("varia")(10) foo.field ~~> foo.selectDynamic("field") foo.arr(10) = 13 ~~> foo.selectDynamic("arr").update(10, 13)
what if we want foo.field == foo.selectDynamic("field") == 1, but
foo.field = 10
==foo.selectDynamic("field").update(10)
== () what would the signature for selectDynamic be? (hint: it needs to depend on whether an update call is coming or not)need to distinguish selectDynamic and applyDynamic somehow: the former must return the selected value, the latter must accept an apply or an update
- could have only selectDynamic and pass it a boolean whether more is to come, so that it can either return the bare value or something that can handle the apply/update HOWEVER that makes it hard to return unrelated values for the two cases --> selectDynamic's return type is now dependent on the boolean flag whether more is to come
- simplest solution: have two method calls
- def typedNamedApply(orig: Global.Tree, fun: Global.Tree, args: List[Global.Tree], mode: Mode, pt: Global.Type): Global.Tree
- def wrapErrors(tree: Global.Tree, typeTree: (Analyzer.Typer) ⇒ Global.Tree): Global.Tree
The Scala compiler and reflection APIs.