aboutsummaryrefslogtreecommitdiffstats
path: root/lib
AgeCommit message (Collapse)Author
2011-08-16Fix handling of guard BIFs in list and binary comprehensionsBjörn Gustavsson
In a list comprehension, a failing call to a guard BIF means false (rather than an exception).
2011-08-16Handle terms in the top-level of guards properlyBjörn Gustavsson
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.
2011-08-16Make sure that erlang:raise/3 sets the emulated stacktraceBjörn Gustavsson
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.
2011-08-16Make stacktraces in exceptions more similar to BEAM's stacktracesBjörn Gustavsson
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.
2011-08-16Don't build stacktrace until erlang:get_stacktrace() is calledBjörn Gustavsson
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.
2011-08-16Rewrite stack handlingBjörn Gustavsson
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.
2011-08-16Slightly clean-up and optimize some evaluation codeBjörn Gustavsson
There is no need to set #ieval.top to false in every iteration of eval_list/1.
2011-08-16ieval record: Rename the misnamed 'last_call' field to 'top'Björn Gustavsson
The 'last_call' is badly named. What is means is that the next call will leave intepreted code.
2011-08-16dbg_istk: Use a record for stack entries instead of a tupleBjörn Gustavsson
2011-08-16Break out stack handling into the dbg_istk moduleBjörn Gustavsson
2011-08-16dbg_iload: Remove unnecessary handling of old guard testsBjörn Gustavsson
sys_pre_expand has already rewritten old guard tests to new guard tests.
2011-08-16Remove the special handling of Mod:module_info/{0,1}Björn Gustavsson
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.
2011-08-16Remove the special handling of spawn BIFsBjörn Gustavsson
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.
2011-08-16Remove BIFs that no longer exist from dbg_iload:bif_type/1Björn Gustavsson
2011-08-16Handle all guard BIFs as safe in function bodiesBjörn Gustavsson
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.)
2011-08-16Remove support for erlang:fault/{1,2}Björn Gustavsson
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.
2011-08-16compiler tests: Add a test for constants in guardsBjörn Gustavsson
2011-08-15Merge branch 'dev' into majorNiclas Eklund
2011-08-15Merge branch 'nick/lht-idl-compiler-opt/OTP-9460' into devNiclas Eklund
* 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
2011-08-11Changed version, added release note and updated license headers.Niclas Eklund
2011-08-10Merge branch 'dev' into majorLars Thorsen
* dev: Added test case for ticket 9411. Entity replacement in attributes doesn't work poperly.
2011-08-10Merge branch 'lars/xmerl/attr_val_bug/OTP-9411' into devLars Thorsen
* lars/xmerl/attr_val_bug/OTP-9411: Added test case for ticket 9411. Entity replacement in attributes doesn't work poperly.
2011-08-10Merge branch 'dev' into majorLars Thorsen
* dev: Added ticket test case. Fixed problem with relative paths to schemas.
2011-08-09Added test case for ticket 9411.Lars Thorsen
2011-08-09Entity replacement in attributes doesn't work poperly.Lars Thorsen
2011-08-09Added ticket test case.Lars Thorsen
2011-08-09Fixed problem with relative paths to schemas.Lars Thorsen
2011-08-08Merge branch 'dev' into majorHenrik Nord
2011-08-08Merge branch 'hl/gen_fsm-return' into devHenrik Nord
* hl/gen_fsm-return: Fix minor typo in gen_fsm documentation OTP-9456
2011-08-08Merge branch 'dev' into majorHenrik Nord
2011-08-08Merge branch 'ms/inet-socket-domain-error' into devHenrik Nord
* ms/inet-socket-domain-error: inet: error if fd does not match socket domain OTP-9455
2011-08-08Fix minor typo in gen_fsm documentationHenrik Nord
2011-08-08Merge branch 'bjorn/parallel-make/OTP-9451' into majorBjörn Gustavsson
* 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 ...
2011-08-08erl_interface: Support parallel makeBjörn Gustavsson
2011-08-08dialyzer: Remove special-case build in the top MakefileBjörn Gustavsson
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.
2011-08-08cos*/src/Makefile: Support parallel makeBjörn Gustavsson
2011-08-08ic: Support parallel makeBjörn Gustavsson
2011-08-08orber: Support parallel makeBjörn Gustavsson
2011-08-08public_key: Support parallel makeBjörn Gustavsson
2011-08-08ssh: Support parallel makeBjörn Gustavsson
2011-08-08os_mon: Support parallel makeBjörn Gustavsson
2011-08-08diameter: Support parallel makeBjörn Gustavsson
2011-08-08snmp: Support parallel makeBjörn Gustavsson
2011-08-08megaco: Support parallel makeBjörn Gustavsson
2011-08-08megaco/src/flex/Makefile.in: Support parallel makeBjörn Gustavsson
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.
2011-08-08*/c_src/Makefile*: Support parallel makeBjörn Gustavsson
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.
2011-08-08eunit: Support parallel makeBjörn Gustavsson
2011-08-08gs: Support parallel makeBjörn Gustavsson
2011-08-08common_test Makefile: Support parallel makeBjörn Gustavsson
Add dependecies to force the ct_line parse transform module to be built before all other modules.
2011-08-08lib/Makefile: Only build the runtime_tools application onceBjörn Gustavsson