- auto-invoke code gc
-- fix alien-callback/SEH bug on win32
- live search: timer delay would be nice
- help responder has no way to access { "foo" "bar" }
- httpd search tools
+- code-gc instability with callbacks
+ ui:
{ "float>=" "math-internals" }
{ "(word)" "kernel-internals" }
{ "update-xt" "words" }
+ { "word-xt" "words" }
{ "drop" "kernel" }
{ "2drop" "kernel" }
{ "3drop" "kernel" }
{ "alien-address" "alien" }
{ "slot" "kernel-internals" }
{ "set-slot" "kernel-internals" }
- { "integer-slot" "kernel-internals" }
- { "set-integer-slot" "kernel-internals" }
{ "char-slot" "kernel-internals" }
{ "set-char-slot" "kernel-internals" }
{ "resize-array" "arrays" }
\ (word) { object object } { word } <effect> "infer-effect" set-word-prop
\ update-xt { word } { } <effect> "infer-effect" set-word-prop
-\ compiled? { word } { object } <effect> "infer-effect" set-word-prop
+
+\ word-xt { word } { integer } <effect> "infer-effect" set-word-prop
\ getenv { fixnum } { object } <effect> "infer-effect" set-word-prop
\ setenv { object fixnum } { } <effect> "infer-effect" set-word-prop
\ set-slot { object object fixnum } { } <effect> "infer-effect" set-word-prop
-\ integer-slot { object fixnum } { integer } <effect> "infer-effect" set-word-prop
-
-\ set-integer-slot { integer object fixnum } { } <effect> "infer-effect" set-word-prop
-
\ char-slot { fixnum object } { fixnum } <effect> "infer-effect" set-word-prop
\ set-char-slot { fixnum fixnum object } { } <effect> "infer-effect" set-word-prop
{ $values { "n" "a non-negative integer" } { "obj" "an object" } }
{ $description "Writes an object to the Factor runtime's environment table. User code never has to write to the environment table directly; instead, use one of the callers of this word." } ;
-HELP: integer-slot ( obj m -- n )
-{ $values { "obj" "an object" } { "m" "a non-negative fixnum" } { "n" "an integer" } }
-{ $description "Reads the untagged integer stored at the " { $snippet "n" } "th slot of " { $snippet "obj" } "." }
-{ $warning "This word is in the " { $vocab-link "kernel-internals" } " vocabulary because it does not perform type or bounds checks, and slot numbers are implementation detail." } ;
-
-HELP: set-integer-slot ( m obj n -- )
-{ $values { "n" "an integer" } { "obj" "an object" } { "m" "a non-negative fixnum" } }
-{ $description "Writes an untagged integer to the " { $snippet "n" } "th slot of " { $snippet "obj" } "." }
-{ $warning "This word is in the " { $vocab-link "kernel-internals" } " vocabulary because it does not perform type or bounds checks, and slot numbers are implementation detail." } ;
-
HELP: slot ( obj m -- value )
{ $values { "obj" "an object" } { "m" "a non-negative fixnum" } { "value" "an object" } }
{ $description "Reads the object stored at the " { $snippet "n" } "th slot of " { $snippet "obj" } "." }
[ rot word-props set-hash ]
[ nip remove-word-prop ] if ;
-GENERIC: word-xt ( word -- xt )
-M: word word-xt 8 integer-slot ;
-
SYMBOL: vocabularies
: vocab ( name -- vocab ) vocabularies get hash ;
primitive_float_greatereq,
primitive_word,
primitive_update_xt,
+ primitive_word_xt,
primitive_drop,
primitive_2drop,
primitive_3drop,
primitive_alien_address,
primitive_slot,
primitive_set_slot,
- primitive_integer_slot,
- primitive_set_integer_slot,
primitive_char_slot,
primitive_set_char_slot,
primitive_resize_array,
write_barrier(obj);
}
-void primitive_integer_slot(void)
-{
- F_FIXNUM slot = untag_fixnum_fast(dpop());
- CELL obj = UNTAG(dpop());
- dpush(tag_cell(get(SLOT(obj,slot))));
-}
-
-void primitive_set_integer_slot(void)
-{
- F_FIXNUM slot = untag_fixnum_fast(dpop());
- CELL obj = UNTAG(dpop());
- F_FIXNUM value = to_cell(dpop());
- put(SLOT(obj,slot),value);
-}
-
CELL clone(CELL obj)
{
CELL size = object_size(obj);
void primitive_tag(void);
void primitive_slot(void);
void primitive_set_slot(void);
-void primitive_integer_slot(void);
-void primitive_set_integer_slot(void);
CELL clone(CELL obj);
void primitive_clone(void);
update_xt(untag_word(dpop()));
}
+void primitive_word_xt(void)
+{
+ F_WORD *word = untag_word(dpeek());
+ drepl(tag_cell(word->xt));
+}
+
void fixup_word(F_WORD* word)
{
/* If this is a compiled word, relocate the code pointer. Otherwise,
void update_xt(F_WORD* word);
void primitive_word(void);
void primitive_update_xt(void);
+void primitive_word_xt(void);
void fixup_word(F_WORD* word);
INLINE F_WRAPPER *untag_wrapper_fast(CELL tagged)