aboutsummaryrefslogtreecommitdiffstats
path: root/lib/stdlib
AgeCommit message (Collapse)Author
2010-06-02erl_expand_records: Replace is_record() with matchingBjörn Gustavsson
The compiler currently generates better code for: f(#r1{}) -> r1; f(#r2{}) -> r2; f(#r3{}) -> r3. than for: g(X) when is_record(X, r1) -> r1; g(X) when is_record(X, r2) -> r2; g(X) when is_record(X, r3) -> r3. The compiler generates good code for pattern matching (as in f/1), but in g/1 there are no patterns to match, and the clause to be executed must be chosen by evaluating the guards sequentially until one succeeds. Make the compiler generate better code by replacing calls to is_record() with matching in the function head (basically, g/1 will automatically be rewritten to do pattern matching as in f/1). Note that this rewrite will also benefit code such as: h(X) when X#r1.a =:= 1 -> ok. because it would have been rewritten to: h(X) when (is_record(X, r1, 3) orelse fail) and (element(2, X) =:= 1) -> ok. which in turn will be rewritten to: h({r1,_,_}=X) when (true orelse fail) and (element(2, X) =:= 1) -> ok. (That will be further simplified in later compiler passes.)
2010-05-31OTP-8657 New Erlang scanner tokens: '..' and '...'Hans Bolinder
The Erlang scanner has been augmented with two new tokens: .. and ....
2010-05-27handle {global, term()} names in format_status/2Steve Vinoski
The gen_fsm, gen_server, and wx_object format_status implementations fail to handle global names of the form {global, term()} where term() is something other than an atom, pid, or list. Change these format_status implementations to treat names that are atoms, pids, or lists as before, but for all other terms, set the header property of the function return value to a tuple whose first element is a string describing the return value and whose second element is the name term. Add unit tests for gen_server and gen_fsm to verify sys:get_status calls work successfully for globally registered instances.
2010-05-21Merge branch 'sv/format_status_error_info' into devErlang/OTP
* sv/format_status_error_info: Add support for the format_status callback to gen_event Extend format_status for gen_server/gen_fsm termination error logging OTP-8630 sv/format_status_error_info When a gen_server, gen_fsm process, or gen_event terminates abnormally, sometimes the text representation of the process state can occupy many lines of the error log, depending on the definition of the state term. A mechanism to trim out parts of the state from the log has been added (using a format_status/2 callback). See the documentation.
2010-05-21Correct typos in EEP-0031 implementationTuncer Ayaz
Signed-off-by: Tuncer Ayaz <[email protected]>
2010-05-20Merge branch 'pan/otp_8217_binary' into devErlang/OTP
* pan/otp_8217_binary: Add documentation for binary module Add more tests and make some go easier on small systems Correct Boyer More and trapping for longest_common_suffix Add longer timetrap to testcases and add binary to app file Add guard BIFs binary_part/2,3 Add binary:{encode,decode}_unsigned({1,2} Add referenced_byte_size/1 Add binary:list_to_bin/1 and binary:copy/1,2 Add bin_to_list/{1,2,3} Add binary:longest_common_prefix/longest_common_suffix Add binary:part to erl_bif_binary.c Move binary module bif's to erl_bif_binary.c Count reductions for process even when not trapping Add random compare testcase Teach BIF's binary:match/matches interrupting/restarting Teach binary.c the semantics to take longest instead of shortest match Initial commit of the binary EEP OTP-8217 Implement EEP31 The module binary from EEP31 (and EEP9) is implemented.
2010-05-19Merge branch 'dp/shell-line-editing' into devErlang/OTP
* dp/shell-line-editing: Readline-style line edit history OTP-8635 dp/shell-line-editing The shell's line editing has been improved to more resemble the behaviour of readline and other shells. (Thanks to Dave Peticolas)
2010-05-17Add documentation for binary modulePatrik Nyblom
Correct behaviour of copy/2 witn 0 copies.
2010-05-17Add more tests and make some go easier on small systemsPatrik Nyblom
Even more tests added to cover more error cases, some tests made easier on systems with small memories and timeouts made longer due to timetraps on solaris daily builds.
2010-05-17Correct Boyer More and trapping for longest_common_suffixPatrik Nyblom
Add testcases and clean up to get better code coverage.
2010-05-17Add longer timetrap to testcases and add binary to app filePatrik Nyblom
2010-05-17Add guard BIFs binary_part/2,3Patrik Nyblom
Add the gc_bif's to the VM. Add infrastructure for gc_bif's (guard bifs that can gc) with two and. three arguments in VM (loader and VM). Add compiler support for gc_bif with three arguments. Add compiler (and interpreter) support for new guard BIFs. Add testcases for new guard BIFs in compiler and emulator.
2010-05-17Add binary:{encode,decode}_unsigned({1,2}Patrik Nyblom
Add testcases for encode/decode_unsigned/1,2.
2010-05-17Add referenced_byte_size/1Patrik Nyblom
Add testcases for referenced_byte_size/1. Add failure tests for referenced_byte_size.
2010-05-17Add binary:list_to_bin/1 and binary:copy/1,2Patrik Nyblom
Add testcases for binary:list_to_bin/1 and binary:copy/1,2. Add reference implementation of list_to_bin/1.
2010-05-17Add bin_to_list/{1,2,3}Patrik Nyblom
Add testcases for bin_to_list. Teach binref.erl bin_to_list.
2010-05-17Add binary:longest_common_prefix/longest_common_suffixPatrik Nyblom
Add allcoator parameter to erts_get_aligned_binary_bytes_extra. Add testcases for the functions above. Add reference implementation for the functions above.
2010-05-17Add binary:part to erl_bif_binary.cPatrik Nyblom
Change name of the 'scope' option for binary:match/matches. Add split and replace to binary.erl. Cleanup comments etc in binary.erl and atom.names Add testcases for part, split, replace and scopes.
2010-05-17Count reductions for process even when not trappingPatrik Nyblom
Set loop factors to 10. Teach erts_debug:set_internal_state to limit loop factor for binary. Add random tests for matches and match with multiple searchstrings.
2010-05-17Add random compare testcasePatrik Nyblom
Fix heap-hole when trapping in binary.c Fix boyer more segfaulting when searchstring is longer than haystack
2010-05-17Teach binary.c the semantics to take longest instead of shortest matchPatrik Nyblom
Add testcase embryos and reference implementation. Change name of compile function according to EEP31.
2010-05-17Initial commit of the binary EEPPatrik Nyblom
2010-05-12timer: Update specs and apply tidier cleanupsKostis Sagonas
2010-05-12OTP-8629 stdlib: prepare erl_parse.yrl for future extensionHans Bolinder
2010-05-12OTP-8628 stdlib: correction lists(3)Hans Bolinder
The documentation of lists:keysort/2 states that the sort is stable.
2010-05-12Add support for the format_status callback to gen_eventSteve Vinoski
The gen_server and gen_fsm behaviors support the format_status callback to allow developers to specialize how callback module state appears within the return value of sys:get_status and within logged output resulting from abnormal process termination. This patch adds similar support to gen_event. Event handlers that export a format_status/2 function, which is an optional callback, and are registered with an event manager will now have their format_status callbacks invoked when sys:get_status is called on the event manager. The term returned from format_status for this case replaces the default handler state in the sys:get_status return value. This patch also extends gen_event to call an event handler's format_status function (if it exports one) should the handler terminate abnormally. The term returned from format_status is logged in place of the handler's state. This is intended to allow developers to control how much output is logged in the case of abnormal termination. The documentation is appropriately extended and new unit tests are added to cover the new gen_event format_status functionality.
2010-05-12Extend format_status for gen_server/gen_fsm termination error loggingSteve Vinoski
When a gen_server or gen_fsm process terminates abnormally, sometimes the text representation of the process state can occupy many lines of the error log, depending on the definition of the state term. Developers sometimes would like a way to trim out parts of the state from the log if those parts don't contribute to documenting the circumstances of the error, thereby helping to reduce the amount of logged output. Since the format_status callback can already format and specialize gen_server and gen_fsm state for inclusion in the term returned from sys:get_status, this patch extends format_status in a backward-compatible way to also be able to specialize the state logged for abnormal gen_server and gen_fsm termination, and includes new unit tests to verify the new functionality. This patch also eliminates the previous restriction that the status returned by format_status must be a list. It can now be any term. The documentation is extended to cover the new usage for format_status, and it's been improved to recommend a form for the normal case that allows the returned status to fit well with the rest of the term returned by sys:get_status. The documentation is clear that this form is only recommended, not required.
2010-05-12Merge branch 'bg/opt-receive' into devErlang/OTP
* bg/opt-receive: Test that gen_server:call/2,3 are fast even with a huge message queue erts: Add tests for the receive optimization Update primary bootstrap erts: Implement recv_mark/1 and recv_set/1 for real compiler tests: Cover the error handling code in beam_receive compiler test: Test optimization of receive statements Optimize selective receives in the presence of a large message queue Introduce the new recv_mark/1 and recv_mark/1 instructions Compile tests that communicate with R12 nodes with the r12 option Move p_run/2 to test_lib gen: Inline wait_resp_mon/2 to help the compiler optimize OTP-8623 bg/opt-receive reveive statements that can only read out a newly created reference are now specially optimized so that it will execute in constant time regardless of the number of messages in the receive queue for the process. That optimization will benefit calls to gen_server:call(). (See gen:do_call/4 for an example of a receive statement that will be optimized.)
2010-05-11Merge branch 'bg/beam_lib' into devErlang/OTP
* bg/beam_lib: Remove redundant includes Make beam_lib:cmp/2 stricter OTP-8625 bg/beam_lib The beam_lib:cmp/2 function now compares BEAM files in stricter way. The BEAM files will be considered different if there are any changes except in the compilation information ("CInf") chunk. beam_lib:cmp/2 used to ignore differences in the debug information (significant for Dialyzer) and other chunks that did not directly change the run-time behavior.
2010-05-11Test that gen_server:call/2,3 are fast even with a huge message queueBjörn Gustavsson
2010-05-11Compile tests that communicate with R12 nodes with the r12 optionBjörn Gustavsson
R12 nodes cannot load code that use the optimized receive that we are about to implement.
2010-05-10gen: Inline wait_resp_mon/2 to help the compiler optimizeBjörn Gustavsson
We are about to introduce a new optimization that requires the creation of a monitor and the following receive statement to be in the same function.
2010-05-06Remove redundant includesBjörn Gustavsson
2010-05-06Make beam_lib:cmp/2 stricterBjörn Gustavsson
The beam_lib:cmp/2 function only compares the executable parts of the BEAM files, not attributes or abstract code. Since the types and specs (used by Dialyzer) are contained in the abstract code, beam_lib:cmp/2 will return 'ok' if the only difference between two BEAM file are in the types or specs. If an Erlang/OTP system is installed in a revision control system, and beam_lib:cmp/2 is used to avoid committing unchanged but newly compiled BEAM files, BEAM files with no other changes than in types or specs may not get updated, which can problems if Dialyzer or the debugger is run. To avoid that problem, change beam_lib:cmp/2 to compare all chunks *except* for the "CInf" chunk. The "CInf" chunk contains the compilation time, compiler options, and compiler version.
2010-04-30Fix mispelled type name in spec for ets:to_dets/2Björn Gustavsson
2010-04-27OTP-8564 Update deprecation statusMicael Karlberg
Deprecated functions designated to be removed in R14 has been removed. Also, some new functions has been marked as deprecated (the old http client api module).
2010-04-23Merge branch 'ta/nested-records' into devErlang/OTP
* ta/nested-records: Document R14 paren-less record access/update Support nested record field access without parentheses OTP-8597 ta/nested-records Nested records can now be accessed without parenthesis. See the Reference Manual for examples. (Thanks to YAMASHINA Hio and Tuncer Ayaz.)
2010-04-21Merge branch 'ms/re_infinite_loop' into devErlang/OTP
* ms/re_infinite_loop: Add testcase for infinite loop problem caused by reset of match_call_count re: Fix non-termination for a certain regular expression OTP-8589 Pcre may hang on a special regexp A bug in re that could cause certain regular expression matches never to terminate is corrected. (Thanks to Michael Santos and Gordon Guthrie.)
2010-04-21Removed deprecated functions and moduleNiclas Eklund
2010-04-20Support nested record field access without parenthesesTuncer Ayaz
Original patch from YAMASHINA Hio posted to erlang-patches@ on Tue Jun 12 11:27:53 CEST 2007: http://www.erlang.org/pipermail/erlang-patches/2007-June/000182.html http://fleur.hio.jp/pub/erlang/record2.patch Only had to do minor changes to port the patch to the current R14A development tree. Also added compiler/record_SUITE:nested_access/2 to test nested record access with or without parentheses. With this change the following will work. -record(nrec0, {name = <<"nested0">>}). -record(nrec1, {name = <<"nested1">>, nrec0=#nrec0{}}). -record(nrec2, {name = <<"nested2">>, nrec1=#nrec1{}}). nested_access() -> N0 = #nrec0{}, N1 = #nrec1{}, N2 = #nrec2{}, <<"nested0">> = N0#nrec0.name, <<"nested1">> = N1#nrec1.name, <<"nested2">> = N2#nrec2.name, <<"nested0">> = N1#nrec1.nrec0#nrec0.name, <<"nested0">> = N2#nrec2.nrec1#nrec1.nrec0#nrec0.name, <<"nested1">> = N2#nrec2.nrec1#nrec1.name, <<"nested0">> = ((N2#nrec2.nrec1)#nrec1.nrec0)#nrec0.name, N1a = N2#nrec2.nrec1#nrec1{name = <<"nested1a">>}, <<"nested1a">> = N1a#nrec1.name, N2a = N2#nrec2.nrec1#nrec1.nrec0#nrec0{name = <<"nested0a">>}, N2b = ((N2#nrec2.nrec1)#nrec1.nrec0)#nrec0{name = <<"nested0a">>}, <<"nested0a">> = N2a#nrec0.name, N2a = N2b, ok. Signed-off-by: Tuncer Ayaz <[email protected]>
2010-04-20Add testcase for infinite loop problem caused by reset of match_call_countPatrik Nyblom
2010-04-19Merge branch 'bg/deprecations' into devErlang/OTP
* bg/deprecations: test suites: Remove incidental use of deprecated concat_binary/1 Postpone removal of concat_binary/1 Remove deprecated lists:flat_length/1 OTP-8584 bg/deprecations
2010-04-19OTP-8567 The word 'spec' is no longer reserved.Hans Bolinder
The function erl_scan:reserved_word/1 no longer returns true when given the word spec. This bug was introduced in STDLIB-1.15.3 (R12B-3).
2010-04-15Merge branch 'ms/pcre-compile-workspace-overrun' into devErlang/OTP
* ms/pcre-compile-workspace-overrun: re_SUITE: Add pcre_compile_workspace_overflow/1 MacOS X: Boost default stack size Fix check for compile workspace overflow OTP-8539 ms/pcre-compile-workspace-overrun
2010-04-14Fix spec for ets:to_dets/2Kostis Sagonas
2010-04-14Merge branch 'ks/stdlib' into devErlang/OTP
* ks/stdlib: erl_parse.yrl: Add missing operator in type declaration stdlib: Add types and specs stdlib: Use fun object instead of {M,F} tuple ets: Cleanup as suggested by tidier OTP-8576 ks/stdlib
2010-04-14re_SUITE: Add pcre_compile_workspace_overflow/1Björn Gustavsson
2010-04-13ets docs: Correct return type for ets:to_dets/2Björn Gustavsson
2010-04-13erl_parse.yrl: Add missing operator in type declarationKostis Sagonas
2010-04-13stdlib: Add types and specsKostis Sagonas