trait NamesDefaults extends AnyRef
- Self Type
- Analyzer
- Source
- NamesDefaults.scala
- Version
1.0
- Alphabetic
- By Inheritance
- NamesDefaults
- AnyRef
- Any
- by any2stringadd
- by StringFormat
- by Ensuring
- by ArrowAssoc
- Hide All
- Show All
- Public
- All
Type Members
- class CaseApplyDefaultGetters extends AnyRef
- class ConstructorDefaultsAttachment extends AnyRef
- class DefaultsOfLocalMethodAttachment extends AnyRef
- case class NamedApplyInfo(qual: Option[Global.Tree], targs: List[Global.Tree], vargss: List[List[Global.Tree]], blockTyper: Analyzer.Typer) extends Product with Serializable
Value Members
-
def
addDefaults(givenArgs: List[Global.Tree], qual: Option[Global.Tree], targs: List[Global.Tree], previousArgss: List[List[Global.Tree]], params: List[Global.Symbol], pos: Position, context: Analyzer.Context): (List[Global.Tree], List[Global.Symbol])
Extend the argument list
givenArgs
with default arguments.Extend the argument list
givenArgs
with default arguments. Defaults are added as named arguments calling the corresponding default getter.Example: given def foo(x: Int = 2, y: String = "def") foo(y = "lt") the argument list (y = "lt") is transformed to (y = "lt", x = foo$default$1())
-
def
allArgsArePositional(a: Array[Int]): Boolean
returns
true
if every element is equal to its index -
def
defaultGetter(param: Global.Symbol, context: Analyzer.Context): Global.Symbol
For a parameter with default argument, find the method symbol of the default getter.
- def isNamedArg(arg: Global.Tree): Boolean
- def isVariableInScope(context: Analyzer.Context, name: Global.Name): Boolean
- def makeNamedTypes(syms: List[Global.Symbol]): collection.immutable.List[Global.NamedType]
-
def
missingParams[T](args: List[T], params: List[Global.Symbol], argName: (T) ⇒ Option[Global.Name]): (List[Global.Symbol], Boolean)
Returns the parameter symbols of an invocation expression that are not defined by the list of arguments.
Returns the parameter symbols of an invocation expression that are not defined by the list of arguments.
- args
The list of arguments
- params
The list of parameter symbols of the invoked method
- argName
A function that extracts the name of an argument expression, if it is a named argument.
-
def
removeNames(typer: Analyzer.Typer)(args: List[Global.Tree], params: List[Global.Symbol]): (List[Global.Tree], Array[Int])
Removes name assignments from args.
Removes name assignments from args. Additionally, returns an array mapping argument indices from call-site-order to definition-site-order.
Verifies that names are not specified twice, and positional args don't appear after named ones.
-
def
reorderArgs[T](args: List[T], pos: (Int) ⇒ Int)(implicit arg0: ClassTag[T]): List[T]
- pos
maps indices from old to new
-
def
transformNamedApplication(typer: Analyzer.Typer, mode: Mode, pt: Global.Type)(tree: Global.Tree, argPos: (Int) ⇒ Int): Global.Tree
Transform a function application into a Block, and assigns typer.context .namedApplyBlockInfo to the new block as side-effect.
Transform a function application into a Block, and assigns typer.context .namedApplyBlockInfo to the new block as side-effect. If tree has the form Apply(fun, args) first the function "fun" (which might be an application itself!) is transformed into a block of the form { val qual$1 = qualifier_of_fun val x$1 = arg_1_of_fun ... val x$n = arg_n_of_fun qual$1.fun[targs](x$1, ...)...(..., x$n) } then for each argument in args, a value is created and entered into the block. finally the application expression of the block is updated. { val qual$1 = .. ... val x$n = ... > val qual$n+1 = arg(1) > ... > val qual$n+m = arg(m) > qual$1.fun[targs](x$1, ...)...(..., x$n)(x$n+1, ..., x$n+m) }
- typer
the typer calling this method; this method calls typer.doTypedApply
- mode
the mode to use for calling typer.doTypedApply
- pt
the expected type for calling typer.doTypedApply
- returns
the transformed application (a Block) together with the NamedApplyInfo. if isNamedApplyBlock(tree), returns the existing context.namedApplyBlockInfo
The Scala compiler and reflection APIs.