stable? (object -- isStable)
Inputs
object: Current stack object whose stability is tested.
Outputs
This predicate follows the referenced target for known non-NIL Ref objects. It is the exact opposite of isDirty. Compile-time knownness and unknownness do not by themselves determine the result.
Behavior
- A fully known or forgotten-contents In-place object reports
TRUE. - A known non-
NILRef object reports the current stability of its referenced target. This follows target stability, not target knownness. - Known
NILRef objects and unknown Ref objects reportFALSE. - Text objects report
TRUEonly when they are known and non-NIL. Codeobjects are tested by the currentCodeobject itself, not by callability. User-visible creation paths such ascodeRefand block assignment toCodestill reportFALSE.- Meta objects report
TRUE.
Example
{} 0 {} [
value: 7;
unknownValue: 0 dynamic;
unknownText: 0 ("") dynamic @; # an unknown Text
codeLocal: {} () {} codeRef;
[] !codeLocal # a non-NIL Code
"-- current stability versus forgotten-contents stability --" printCompilerMessage
7 known? printStack _:;
7 stable? printStack _:;
7 unknownStable? printStack _:;
7 isDynamic printStack _:;
unknownValue known? printStack _:;
unknownValue stable? printStack _:;
unknownValue unknownStable? printStack _:;
unknownValue isDynamic printStack _:;
"-- references --" printCompilerMessage
@value stable? printStack _:;
@value unknownStable? printStack _:;
@value isDynamic printStack _:;
@unknownValue stable? printStack _:;
@unknownValue unknownStable? printStack _:;
@unknownValue isDynamic printStack _:;
0nx value addressToReference stable? printStack _:; # a NIL Ref
0nx value addressToReference unknownStable? printStack _:;
0nx value addressToReference isDynamic printStack _:;
"-- text, code, meta --" printCompilerMessage
"hi" stable? printStack _:;
"hi" unknownStable? printStack _:;
"hi" isDynamic printStack _:;
unknownText stable? printStack _:;
unknownText unknownStable? printStack _:;
unknownText isDynamic printStack _:;
{} () {} codeRef stable? printStack _:;
{} () {} codeRef unknownStable? printStack _:;
{} () {} codeRef isDynamic printStack _:;
@codeLocal stable? printStack _:;
() stable? printStack _:;
() unknownStable? printStack _:;
() isDynamic printStack _:;
0
] "main" exportFunction
Expected Output During Compilation
-- current stability versus forgotten-contents stability --
TRUE
TRUE
FALSE
FALSE
FALSE
TRUE
TRUE
TRUE
-- references --
TRUE
FALSE
FALSE
TRUE
TRUE
TRUE
FALSE
FALSE
FALSE
-- text, code, meta --
TRUE
FALSE
FALSE
FALSE
FALSE
FALSE
FALSE
FALSE
FALSE
FALSE
TRUE
FALSE
FALSE
See also
dynamicbuiltin(object -- dynamicValue)Current stack-object forgotten-contents conversion.isDirtybuiltin(object -- isDirty)Current stack-object instability predicate; exact opposite ofstable?.isDynamicbuiltin(object -- isDynamic)Current stable-and-unknown predicate; same predicate asunknownStable?.isStaticbuiltin(object -- isKnown)Historical name of the same current stack-object knownness predicate.known?builtin(object -- isKnown)Preferred public name of the same current stack-object knownness predicate.unknownStable?builtin(object -- isUnknownStable)Current stable-and-unknown predicate; same predicate asisDynamic.