Packages

object dyna

Source
Typers.scala
Linear Supertypes
AnyRef, Any
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. dyna
  2. AnyRef
  3. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Value Members

  1. def acceptsApplyDynamic(tp: Global.Type): Boolean
  2. def acceptsApplyDynamicWithType(qual: Global.Tree, name: Global.Name): Option[Global.Type]

    Returns Some(t) if name can be selected dynamically on qual, None if not.

    Returns Some(t) if name can be selected dynamically on qual, 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)

  3. def isApplyDynamicNamed(fun: Global.Tree): Boolean
  4. def isDynamicallyUpdatable(tree: Global.Tree): Boolean
  5. 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
  6. def typedNamedApply(orig: Global.Tree, fun: Global.Tree, args: List[Global.Tree], mode: Mode, pt: Global.Type): Global.Tree
  7. def wrapErrors(tree: Global.Tree, typeTree: (Analyzer.Typer) ⇒ Global.Tree): Global.Tree