Word constructor was not invoking relocation on the profiled block, so words constructed while profiling was on could not be executed. This prevented profiling of PEGs
parent
de02724135
commit
cdb94e4c62
|
@ -1,6 +1,7 @@
|
||||||
IN: tools.profiler.tests
|
IN: tools.profiler.tests
|
||||||
USING: accessors tools.profiler tools.test kernel memory math
|
USING: accessors tools.profiler tools.test kernel memory math
|
||||||
threads alien tools.profiler.private sequences compiler.units ;
|
threads alien tools.profiler.private sequences compiler.units
|
||||||
|
words ;
|
||||||
|
|
||||||
[ t ] [
|
[ t ] [
|
||||||
\ length counter>>
|
\ length counter>>
|
||||||
|
@ -54,3 +55,7 @@ threads alien tools.profiler.private sequences compiler.units ;
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
[ 666 ] [ \ recompile-while-profiling-test counter>> ] unit-test
|
[ 666 ] [ \ recompile-while-profiling-test counter>> ] unit-test
|
||||||
|
|
||||||
|
[ ] [ [ [ ] compile-call ] profile ] unit-test
|
||||||
|
|
||||||
|
[ [ gensym execute ] profile ] [ T{ undefined } = ] must-fail-with
|
||||||
|
|
|
@ -32,7 +32,6 @@ F_COMPILED *compile_profiling_stub(F_WORD *word)
|
||||||
/* Allocates memory */
|
/* Allocates memory */
|
||||||
void update_word_xt(F_WORD *word)
|
void update_word_xt(F_WORD *word)
|
||||||
{
|
{
|
||||||
/* If we just enabled the profiler, reset call count */
|
|
||||||
if(profiling_p)
|
if(profiling_p)
|
||||||
{
|
{
|
||||||
if(!word->profiling)
|
if(!word->profiling)
|
||||||
|
|
|
@ -61,6 +61,9 @@ F_WORD *allot_word(CELL vocab, CELL name)
|
||||||
update_word_xt(word);
|
update_word_xt(word);
|
||||||
UNREGISTER_UNTAGGED(word);
|
UNREGISTER_UNTAGGED(word);
|
||||||
|
|
||||||
|
if(profiling_p)
|
||||||
|
iterate_code_heap_step(word->profiling,relocate_code_block);
|
||||||
|
|
||||||
return word;
|
return word;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -76,7 +79,7 @@ DEFINE_PRIMITIVE(word)
|
||||||
DEFINE_PRIMITIVE(word_xt)
|
DEFINE_PRIMITIVE(word_xt)
|
||||||
{
|
{
|
||||||
F_WORD *word = untag_word(dpop());
|
F_WORD *word = untag_word(dpop());
|
||||||
F_COMPILED *code = word->code;
|
F_COMPILED *code = (profiling_p ? word->profiling : word->code);
|
||||||
dpush(allot_cell((CELL)code + sizeof(F_COMPILED)));
|
dpush(allot_cell((CELL)code + sizeof(F_COMPILED)));
|
||||||
dpush(allot_cell((CELL)code + sizeof(F_COMPILED) + code->code_length));
|
dpush(allot_cell((CELL)code + sizeof(F_COMPILED) + code->code_length));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue