Class FunctionCall

java.lang.Object
nz.org.riskscape.rl.ast.FunctionCall
All Implemented Interfaces:
AST, Expression

public final class FunctionCall extends Object
  • Constructor Details

  • Method Details

    • appendSource

      protected void appendSource(StringBuilder appendTo)

      Implementers extend this to append their source to the given string builder. Done via string builder to encourage a more efficient implementation than is possible with concatenating multiple toString calls that typically contruct a string builder anyway.

    • keywordArgumentsOffset

      public int keywordArgumentsOffset()
    • hasKeywordArguments

      public boolean hasKeywordArguments()
    • indexOfArgNamed

      public int indexOfArgNamed(String toFind)
      Returns:
      argIndex of argument with name toFind, or -1 if not found
    • accept

      public <T, R> R accept(ExpressionVisitor<T,R> visitor, T data)
    • getPositionalArguments

      public List<FunctionCall.Argument> getPositionalArguments()

      Builds a list of all the arguments that were given before the first keyword argument appears

      Note that the parser is currently allowing (I think) positional elements to occur after keywords, which will break this code. We should probably stop this as I'm 99% sure we never want positional args to be interleaved with keyword args

    • isLiteral

      public boolean isLiteral()
      Description copied from interface: Expression

      Tests whether this expression is a literal expression - a literal expression is a constant expression that is unaffected by the scope in which it was realized/evaluated and contains no function-defined behaviour. Therefore a literal expression is one that contains no property access (unless the receiver is a literal) and no function calls.

      A literal expression will always realize to being a constant (e.g. RealizedExpression.isConstant() will return true), however there are constant expressions that are not literal.

      One edge case to be aware of is a limitation of the AST in determining literal expressions in contrived cases like this one - {foo: 'bar', baz: qux}.foo. The struct is not literal, but the property being accessed is. But because the AST is relatively 'dumb', the expression itself is not literal. It can, however, be realized as a constant - realization is 'smarter' and can pick out the that the property being accessed is constant.

    • equals

      public boolean equals(Object o)
    • canEqual

      protected boolean canEqual(Object other)
    • hashCode

      public int hashCode()
    • getIdentifier

      public Token getIdentifier()
    • getArguments

      public List<FunctionCall.Argument> getArguments()
    • getBoundary

      public Optional<Pair<Token,Token>> getBoundary()
      Returns:
      a pair of tokens that represent the start and end of this expression, to be used when giving users information about where errors have occurred. If the expression has been rebuilt then the boundary may be empty or it may be from the original AST. Intended for use in problems to trace errors back to their source.
    • appendSource

      protected static void appendSource(AST ast, StringBuilder appendTo)

      Helper method for appending the source of another ast element to a string builder, efficiently if possible.

    • toString

      public final String toString()

      Returns a simplified view of the ast in a source-like fashion, but with a lot of details left out for conciseness

      Overrides:
      toString in class Object
    • appendString

      protected void appendString(StringBuilder appendTo)

      Append a simplified string representation to the builder. Default implementation uses appendSource. Subclasses can override to provide a more concise representation.

    • toSource

      public final String toSource()
      Specified by:
      toSource in interface AST
      Returns:
      a normalized version of the AST that can be parsed to be exactly the same AST as this