Package gnu.expr

Class Expression

    • Field Detail

      • applyMethodExpression

        public static final MethodHandle applyMethodExpression
      • noExpressions

        public static final Expression[] noExpressions
      • type

        protected Type type
      • flags

        protected int flags
    • Constructor Detail

      • Expression

        public Expression()
    • Method Detail

      • mustCompile

        protected abstract boolean mustCompile()
      • numArgs

        public int numArgs()
        Description copied from class: Procedure
        Return minArgs()|(maxArgs<<12). We use a single virtual function to reduce the number of methods in the system, as well as the number of virtual method table entries. We shift by 12 so the number can normally be represented using a sipush instruction, without requiring a constant pool entry.
        Overrides:
        numArgs in class Procedure
      • apply

        public void apply​(CallContext ctx)
                   throws Throwable
        Evaluate the expression. This is named apply rather than eval so it is compatible with the full-tail-call calling convention, and we can stash an Expression in CallContext's proc field. FIXME - are we making use of this?
        Throws:
        Throwable
      • print

        public final void print​(Consumer out)
        Specified by:
        print in interface gnu.kawa.format.Printable
      • print

        public abstract void print​(gnu.kawa.io.OutPort ps)
      • printLineColumn

        public void printLineColumn​(gnu.kawa.io.OutPort out)
        Print line and column number if specified. This is a helper routine intended for use by print(OutPort).
      • compileWithPosition

        public final void compileWithPosition​(Compilation comp,
                                              Target target)
        Same as compile, but emit line number beforehard.
      • compileWithPosition

        public final void compileWithPosition​(Compilation comp,
                                              Target target,
                                              Expression position)
        Same as 2-argument compileWithPosition, but use some other Expression's line number.
      • compile

        public final void compile​(Compilation comp,
                                  Declaration lhs)
        Compile an expression with checking suitable for a known Declaration. Leaves the result on the stack (i.e. does not assign to the lhs). It does coerce the value to a suitable type for the lhs, and throw a hopefully-informative WrongType exception on failure.
      • deepCopy

        public static Expression deepCopy​(Expression exp,
                                          IdentityHashTable mapper)
        Make a deep copy of this expression, if possible.
        Parameters:
        mapper - used to lookup parts (expressions, declarations) that have been translated in the parent. Needed for copied Declarations and BlockExps.
        Returns:
        a copy, or null if we can't copy.
      • visit

        protected <R,​D> R visit​(ExpVisitor<R,​D> visitor,
                                      D d)
      • visitChildren

        protected <R,​D> void visitChildren​(ExpVisitor<R,​D> visitor,
                                                 D d)
      • validateApply

        public Expression validateApply​(ApplyExp exp,
                                        InlineCalls visitor,
                                        Type required,
                                        Declaration decl)
        Apply inlining transformations on a given ApplyExp. Assumes the ApplyExp's function is this expression, or can be optimized to this expression.
        Parameters:
        exp - an application whose function expression can be simplified to this expression.
        visitor - the context for the current inlining pass
        decl - if non-null, a Declaration bound to this expression.
        Returns:
        an Expression equivalent to the passed-in exp.
      • setLocation

        public final void setLocation​(SourceLocator location)
        Copies the current location.
      • setFile

        public final void setFile​(String filename)
      • setLine

        public final void setLine​(int startLine,
                                  int startColumn,
                                  int endLine,
                                  int endColumn)
      • setLine

        public final void setLine​(int lineno,
                                  int colno)
      • setLine

        public final void setLine​(int lineno)
      • setLine

        public void setLine​(Compilation comp)
        Set line number from current position in Compilation.
      • getStartLine

        public final int getStartLine()
        Description copied from interface: SourceLocator
        Line number (one-origin) of start of range; unknown/unspecified is -1.
        Specified by:
        getStartLine in interface SourceLocator
      • getStartColumn

        public final int getStartColumn()
        Description copied from interface: SourceLocator
        Column (one-origin) of start of range; unknown/unspecified is -1.
        Specified by:
        getStartColumn in interface SourceLocator
      • getEndLine

        public final int getEndLine()
        Description copied from interface: SourceLocator
        Line number (one-origin) of end of range; unknown/unspecified is -1.
        Specified by:
        getEndLine in interface SourceLocator
      • getEndColumn

        public final int getEndColumn()
        Description copied from interface: SourceLocator
        Column (one-origin) of end of range; unknown/unspecified is -1.
        Specified by:
        getEndColumn in interface SourceLocator
      • isStableSourceLocation

        public boolean isStableSourceLocation()
        Description copied from interface: SourceLocator
        True if position is unlikely to change. True for an expression but not an input file.
        Specified by:
        isStableSourceLocation in interface SourceLocator
      • getType

        public final Type getType()
        Return the Type used to represent the values of this Expression.
      • calculateType

        protected Type calculateType()
      • getTypeRaw

        public final Type getTypeRaw()
      • setType

        public void setType​(Type type)
      • neverReturns

        public boolean neverReturns()
        True if the expression provably never returns. Currently, this is very limited, not handling infinite recursion (tail- or otherwise), but better analysis is planned.
      • checkLiteralKeyword

        public Keyword checkLiteralKeyword()
        Is this a keyword argument? In the future this will return non-null only for explicit literal non-quoted Keywords.
      • isSingleValue

        public boolean isSingleValue()
      • valueIfConstant

        public Object valueIfConstant()
        Return value if it is constant, or null if non-constant or unknown.
      • setFlag

        public void setFlag​(boolean setting,
                            int flag)
      • setFlag

        public void setFlag​(int flag)
      • getFlags

        public int getFlags()
      • getFlag

        public boolean getFlag​(int flag)
      • side_effects

        public boolean side_effects()
        True if evaluating may have side-effects.