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 long
static final long
Allocate variable on JVM stack as an optimization.If non-null, field is relative to base.static final long
static final long
static final int
Initialize in<init>
/<clinit>
rather than inrun
/$run$
.static final long
static final int
static final int
This flag bit is set if this can be be accessed from other modules.static final long
static final int
True if this is a field or method in a class definition.static final long
List of ApplyExp where this declaration is the function called.protected long
protected int
Unique id number, to ease print-outs and debugging.static final int
static final int
static final int
static final int
static final int
static final int
Set if this declares a namespace prefix (as in XML namespaces).static final long
static final long
static final int
static final long
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.static final int
static final int
static final long
Applies to a 'rest' parameter if it can match keywords.static final long
static final long
static final int
A reference to a module instance.static final int
static final int
Set if this is just a declaration, not a definition.static final int
static final long
True for a variable inside a pattern, but not the top of the pattern.static final int
static final String
This prefix is used in field names for a declaration that has both EXTERNAL_ACCESS and IS_PRIVATE set.static final int
static final int
True if in the function namespace, for languages that distinguishes them.static final int
static final int
static final long
static final long
See parameterForMethod()static final int
static final long
static final long
static final long
The type of the value of this Declaration.static final int
static final long
Fields 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 TypeMethodDescriptionvoid
addAnnotation
(Expression exp) Add an annotation to the set of our annotations.void
Add a call to the list headed byfirstCall
.final Variable
allocateVariable
(CodeAttr code) final Variable
allocateVariable
(CodeAttr code, boolean autoPopScope) void
Clear the list of callers headed byfirstCall
.void
compileAnnotations
(AttrContainer container, ElementType etype) void
compileStore
(Compilation comp) static Declaration
followAliases
(Declaration decl) short
getAccessFlags
(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 boolean
final boolean
final boolean
final boolean
int
getCode()
final Object
If getValue() is a constant, return the constant value, otherwise null.final ScopeExp
Return the ScopeExp that contains (declares) this Declaration.static Declaration
getDeclaration
(Named proc) static Declaration
getDeclaration
(Object proc, String name) static Declaration
getDeclarationFromStatic
(String cname, String fname) Create a declaration corresponding to a static field.static Declaration
getDeclarationValueFromStatic
(String className, String fieldName, String name) Similar togetDeclarationFromStatic
, but also donoteValue
with the field's value.getField()
final boolean
getFlag
(long flag) Get the "initial value" expression.final String
getName()
int
If non-zero, indicates this names a 'scan' of a sequence.final Object
final Type
getType()
final Expression
final Expression
getValue()
The value of thisDeclaration
, if known.final boolean
boolean
boolean
True if we never need to access this declaration.boolean
inExternalModule
(Compilation comp) final boolean
isAlias()
final boolean
final boolean
boolean
final boolean
isFluid()
True if this is a fluid binding (in a FluidLetExp).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.final boolean
True if the value of the variable is the contents of a Location.final boolean
final boolean
final boolean
final boolean
final boolean
final boolean
isPublic()
final boolean
isSimple()
boolean
isStatic()
final boolean
Is this an implicit 'this' parameter?static final boolean
isUnknown
(Declaration decl) void
load
(AccessExp access, int flags, Compilation comp, Target target) loadFieldLocation
(Declaration owner, Compilation comp) void
makeField
(ClassType frameType, Compilation comp, Expression value) void
makeField
(Compilation comp, Expression value) boolean
void
void
maybeSourceName
(AttrContainer member, String expName) Add SourceName annotation to member, if needed.final boolean
If we need a 'context' supplied from a ReferenceExp or 'this.final boolean
final Declaration
nextDecl()
void
noteValue
(Expression value) void
noteValueConstant
(Object value) void
noteValueFromApply
(ApplyExp app, int index) void
noteValueFromLet
(ScopeExp letter) void
noteValueFromSet
(SetExp setter) void
int
The number of annotations associated with the declaration.final boolean
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 parametersx
andy
.boolean
Set symbol from initializing SetExp.void
printInfo
(gnu.kawa.io.OutPort out) void
printInfo
(StringBuffer sbuf) void
Create a Location object, given that isIndirectBinding().final void
setAlias
(boolean flag) void
setAnnotation
(int i, Expression ann) Replace one of the annotations associated with this declaration.final void
final void
setCanCall
(boolean called) final void
final void
setCanRead
(boolean read) final void
final void
setCanWrite
(boolean written) void
setCode
(int code) void
final void
setFlag
(boolean setting, long flag) final void
setFlag
(long flag) final void
setFluid
(boolean fluid) final void
setIndirectBinding
(boolean indirectBinding) Note that the value of the variable is the contents of a Location.void
setInitValue
(Expression init) final void
final void
setNext
(Declaration next) final void
setPrivate
(boolean isPrivate) final void
setProcedureDecl
(boolean val) void
setScanNesting
(int value) final void
setSimple
(boolean b) final void
final void
final void
final void
setType
(Expression typeExp, Type type) final void
setTypeExp
(Expression typeExp) final void
setValue
(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 parametersx
andy
. 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 donoteValue
with 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 theDeclaration
can be assigned a different value after initialization. Note that this is the semantic value: If theINDIRECT_LOCATION
is set, thengetValue
is the value after de-referencing the resultingLocation
. An exception is ifisAlias()
; in that casegetValue()
is an expression yielding aLocation
which 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
-