aboutsummaryrefslogtreecommitdiffstats
path: root/lib
AgeCommit message (Collapse)Author
2011-08-18common_test: Use line numbers in exceptionsBjörn Gustavsson
Remove the old kludgy parse transformations and line numbers macros in common_test and test_server, and use the line numbers in exceptions instead.
2011-08-18common_test tests: Don't do detailed testing of the stack backtraceBjörn Gustavsson
The exact layout of the stack backtrace is an implementation detail that may be changed at any time.
2011-08-18test_server: Refactor init_per_testcase/3 into two functionsBjörn Gustavsson
2011-08-18Merge branch 'hb/correction_of_zip_contracts/OTP-9471' into devHans Bolinder
* hb/correction_of_zip_contracts/OTP-9471: Correct contracts in the zip module
2011-08-18Merge branch 'hb/et/remove_dialyzer_warnings/OTP-9470' into devHans Bolinder
* hb/et/remove_dialyzer_warnings/OTP-9470: Remove Dialyzer warnings
2011-08-17Correct contracts in the zip moduleHans Bolinder
The contracts of zip:zip_list_dir/1 and zip:zip_get/2 have been corrected.
2011-08-17Merge branch 'ia/odbc/skip-tests-because-of-driver-issues' into devIngela Anderton Andin
* ia/odbc/skip-tests-because-of-driver-issues: Skip test if not applicable
2011-08-17Remove Dialyzer warningsHans Bolinder
2011-08-17Allow @enum when AVP is defined in an inherited dictionary.Anders Svensson
3GPP standards (for one) extend the values allowed for RFC 3588 AVP's of type Enumerated. Previously, extending an AVP was only possible by completely redefining the AVP.
2011-08-17@id required in dictionary files only when @messages is specified.Anders Svensson
@id defines an application identifier and this is used only when sending or receiving messages. A dictionary can define only AVP's however, to be included by other dictionaries using @inherits, in which case it makes no sense to require @id. Note that message definitions are not inherited with @inherits, only AVP's
2011-08-17Fix dialyzer warning on default clause for binary comprehensionIvan Dubrov
Fixed dialyzer warning occuring on binary comprehension of form "<< <<>> || {A, B} <- [{a, b}] >>" caused by default clause inserted by compiler. Since this clause is different from the case of list comprehension, dialyzer fails to suppress that warning.
2011-08-17ic: Fix typo, #ifudef -> #ifndefHaitao Li
2011-08-16Merge branch 'kj/eunit-surefire-fixes' into devHenrik Nord
* kj/eunit-surefire-fixes: Generate separate surefire XMLs for each test suite OTP-9465
2011-08-16Merge branch 'cr/trivia' into devHenrik Nord
* cr/trivia: replace "a ssl" with "an ssl" reindent pkix_path_validation/3 Trivial documentation fixes OTP-9464
2011-08-16compiler: Don't create filenames starting with "./"Björn Gustavsson
In the location information tables in the run-time system, source filenames that are the same as the module name plus ".erl" extension are not stored explicitly, thus saving memory. To take advantage of that optimization, avoid complicating the names of files in the current working directory; specifically, make sure that "./" is not prepended to the name.
2011-08-16Merge branch 'rc/edoc-minor' into devHenrik Nord
* rc/edoc-minor: forgot to ensure that xmerl is found in path for include_lib to work fix -spec declaration that doesn't work in R13B04 eliminate warnings about unused imports removed CVS-keywords from source files synchronized with edoc development version OTP-9463
2011-08-16Lookup and include filenames and line numbers in exceptionsBjörn Gustavsson
2011-08-16emulator: Add a fourth element in exception stacktracesBjörn Gustavsson
This commit is a preparation for introducing location information (filename/line number) in stacktraces in exceptions. Currently a stack trace looks like: [{Mod1,Function1,Arity1}, . . . {ModN,FunctionN,ArityN}] Add a forth element to each tuple that can be used indication the filename and line number of the source file: [{Mod1,Function1,Arity1,Location1}, . . . {ModN,FunctionN,ArityN,LocationN}] In this commit, the fourth element will just be an empty list, and we will change all code that look at or manipulate stacktraces.
2011-08-16Include location information for line instructions in BEAM filesBjörn Gustavsson
2011-08-16compiler: Generate line instructionsBjörn Gustavsson
2011-08-16compiler, emulator: Introduce the line/1 instructionBjörn Gustavsson
Introduce the line/1 instruction in the compiler and the BEAM virtual machine. It will not yet be generated by the compiler and will not actually carry any information.
2011-08-16v3_kernel: Make sure that line number annotations are passed throughBjörn Gustavsson
2011-08-16v3_core: Annotate exception-generating clauses with line numbersBjörn Gustavsson
2011-08-16Remove support for very old BEAM filesBjörn Gustavsson
Since the run-time system cannot load those BEAM files, it was not possible to debug them anyway.
2011-08-16Don't include tail-recursive calls in stacktracesBjörn Gustavsson
The stacktrace in debugger-generated exceptions should be as similar to stacktraces in BEAM-generated exceptions as possible.
2011-08-16Fix the no_tail optionBjörn Gustavsson
The 'no_tail' option was broken and would work almost as the 'all' option, because it would use #ieval.top (formerly known as #ieval.last_call) as the basis for its decision to push or not. Fix it by including a boolean in each call/apply instruction indicating whether the call is tail-recursive and pass that boolean to the dbg_istk:push() function.
2011-08-16dbg_ieval: Properly handle exceptions when binary construction failsBjörn Gustavsson
An exception from eval_bits:expr_grp/5 (for constructing binaries) was not caught and handled by exception/4; thus exit_info and and stacktrace for the process was not set.
2011-08-16Fix binary matching in the debuggerBjörn Gustavsson
'eval_bits' is a common utility module used for evaluting binary construction and matching. The functions that do matching (match_bits/{6,7} and bin_gen/6) are supposed to treat the bindings as an abstract data type, but they assume that the bindings have the same representation as in the erl_eval module. That may cause binary matching to fail in the debugger, because the debugger represents the bindings as an unordered list of two-tuples, while the erl_eval modules uses an ordered list of two-tuple (an ordset). One way to fix the problem would be to let the debugger to use ordered lists to represent the bindings. Unfortunately, that would also change how the bindings are presented in the user interface. Currently, the variable have most been recently assigned is shown first, which is convenient. Fix the matching problem by mending the leaky abstraction in eval_bits. The matching functions needs to be passed two additional operations: one for looking up a variable in the bindings and one for adding a binding. Those operations could be passed as two more funs (in addition to the evaluation and match fun already passed), but the functions already have too many arguments. Therefore, change the meaning of the match fun, so that the first argument is the operation to perform ('match', 'binding', or 'add_binding') and second argument is a tuple with arguments for the operation.
2011-08-16Delay saving of the stack in exit_info when an exception occursBjörn Gustavsson
When an exception occurs, the entire stack will be converted to the external term format and kept in the exit_info variable in the process dictionary. But the exit_info variable will only be needed if the exception causes the process to terminate (not if it is caught). Delay the conversion of the stack to external format. That can save significant amounts of time (e.g. in bs_construct:mem_leak/1).
2011-08-16Eliminate warnings in test suitesBjörn Gustavsson
2011-08-16Update test suites that have been copied from other applicationsBjörn Gustavsson
A long time ago, test suites were copied from other applications. Copy the tests again to get more test cases.
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-15Correct the contract of timer:now_diff/2Hans Bolinder
The contract of timer:now_diff() has been corrected. (Thanks to Alex Morarash).
2011-08-15Merge branch 'dev' into majorNiclas Eklund