Package gnu.expr
Class Declaration
java.lang.Object
gnu.text.SourceLocator.Simple
gnu.expr.Declaration
- All Implemented Interfaces:
SourceLocator,SourceLocator,Locator
The static information associated with a local variable binding.
-
Nested Class Summary
Nested ClassesNested classes/interfaces inherited from interface gnu.text.SourceLocator
SourceLocator.Simple -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final longstatic final longAllocate variable on JVM stack as an optimization.If non-null, field is relative to base.static final longstatic final longstatic final intInitialize in<init>/<clinit>rather than inrun/$run$.static final longstatic final intstatic final intThis flag bit is set if this can be be accessed from other modules.static final longstatic final intTrue if this is a field or method in a class definition.static final longList of ApplyExp where this declaration is the function called.protected longprotected intUnique id number, to ease print-outs and debugging.static final intstatic final intstatic final intstatic final intstatic final intstatic final intSet if this declares a namespace prefix (as in XML namespaces).static final longstatic final longstatic final intstatic final longIs 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.static final intstatic final intstatic final longApplies to a 'rest' parameter if it can match keywords.static final longstatic final longstatic final intA reference to a module instance.static final intstatic final intSet if this is just a declaration, not a definition.static final intstatic final longTrue for a variable inside a pattern, but not the top of the pattern.static final intstatic final StringThis prefix is used in field names for a declaration that has both EXTERNAL_ACCESS and IS_PRIVATE set.static final intstatic final intTrue if in the function namespace, for languages that distinguishes them.static final intstatic final intstatic final longstatic final longSee parameterForMethod()static final intstatic final longstatic final longstatic final longThe type of the value of this Declaration.static final intstatic final longFields inherited from class gnu.text.SourceLocator.Simple
filename, position -
Constructor Summary
ConstructorsConstructorDescriptionDeclaration(Variable var) Declaration(Object name) Declaration(Object name, Field field) Declaration(Object name, Type type) -
Method Summary
Modifier and TypeMethodDescriptionvoidaddAnnotation(Expression exp) Add an annotation to the set of our annotations.voidAdd a call to the list headed byfirstCall.final VariableallocateVariable(CodeAttr code) final VariableallocateVariable(CodeAttr code, boolean autoPopScope) voidClear the list of callers headed byfirstCall.voidcompileAnnotations(AttrContainer container, ElementType etype) voidcompileStore(Compilation comp) static DeclarationfollowAliases(Declaration decl) shortgetAccessFlags(short defaultFlags) getAnnotation(int i) Indexed get of one of the annotations associated with this declaration.<T extends Annotation>
TgetAnnotation(Class<T> clas) getAnnotation(String className) final booleanfinal booleanfinal booleanfinal booleanintgetCode()final ObjectIf getValue() is a constant, return the constant value, otherwise null.final ScopeExpReturn the ScopeExp that contains (declares) this Declaration.static DeclarationgetDeclaration(Named proc) static DeclarationgetDeclaration(Object proc, String name) static DeclarationgetDeclarationFromStatic(String cname, String fname) Create a declaration corresponding to a static field.static DeclarationgetDeclarationValueFromStatic(String className, String fieldName, String name) Similar togetDeclarationFromStatic, but also donoteValuewith the field's value.getField()final booleangetFlag(long flag) Get the "initial value" expression.final StringgetName()intIf non-zero, indicates this names a 'scan' of a sequence.final Objectfinal TypegetType()final Expressionfinal ExpressiongetValue()The value of thisDeclaration, if known.final booleanbooleanbooleanTrue if we never need to access this declaration.booleaninExternalModule(Compilation comp) final booleanisAlias()final booleanfinal booleanbooleanfinal booleanisFluid()True if this is a fluid binding (in a FluidLetExp).booleanisGuard()Does this encapsulate a boolean guard expression? In that case this is an unnamed pseudo-parameter, that matches no actual arguments but wheregetInitValue()is the expression.final booleanTrue if the value of the variable is the contents of a Location.final booleanfinal booleanfinal booleanfinal booleanfinal booleanfinal booleanisPublic()final booleanisSimple()booleanisStatic()final booleanIs this an implicit 'this' parameter?static final booleanisUnknown(Declaration decl) voidload(AccessExp access, int flags, Compilation comp, Target target) loadFieldLocation(Declaration owner, Compilation comp) voidmakeField(ClassType frameType, Compilation comp, Expression value) voidmakeField(Compilation comp, Expression value) booleanvoidvoidmaybeSourceName(AttrContainer member, String expName) Add SourceName annotation to member, if needed.final booleanIf we need a 'context' supplied from a ReferenceExp or 'this.final booleanfinal DeclarationnextDecl()voidnoteValue(Expression value) voidnoteValueConstant(Object value) voidnoteValueFromApply(ApplyExp app, int index) voidnoteValueFromLet(ScopeExp letter) voidnoteValueFromSet(SetExp setter) voidintThe number of annotations associated with the declaration.final booleanIs 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 parametersxandy.booleanSet symbol from initializing SetExp.voidprintInfo(gnu.kawa.io.OutPort out) voidprintInfo(StringBuffer sbuf) voidCreate a Location object, given that isIndirectBinding().final voidsetAlias(boolean flag) voidsetAnnotation(int i, Expression ann) Replace one of the annotations associated with this declaration.final voidfinal voidsetCanCall(boolean called) final voidfinal voidsetCanRead(boolean read) final voidfinal voidsetCanWrite(boolean written) voidsetCode(int code) voidfinal voidsetFlag(boolean setting, long flag) final voidsetFlag(long flag) final voidsetFluid(boolean fluid) final voidsetIndirectBinding(boolean indirectBinding) Note that the value of the variable is the contents of a Location.voidsetInitValue(Expression init) final voidfinal voidsetNext(Declaration next) final voidsetPrivate(boolean isPrivate) final voidsetProcedureDecl(boolean val) voidsetScanNesting(int value) final voidsetSimple(boolean b) final voidfinal voidfinal voidfinal voidsetType(Expression typeExp, Type type) final voidsetTypeExp(Expression typeExp) final voidsetValue(Expression value) Set the value associated with this Declaration.toString()Methods inherited from class gnu.text.SourceLocator.Simple
getColumnNumber, getEndColumn, getEndLine, getFileName, getLineNumber, getPublicId, getStartColumn, getStartLine, getSystemId, isRepl, isStableSourceLocation, setFile, setLine, setLine, setLine, setLocation
-
Field Details
-
id
protected int idUnique id number, to ease print-outs and debugging. If negative, a code to specify a builtin function. -
context
-
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. -
typeExp
-
base
If non-null, field is relative to base. If IS_FLUID, base points to IS_UNKNOWN Symbol. -
getterMethod
-
setterMethod
-
PRIVATE_PREFIX
This prefix is used in field names for a declaration that has both EXTERNAL_ACCESS and IS_PRIVATE set.- See Also:
-
PROCEDURE
public static final int PROCEDURETrue if in the function namespace, for languages that distinguishes them. I.e. a function definition or macro definition.- See Also:
-
IS_ALIAS
public static final int IS_ALIAS- See Also:
-
NOT_DEFINING
public static final int NOT_DEFININGSet if this is just a declaration, not a definition.- See Also:
-
EXPORT_SPECIFIED
public static final int EXPORT_SPECIFIED- See Also:
-
STATIC_SPECIFIED
public static final int STATIC_SPECIFIED- See Also:
-
NONSTATIC_SPECIFIED
public static final int NONSTATIC_SPECIFIED- See Also:
-
TYPE_SPECIFIED
public static final int TYPE_SPECIFIED- See Also:
-
IS_CONSTANT
public static final int IS_CONSTANT- See Also:
-
IS_SYNTAX
public static final int IS_SYNTAX- See Also:
-
IS_UNKNOWN
public static final int IS_UNKNOWN- See Also:
-
IS_IMPORTED
public static final int IS_IMPORTED- See Also:
-
IS_CAPTURED
public static final int IS_CAPTURED- See Also:
-
IS_SINGLE_VALUE
public static final int IS_SINGLE_VALUE- See Also:
-
EXTERNAL_ACCESS
public static final int EXTERNAL_ACCESSThis 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:
-
FIELD_OR_METHOD
public static final int FIELD_OR_METHODTrue if this is a field or method in a class definition.- See Also:
-
IS_NAMESPACE_PREFIX
public static final int IS_NAMESPACE_PREFIXSet if this declares a namespace prefix (as in XML namespaces).- See Also:
-
PRIVATE_ACCESS
public static final int PRIVATE_ACCESS- See Also:
-
PRIVATE_SPECIFIED
public static final int PRIVATE_SPECIFIED- See Also:
-
PROTECTED_ACCESS
public static final int PROTECTED_ACCESS- See Also:
-
PUBLIC_ACCESS
public static final int PUBLIC_ACCESS- See Also:
-
PACKAGE_ACCESS
public static final int PACKAGE_ACCESS- See Also:
-
IS_DYNAMIC
public static final int IS_DYNAMIC- See Also:
-
EARLY_INIT
public static final int EARLY_INITInitialize in<init>/<clinit>rather than inrun/$run$.- See Also:
-
MODULE_REFERENCE
public static final int MODULE_REFERENCEA reference to a module instance.- See Also:
-
VOLATILE_ACCESS
public static final long VOLATILE_ACCESS- See Also:
-
TRANSIENT_ACCESS
public static final long TRANSIENT_ACCESS- See Also:
-
ENUM_ACCESS
public static final long ENUM_ACCESS- See Also:
-
FINAL_ACCESS
public static final long FINAL_ACCESS- See Also:
-
ABSTRACT_ACCESS
public static final long ABSTRACT_ACCESS- See Also:
-
SYNCHRONIZED_ACCESS
public static final long SYNCHRONIZED_ACCESS- See Also:
-
STRICTFP_ACCESS
public static final long STRICTFP_ACCESS- See Also:
-
CLASS_ACCESS_FLAGS
public static final long CLASS_ACCESS_FLAGS- See Also:
-
FIELD_ACCESS_FLAGS
public static final long FIELD_ACCESS_FLAGS- See Also:
-
METHOD_ACCESS_FLAGS
public static final long METHOD_ACCESS_FLAGS- See Also:
-
MAYBE_UNINITIALIZED_ACCESS
public static final long MAYBE_UNINITIALIZED_ACCESS- See Also:
-
ALLOCATE_ON_STACK
public static final long ALLOCATE_ON_STACKAllocate 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:
-
PATTERN_NESTED
public static final long PATTERN_NESTEDTrue 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:
-
SKIP_FOR_METHOD_PARAMETER
public static final long SKIP_FOR_METHOD_PARAMETERSee parameterForMethod()- See Also:
-
IS_REST_PARAMETER
public static final long IS_REST_PARAMETER- See Also:
-
IS_PARAMETER
public static final long IS_PARAMETER- See Also:
-
IS_SUPPLIED_PARAMETER
public static final long IS_SUPPLIED_PARAMETERIs 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:
-
KEYWORDS_OK
public static final long KEYWORDS_OKApplies to a 'rest' parameter if it can match keywords.- See Also:
-
DONT_COPY
public static final long DONT_COPY- See Also:
-
SCAN_OWNER
public static final long SCAN_OWNER- See Also:
-
flags
protected long flags -
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 Details
-
Declaration
-
Declaration
-
Declaration
-
Declaration
-
-
Method Details
-
setCode
public void setCode(int code) -
getCode
public int getCode() -
getTypeExp
-
getType
-
getTypeExpRaw
-
setType
-
setTypeExp
-
setType
-
getName
-
setName
-
getSymbol
-
setSymbol
-
nextDecl
-
setNext
-
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
Return the ScopeExp that contains (declares) this Declaration. -
loadFieldLocation
-
load
-
compileStore
-
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 parametersxandy. 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:
-
setIndirectBinding
public final void setIndirectBinding(boolean indirectBinding) Note that the value of the variable is the contents of a Location.- See Also:
-
maybeIndirectBinding
-
inExternalModule
-
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 wheregetInitValue()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
-
addCaller
Add a call to the list headed byfirstCall. -
clearCallList
public void clearCallList()Clear the list of callers headed byfirstCall. -
numAnnotations
public int numAnnotations()The number of annotations associated with the declaration. -
getAnnotation
Indexed get of one of the annotations associated with this declaration. -
getAnnotation
-
getAnnotation
-
setAnnotation
Replace one of the annotations associated with this declaration. -
addAnnotation
Add an annotation to the set of our annotations.- Parameters:
exp- A constant-valued expression that evaluates to an Annotation.
-
compileAnnotations
-
pushIndirectBinding
Create a Location object, given that isIndirectBinding(). Assume the initial value is already pushed on the stack; leaves initialized Location object on stack. -
allocateVariable
-
allocateVariable
-
getImplementationType
-
printInfo
public void printInfo(gnu.kawa.io.OutPort out) -
printInfo
-
toString
-
followAliases
-
makeField
-
makeField
-
maybeSourceName
Add SourceName annotation to member, if needed. -
getDeclarationFromStatic
Create a declaration corresponding to a static field.- Parameters:
cname- name of class containing fieldfname- name of static field
-
getDeclarationValueFromStatic
public static Declaration getDeclarationValueFromStatic(String className, String fieldName, String name) Similar togetDeclarationFromStatic, but also donoteValuewith the field's value. -
getDeclaration
-
getDeclaration
-
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
-
hasUnknownValue
public boolean hasUnknownValue() -
getValue
The value of thisDeclaration, if known. Usually the expression used to initialize theDeclaration, or null if theDeclarationcan be assigned a different value after initialization. Note that this is the semantic value: If theINDIRECT_LOCATIONis set, thengetValueis the value after de-referencing the resultingLocation. An exception is ifisAlias(); in that casegetValue()is an expression yielding aLocationwhich needs to be de-referenced to get thisDeclaration's actual value. -
getValueRaw
-
setValue
Set the value associated with this Declaration. Most code should use noteValue instead. -
getConstantValue
If getValue() is a constant, return the constant value, otherwise null. -
hasConstantValue
public final boolean hasConstantValue() -
getLambdaValue
-
noteValue
-
noteValueConstant
-
noteValueUnknown
public void noteValueUnknown() -
noteValueFromSet
-
noteValueFromLet
-
noteValueFromApply
-
patchSymbolFromSet
public boolean patchSymbolFromSet()Set symbol from initializing SetExp. Used for an export-only alias, for handling export-with-rename. -
getField
-
setField
-