Package gnu.expr

Class Declaration

    • Field Detail

      • id

        protected int id
        Unique id number, to ease print-outs and debugging. If negative, a code to specify a builtin function.
      • type

        public Type type
        The type of the value of this Declaration. It is null if the type is un-specified and not yet inferred. Will get set implicitly by getType, to avoid inconsistencies.
      • base

        public Declaration base
        If non-null, field is relative to base. If IS_FLUID, base points to IS_UNKNOWN Symbol.
      • getterMethod

        public Method getterMethod
      • setterMethod

        public Method setterMethod
      • PRIVATE_PREFIX

        public static final String PRIVATE_PREFIX
        This prefix is used in field names for a declaration that has both EXTERNAL_ACCESS and IS_PRIVATE set.
        See Also:
        Constant Field Values
      • PROCEDURE

        public static final int PROCEDURE
        True if in the function namespace, for languages that distinguishes them. I.e. a function definition or macro definition.
        See Also:
        Constant Field Values
      • NOT_DEFINING

        public static final int NOT_DEFINING
        Set if this is just a declaration, not a definition.
        See Also:
        Constant Field Values
      • EXTERNAL_ACCESS

        public static final int EXTERNAL_ACCESS
        This flag bit is set if this can be be accessed from other modules. Ignored unless PRIVATE. Used when an exported macro references a non-exported name.
        See Also:
        Constant Field Values
      • FIELD_OR_METHOD

        public static final int FIELD_OR_METHOD
        True if this is a field or method in a class definition.
        See Also:
        Constant Field Values
      • IS_NAMESPACE_PREFIX

        public static final int IS_NAMESPACE_PREFIX
        Set if this declares a namespace prefix (as in XML namespaces).
        See Also:
        Constant Field Values
      • EARLY_INIT

        public static final int EARLY_INIT
        Initialize in <init>/<clinit> rather than in run/$run$.
        See Also:
        Constant Field Values
      • MODULE_REFERENCE

        public static final int MODULE_REFERENCE
        A reference to a module instance.
        See Also:
        Constant Field Values
      • MAYBE_UNINITIALIZED_ACCESS

        public static final long MAYBE_UNINITIALIZED_ACCESS
        See Also:
        Constant Field Values
      • ALLOCATE_ON_STACK

        public static final long ALLOCATE_ON_STACK
        Allocate variable on JVM stack as an optimization. This means load is implemented as a dup instruction. (This is no faster on decent JVMs, but the bytecode is more compact.) Note this may cause an InternalError if this is loaded when the JVM stack has grown since the variable was initialized.
        See Also:
        Constant Field Values
      • PATTERN_NESTED

        public static final long PATTERN_NESTED
        True for a variable inside a pattern, but not the top of the pattern. E.g. for a pattern [a [b c]] there is a main declaration for the incoming value - which does not have PATTERN_NESTED set. There are three declarations a, b, and c - which do have PATTERN_NESTED set. In addition there may be helper variables which are anonymous (i.e. getSymbol() returns null), like the match for the sequence [b c]; these also have PATTERN_NESTED set.
        See Also:
        Constant Field Values
      • SKIP_FOR_METHOD_PARAMETER

        public static final long SKIP_FOR_METHOD_PARAMETER
        See parameterForMethod()
        See Also:
        Constant Field Values
      • IS_SUPPLIED_PARAMETER

        public static final long IS_SUPPLIED_PARAMETER
        Is this a supplied-parameter variable? If IS_SUPPLIED_PARAMETER is true and IS_PARAMETER is false then this is a boolean variable which reports if the previous parameter was provided by the argument list, rather than defaulted. If IS_SUPPLIED_PARAMETER is true and IS_PARAMETER is true then this is an optional or keyword parameter that has corresponding supplied-parameter later in the parameter list.
        See Also:
        Constant Field Values
      • KEYWORDS_OK

        public static final long KEYWORDS_OK
        Applies to a 'rest' parameter if it can match keywords.
        See Also:
        Constant Field Values
      • flags

        protected long flags
      • firstCall

        public ApplyExp firstCall
        List of ApplyExp where this declaration is the function called. The applications are chained using their nextCall fields. This is list is built twice: First in PushApply (for use during InlineCalls), then the list is clearest, then rebuilt in FindTailCalls. This is because InlineCalls may inline and re-arrange the call graph. The chain is not built the second time if STATIC_SPECIFIED.
    • Constructor Detail

      • Declaration

        public Declaration​(Object name,
                           Type type)
      • Declaration

        public Declaration​(Variable var)
      • Declaration

        public Declaration​(Object name)
      • Declaration

        public Declaration​(Object name,
                           Field field)
    • Method Detail

      • setCode

        public void setCode​(int code)
      • getCode

        public int getCode()
      • getTypeExp

        public final Expression getTypeExp()
      • getType

        public final Type getType()
      • getTypeExpRaw

        public Expression getTypeExpRaw()
      • setType

        public final void setType​(Type type)
      • setTypeExp

        public final void setTypeExp​(Expression typeExp)
      • setType

        public final void setType​(Expression typeExp,
                                  Type type)
      • getName

        public final String getName()
      • setName

        public final void setName​(Object symbol)
      • getSymbol

        public final Object getSymbol()
      • setSymbol

        public final void setSymbol​(Object symbol)
      • setNext

        public final void setNext​(Declaration next)
      • getVariable

        public Variable getVariable()
      • getScanNesting

        public int getScanNesting()
        If non-zero, indicates this names a 'scan' of a sequence. The value property is a sequence; the declaration names "each" of the elements. This field is the amount of nesting within scan ('...') contexts.
      • setScanNesting

        public void setScanNesting​(int value)
      • isSimple

        public final boolean isSimple()
      • setSimple

        public final void setSimple​(boolean b)
      • setSyntax

        public final void setSyntax()
      • getContext

        public final ScopeExp getContext()
        Return the ScopeExp that contains (declares) this Declaration.
      • compileStore

        public void compileStore​(Compilation comp)
      • isCompiletimeConstant

        public boolean isCompiletimeConstant()
      • needsExternalAccess

        public final boolean needsExternalAccess()
      • needsContext

        public final boolean needsContext()
        If we need a 'context' supplied from a ReferenceExp or 'this.
      • getFlag

        public final boolean getFlag​(long flag)
      • setFlag

        public final void setFlag​(boolean setting,
                                  long flag)
      • setFlag

        public final void setFlag​(long flag)
      • isPublic

        public final boolean isPublic()
      • isPrivate

        public final boolean isPrivate()
      • isModuleLocal

        public final boolean isModuleLocal()
      • setPrivate

        public final void setPrivate​(boolean isPrivate)
      • getAccessFlags

        public short getAccessFlags​(short defaultFlags)
      • isAlias

        public final boolean isAlias()
      • setAlias

        public final void setAlias​(boolean flag)
      • isFluid

        public final boolean isFluid()
        True if this is a fluid binding (in a FluidLetExp). Also true if this binding is the one re-bound by a FluidLetExp.
      • setFluid

        public final void setFluid​(boolean fluid)
      • isProcedureDecl

        public final boolean isProcedureDecl()
      • setProcedureDecl

        public final void setProcedureDecl​(boolean val)
      • isClassMethod

        public final boolean isClassMethod()
      • isClassField

        public final boolean isClassField()
      • isNamespaceDecl

        public final boolean isNamespaceDecl()
      • parameterForMethod

        public final boolean parameterForMethod()
        Is this a parameter for the generated method? For example if a lambda's parameter is the pattern [x y] then there is an anonymous parameter p0 that is the incoming 2-element sequence plus named parameters x and y. The later two are parameters for the generated method, but the anonymous p0 is not.
      • isIndirectBinding

        public final boolean isIndirectBinding()
        True if the value of the variable is the contents of a Location.
        See Also:
        INDIRECT_BINDING
      • setIndirectBinding

        public final void setIndirectBinding​(boolean indirectBinding)
        Note that the value of the variable is the contents of a Location.
        See Also:
        INDIRECT_BINDING
      • maybeIndirectBinding

        public void maybeIndirectBinding​(Compilation comp)
      • inExternalModule

        public boolean inExternalModule​(Compilation comp)
      • isGuard

        public boolean isGuard()
        Does this encapsulate a boolean guard expression? In that case this is an unnamed pseudo-parameter, that matches no actual arguments but where getInitValue() is the expression.
      • getCanRead

        public final boolean getCanRead()
      • setCanRead

        public final void setCanRead​(boolean read)
      • setCanRead

        public final void setCanRead()
      • getCanReadOrCall

        public final boolean getCanReadOrCall()
      • getCanCall

        public final boolean getCanCall()
      • setCanCall

        public final void setCanCall​(boolean called)
      • setCanCall

        public final void setCanCall()
      • getCanWrite

        public final boolean getCanWrite()
      • setCanWrite

        public final void setCanWrite​(boolean written)
      • setCanWrite

        public final void setCanWrite()
      • isThisParameter

        public final boolean isThisParameter()
        Is this an implicit 'this' parameter?
      • mayBeAccessedUninitialized

        public boolean mayBeAccessedUninitialized()
      • ignorable

        public boolean ignorable()
        True if we never need to access this declaration.
      • isStatic

        public boolean isStatic()
      • isLexical

        public final boolean isLexical()
      • isUnknown

        public static final boolean isUnknown​(Declaration decl)
      • addCaller

        public void addCaller​(ApplyExp exp)
        Add a call to the list headed by firstCall.
      • clearCallList

        public void clearCallList()
        Clear the list of callers headed by firstCall.
      • numAnnotations

        public int numAnnotations()
        The number of annotations associated with the declaration.
      • getAnnotation

        public Expression getAnnotation​(int i)
        Indexed get of one of the annotations associated with this declaration.
      • getAnnotation

        public <T extends Annotation> T getAnnotation​(Class<T> clas)
      • setAnnotation

        public void setAnnotation​(int i,
                                  Expression ann)
        Replace one of the annotations associated with this declaration.
      • addAnnotation

        public void addAnnotation​(Expression exp)
        Add an annotation to the set of our annotations.
        Parameters:
        exp - A constant-valued expression that evaluates to an Annotation.
      • pushIndirectBinding

        public void pushIndirectBinding​(Compilation comp)
        Create a Location object, given that isIndirectBinding(). Assume the initial value is already pushed on the stack; leaves initialized Location object on stack.
      • allocateVariable

        public final Variable allocateVariable​(CodeAttr code,
                                               boolean autoPopScope)
      • getImplementationType

        public Type getImplementationType()
      • printInfo

        public void printInfo​(gnu.kawa.io.OutPort out)
      • maybeSourceName

        public void maybeSourceName​(AttrContainer member,
                                    String expName)
        Add SourceName annotation to member, if needed.
      • getDeclarationFromStatic

        public static Declaration getDeclarationFromStatic​(String cname,
                                                           String fname)
        Create a declaration corresponding to a static field.
        Parameters:
        cname - name of class containing field
        fname - name of static field
      • getDeclarationValueFromStatic

        public static Declaration getDeclarationValueFromStatic​(String className,
                                                                String fieldName,
                                                                String name)
        Similar to getDeclarationFromStatic, but also do noteValue with the field's value.
      • getInitValue

        public Expression getInitValue()
        Get the "initial value" expression. This is used for the initializing value in a LetExp, a parameter's default value, or for pattern-matching.
      • setInitValue

        public void setInitValue​(Expression init)
      • hasUnknownValue

        public boolean hasUnknownValue()
      • getValue

        public final Expression getValue()
        The value of this Declaration, if known. Usually the expression used to initialize the Declaration, or null if the Declaration can be assigned a different value after initialization. Note that this is the semantic value: If the INDIRECT_LOCATION is set, then getValue is the value after de-referencing the resulting Location. An exception is if isAlias(); in that case getValue() is an expression yielding a Location which needs to be de-referenced to get this Declaration's actual value.
      • setValue

        public final void setValue​(Expression value)
        Set the value associated with this Declaration. Most code should use noteValue instead.
      • getConstantValue

        public final Object getConstantValue()
        If getValue() is a constant, return the constant value, otherwise null.
      • hasConstantValue

        public final boolean hasConstantValue()
      • getLambdaValue

        public LambdaExp getLambdaValue()
      • noteValue

        public void noteValue​(Expression value)
      • noteValueConstant

        public void noteValueConstant​(Object value)
      • noteValueUnknown

        public void noteValueUnknown()
      • noteValueFromSet

        public void noteValueFromSet​(SetExp setter)
      • noteValueFromLet

        public void noteValueFromLet​(ScopeExp letter)
      • noteValueFromApply

        public void noteValueFromApply​(ApplyExp app,
                                       int index)
      • patchSymbolFromSet

        public boolean patchSymbolFromSet()
        Set symbol from initializing SetExp. Used for an export-only alias, for handling export-with-rename.
      • getField

        public Field getField()
      • setField

        public void setField​(Field field)