|
|
Line 1,160: |
Line 1,160: |
|
log_function_call(rtnNo) |
|
log_function_call(rtnNo) |
|
</pre> |
|
</pre> |
|
|
(I may have been a bit too literal about "function" here, specifically "not procedure") |
|
|
|
|
Now create our test.exw program, which wraps the entire compiler: |
|
Now create our test.exw program, which wraps the entire compiler: |
|
<lang Phix>constant func_log = new_dict(), |
|
<lang Phix>constant func_log = new_dict(), |
Line 1,192: |
Line 1,194: |
|
traverse_dict(r_visitor,2,func_freq,rev:=true) -- top 10</lang> |
|
traverse_dict(r_visitor,2,func_freq,rev:=true) -- top 10</lang> |
|
Invoke using "p test -norun test" (note you can omit the ".exw" part of "test.exw") |
|
Invoke using "p test -norun test" (note you can omit the ".exw" part of "test.exw") |
|
|
|
⚫ |
|
|
⚫ |
The log_function call is passed an index into the symbol table.<br> |
|
⚫ |
For performance reasons the compiler uses integer indexes, so we need to invoke |
|
⚫ |
rebuild_callback() to replace them with human-readable names in the symbol table.<br> |
|
⚫ |
For more details of S_Name and other constants/contents of the symbol table, see pglobals.e<br> |
|
⚫ |
The compiler (p.exe) interprets test.exw(+p.exw) which compiles a third copy of itself under -norun.<br> |
|
⚫ |
Notice that it is not necessary to compile the compiler (using p -c p) to test changes in it, and in |
|
⚫ |
fact weeks or months of work on the compiler often happens purely in interpreter mode, between actually |
|
⚫ |
creating a new executable.<br> |
|
⚫ |
If, instead, you want to know how many times a function is called at run-time, just add "with profile" |
|
⚫ |
to the source and it will create a ex.pro listing which tells you. |
|
|
|
|
⚫ |
Lastly, remember to remove/comment out that log_function_call() in pmain.e |
|
|
{{out}} |
|
{{out}} |
|
<pre> |
|
<pre> |
Line 1,220: |
Line 1,208: |
|
{90,"platform"} |
|
{90,"platform"} |
|
</pre> |
|
</pre> |
|
⚫ |
|
|
⚫ |
The log_function call is passed an index into the symbol table.<br> |
|
⚫ |
For performance reasons the compiler uses integer indexes, so we need to invoke |
|
⚫ |
rebuild_callback() to replace them with human-readable names in the symbol table.<br> |
|
⚫ |
For more details of S_Name and other constants/contents of the symbol table, see pglobals.e<br> |
|
⚫ |
The compiler (p.exe) interprets test.exw(+p.exw) which compiles a third copy of itself under -norun.<br> |
|
⚫ |
Notice that it is not necessary to compile the compiler (using p -c p) to test changes in it, and in |
|
⚫ |
fact weeks or months of work on the compiler often happens purely in interpreter mode, between actually |
|
⚫ |
creating a new executable.<br> |
|
⚫ |
If, instead, you want to know how many times a function is called at run-time, just add "with profile" |
|
⚫ |
to the source and it will create a ex.pro listing which tells you. |
|
|
|
|
⚫ |
Lastly, remember to remove/comment out that log_function_call() in pmain.e |
|
|
|
|
|
=={{header|PicoLisp}}== |
|
=={{header|PicoLisp}}== |