Age | Commit message (Collapse) | Author |
|
In a list comprehension, a failing call to a guard BIF means
false (rather than an exception).
|
|
Expressions in guards such as:
f() when [1,2,3] ->
ok.
would cause the debugger to crash when attempting to interpret the
module containing the expressions. Other kind of constants such as:
f() when 42 ->
ok.
were converted to an invalid internal format ({integer,Line,42}
instead of {value,Line,42}), but that happened to work because
because anything not equal to 'true' (even a crash) was interpreted
as 'false'.
Make sure to handle all possible expressions and convert them
directly to {value,Line,false}. Remove the special handling of
the atom 'true' in and_guard/1 since it is no longer needed.
|
|
erlang:raise/3 was evaluated in the real process, which produced
a correct stacktrace, but did not set emulated stacktrace for the
process. Thus, a subsequent call to erlang:get_stacktrace/0 would
retrieve the previous stacktrace for the process.
|
|
When an exception was generated from interpreted code, the stacktrace
would not look exactly like BEAM's stacktraces. There would generally
be fewer entries (never more than three), and the top entry would
always have MFAs with the actual arguments (rather than the arity).
There are two good reasons for making the stacktraces as similar
as possible:
* Code that examines a stacktrace can behave differently in the
interpreted and BEAM code if the stacktraces are different.
* It is easier to test the debugger if test suites for other
applications (such as the emulator) can be run with the debugger
with as few modifications as possible.
|
|
Currently, dbg_istk:exception_stacktrace/2 does not do a very good job
imitating BEAM's stacktrace. The reason is that it need to be
relatively fast since a simulated stacktrace is constructed not only
when an exception oocurs, but also before every call to
non-interpreted code.
To prepare for a future more thorough (and slower) stacktrace
construction, refactor the building of the stacktrace so that
it only is done when erlang:get_stacktrace/0 is called.
|
|
Problems with the current stack implementation:
* The GUI assumes that the stack frame pushed on the stack
is level 2. If the 'no_tail' option is set for the process,
there may not be an entry for level 2.
* In each stack entry, the line number is the line number of
the caller, not the line number for the function in the 'mfa'
field as might be expected. That complicates generation of
a stacktrace with line number information.
Change the implementation as follows:
* Keep the information for the current function (its MFA and
current line number) in the #ieval{} record. Don't push it
onto the stack. Only push the information when another function
is called. That will ensure that the MFA and the line number
is found in the same stack entry. That also has the advantage
that if the 'no_tail' option is set, the stack not need to
be modified for tail-recursive calls.
* Make sure that there always is an entry for level two.
|
|
There is no need to set #ieval.top to false in every
iteration of eval_list/1.
|
|
The 'last_call' is badly named. What is means is that the
next call will leave intepreted code.
|
|
|
|
|
|
sys_pre_expand has already rewritten old guard tests to
new guard tests.
|
|
Many releases ago, Mod:module_info/{0,1} used to be specially
handled in the BEAM loader. The debugger has similar special
handling.
In the current implementation, Mod:module_info/{0,1} are ordinary
functions that call special BIFs to do their work.
Therefore, remove the special handling of Mod:module_info/{0,1}
in the debugger.
|
|
BIFs that spawn new processes once upon a time needed/benefited
from special handling, but now they are handled in exactly the
same way as an unsafe BIF (except for a bug in the handling of
the return value trace). Therefore, treat spawn BIFs as unsafe
BIFs.
|
|
|
|
Make sure that all guards BIFs are handled as safe BIFs in function
bodies. BIFs in guards are already handled as safe. (self/0 is not
safe, but it is already specially handled.)
|
|
Since erlang:fault/{1,2} is no longer supported in the run-time
system (it was removed several releases ago), there is no need
to still support it in the debugger.
|
|
|
|
|
|
* nick/lht-idl-compiler-opt/OTP-9460:
Changed version, added release note and updated license headers.
ic: Implement multiple include optimization
ic: Fix preprocessor double expanded included files
ic: Improve ic_pragma performance by using ets:match
|
|
|
|
* dev:
Added test case for ticket 9411.
Entity replacement in attributes doesn't work poperly.
|
|
* lars/xmerl/attr_val_bug/OTP-9411:
Added test case for ticket 9411.
Entity replacement in attributes doesn't work poperly.
|
|
* dev:
Added ticket test case.
Fixed problem with relative paths to schemas.
|
|
|
|
|
|
|
|
|
|
|
|
* hl/gen_fsm-return:
Fix minor typo in gen_fsm documentation
OTP-9456
|
|
|
|
* ms/inet-socket-domain-error:
inet: error if fd does not match socket domain
OTP-9455
|
|
|
|
* bjorn/parallel-make/OTP-9451: (28 commits)
erl_interface: Support parallel make
dialyzer: Remove special-case build in the top Makefile
pcre: Rename Makefile.in to pcre.mk and include it
cos*/src/Makefile: Support parallel make
ic: Support parallel make
orber: Support parallel make
.gitignore: Ignore IDL-GENERATED
public_key: Support parallel make
ssh: Support parallel make
os_mon: Support parallel make
diameter: Support parallel make
snmp: Support parallel make
megaco: Support parallel make
megaco/src/flex/Makefile.in: Support parallel make
*/c_src/Makefile*: Support parallel make
eunit: Support parallel make
gs: Support parallel make
common_test Makefile: Support parallel make
erts/emulator/Makefile.in: Support parallel make
erts: Fix dependency generation
...
|
|
|
|
There used to be a requirement that Dialyzer was build at the
very end. Since this requirement has been dropped, remove the
special-case build targets for Dialyzer in the top-level
Makefile.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Make sure that directories are created before they are used.
I tried to use order-only prerequisites to create the directories,
but run into two problems: First, order-only prerequisites are
only implemented in Make 3.80 and later. Second, on a computer
running Solaris/Intel 2.8 (with Make 3.80), order-only prerequisites
seemed to work like ordinary prerequisites, causing targets to
be re-built if the timestamp for the directory changed.
Therefore, using a shell command to run mkdir seems to be the
more portable solution.
|
|
Create directories first, not within implicit rules. If two
'install' instances runs at the same time attempting to create
a directory, one of them may fail with an "File exists" error.
I tried to use order-only prerequisites to create the directories,
but run into two problems: First, order-only prerequisites are
only implemented in Make 3.80 and later. Second, on a computer
running Solaris/Intel 2.8 (with Make 3.80), order-only prerequisites
seemed to work like ordinary prerequisites, causing targets to
be re-built if the timestamp for the directory changed.
Therefore, using a shell command to run mkdir seems to be the
more portable solution.
|
|
|
|
|
|
Add dependecies to force the ct_line parse transform module to be
built before all other modules.
|
|
|