unknownStable? (object -- isUnknownStable)
Inputs
object: Current stack object whose unknown-stability is tested.
Outputs
unknownStable? tests whether an In-place object is currently stable and has an unknown value. For a non-Meta Struct, every solid field must meet that condition. The predicate does not itself forget values or change stability.
This predicate follows the referenced target for known non-NIL Ref objects. It is the same predicate as isDynamic. Fully known In-place objects therefore report FALSE. Text, Code, and Meta objects also report FALSE, including callable non-NIL Code objects.
Behavior
- An In-place object with unknown contents reports
TRUEonly while it is stable; an unstable object reportsFALSE. - A known non-
NILRef object reports theunknownStable?result of its target. - Known
NILRef objects and unknown Ref objects reportFALSE.
Example
{} 0 {} [
value: 7;
codeLocal: {} () {} codeRef;
unknownValue: 0 dynamic;
unknownText: 0 ("") dynamic @; # an unknown Text
[] !codeLocal # a non-NIL Code
"-- stable? versus unknownStable? for In-place values --" printCompilerMessage
7 stable? printStack _:;
7 unknownStable? printStack _:;
7 isDynamic printStack _:;
unknownValue stable? printStack _:;
unknownValue unknownStable? printStack _:;
unknownValue isDynamic printStack _:;
"-- stable? versus unknownStable? for references --" printCompilerMessage
@value stable? printStack _:;
@value unknownStable? printStack _:;
@value isDynamic printStack _:;
@value dynamic stable? printStack _:;
@value dynamic unknownStable? printStack _:;
@value dynamic isDynamic printStack _:;
0nx value addressToReference stable? printStack _:; # a NIL Ref
0nx value addressToReference unknownStable? printStack _:;
0nx value addressToReference isDynamic printStack _:;
"-- stable? versus unknownStable? for 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 _:;
@codeLocal unknownStable? printStack _:;
@codeLocal isDynamic printStack _:;
() stable? printStack _:;
() unknownStable? printStack _:;
() isDynamic printStack _:;
0
] "main" exportFunction
Expected Output During Compilation
-- stable? versus unknownStable? for In-place values --
TRUE
FALSE
FALSE
TRUE
TRUE
TRUE
-- stable? versus unknownStable? for references --
TRUE
FALSE
FALSE
TRUE
TRUE
TRUE
FALSE
FALSE
FALSE
-- stable? versus unknownStable? for text, code, meta --
TRUE
FALSE
FALSE
FALSE
FALSE
FALSE
FALSE
FALSE
FALSE
FALSE
FALSE
FALSE
TRUE
FALSE
FALSE
See also
isDirtybuiltin(object -- isDirty)Current stack-object instability predicate; exact opposite ofstable?.dynamicbuiltin(object -- dynamicValue)Current stack-object forgotten-contents conversion.isDynamicbuiltin(object -- isDynamic)Same current stable-and-unknown predicate under a different builtin name.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.stable?builtin(object -- isStable)Current stack-object stability predicate; exact opposite ofisDirty.