Class ExpressionSymbol

java.lang.Object
org.ek9lang.compiler.symbols.Symbol
org.ek9lang.compiler.symbols.ExpressionSymbol
All Implemented Interfaces:
Serializable, ISymbol, ITokenReference

public class ExpressionSymbol extends Symbol
While we don't add these in the scoped structures when compiling. We do use these to augment the parse tree for the appropriate context. We do this so that we can work out what type of result will be returned from an expression. See methods like isExactSameType and isAssignableTo for type checking in the Symbol class. The idea is to augment the parse tree with these expression symbols so that once we've been through sufficient passes of the tree we have sufficient information to add in any promotions/coercions and also check the type of parameters on operations are compatible. We can then add in explicit IR type conversions if needed. This information will also be used in the semantic analysis phase.
See Also:
  • Constructor Details

    • ExpressionSymbol

      public ExpressionSymbol(ISymbol symbol)
      Create a new expression based around an existing symbol.
    • ExpressionSymbol

      public ExpressionSymbol(String name)
  • Method Details

    • clone

      public ExpressionSymbol clone(IScope withParentAsAppropriate)
      Description copied from interface: ISymbol
      Clone the symbol and re-parent if this symbol like a method should have a parent. Other symbols like VariableSymbols are un-parented
      Specified by:
      clone in interface ISymbol
      Overrides:
      clone in class Symbol
    • cloneIntoExpressionSymbol

      protected ExpressionSymbol cloneIntoExpressionSymbol(ExpressionSymbol newCopy)
    • getFriendlyName

      public String getFriendlyName()
      Description copied from interface: ISymbol
      Provide the name an end user would need to see on the screen. Normally this is just 'getName' but in the case of Templates We use a very nasty internal naming for List of SomeClass - which will probably be something like _List_hashed_version_of_ComeClass and the end user needs to see 'List of SomeClass' for it to be meaningful.
      Specified by:
      getFriendlyName in interface ISymbol
      Overrides:
      getFriendlyName in class Symbol
      Returns:
      a user presentable of the symbol name.
    • isDeclaredAsConstant

      public boolean isDeclaredAsConstant()
      Description copied from interface: ISymbol
      Only use on symbols, to see if they are directly defined as a constant.
    • setDeclaredAsConstant

      public void setDeclaredAsConstant(boolean declaredAsConstant)
    • isMutable

      public boolean isMutable()
      Description copied from interface: ISymbol
      Even constants can be mutable until set. then they change to being none mutable. Likewise in 'pure' scopes a variable can be mutable until it is first set then none mutable.
      Specified by:
      isMutable in interface ISymbol
      Overrides:
      isMutable in class Symbol
      Returns:
      If this symbol is mutable or not.
    • isConstant

      public boolean isConstant()
    • setNotMutable

      public void setNotMutable()
      Specified by:
      setNotMutable in interface ISymbol
      Overrides:
      setNotMutable in class Symbol
    • isPromotionRequired

      public boolean isPromotionRequired()
    • setPromotionRequired

      public void setPromotionRequired(boolean promotionRequired)
    • isUseStringOperator

      public boolean isUseStringOperator()
    • setUseStringOperator

      public void setUseStringOperator(boolean useStringOperator)
    • setSourceToken

      public void setSourceToken(IToken sourceToken)
      Specified by:
      setSourceToken in interface ITokenReference
      Overrides:
      setSourceToken in class Symbol
    • equals

      public boolean equals(Object o)
      Overrides:
      equals in class Symbol
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Symbol