This commits implements size classes in the GC for the Variable Width
Allocation feature. Unless `USE_RVARGC` compile flag is set, only a
single size class is created, maintaining current behaviour. See the
redmine ticket for more details.
Co-authored-by: Aaron Patterson <tenderlove@ruby-lang.org>
This commit removes T_PAYLOAD since the new VWA implementation no longer
requires T_PAYLOAD types.
Co-authored-by: Aaron Patterson <tenderlove@ruby-lang.org>
rather than having to do this in a two step process:
1. heap_page obj
2. dump_page $2 (or whatever lldb variable heap_page set)
we can now just
dump_page_rvalue obj
Update the lldb script so it can mostly recover a Ruby stack trace from
a core file. It's still missing line numbers and dealing with CFUNCs,
but you use it like this:
```
(lldb) rbbt ec
rb_control_frame_t TYPE
0x7f6fd6555fa0 EVAL ./bootstraptest/runner.rb error!!
0x7f6fd6555f68 METHOD ./bootstraptest/runner.rb main
0x7f6fd6555f30 METHOD ./bootstraptest/runner.rb in_temporary_working_directory
0x7f6fd6555ef8 METHOD /home/aaron/git/ruby/lib/tmpdir.rb mktmpdir
0x7f6fd6555ec0 BLOCK ./bootstraptest/runner.rb block in in_temporary_working_directory
0x7f6fd6555e88 CFUNC
0x7f6fd6555e50 BLOCK ./bootstraptest/runner.rb block (2 levels) in in_temporary_working_directory
0x7f6fd6555e18 BLOCK ./bootstraptest/runner.rb block in main
0x7f6fd6555de0 METHOD ./bootstraptest/runner.rb exec_test
0x7f6fd6555da8 CFUNC
0x7f6fd6555d70 BLOCK ./bootstraptest/runner.rb block in exec_test
0x7f6fd6555d38 CFUNC
0x7f6fd6555d00 TOP /home/aaron/git/ruby/bootstraptest/test_insns.rb error!!
0x7f6fd6555cc8 CFUNC
0x7f6fd6555c90 BLOCK /home/aaron/git/ruby/bootstraptest/test_insns.rb block in <top (required)>
0x7f6fd6555c58 METHOD ./bootstraptest/runner.rb assert_equal
0x7f6fd6555c20 METHOD ./bootstraptest/runner.rb assert_check
0x7f6fd6555be8 METHOD ./bootstraptest/runner.rb show_progress
0x7f6fd6555bb0 METHOD ./bootstraptest/runner.rb with_stderr
0x7f6fd6555b78 BLOCK ./bootstraptest/runner.rb block in show_progress
0x7f6fd6555b40 BLOCK ./bootstraptest/runner.rb block in assert_check
0x7f6fd6555b08 METHOD ./bootstraptest/runner.rb get_result_string
0x7f6fd6555ad0 METHOD ./bootstraptest/runner.rb make_srcfile
0x7f6fd6555a98 CFUNC
0x7f6fd6555a60 BLOCK ./bootstraptest/runner.rb block in make_srcfile
```
Getting the main execution context is difficult (it is stored in a
thread local) so for now you must supply an ec and this will make a
backtrace
This fixes the lldb disassembler script so that it doesn't need a live
process when disassembling rb_iseq_t. I also added the PC to the output
so you can tell what the VM is executing when it crashed.
For example:
```
(lldb) rbdisasm ec->cfp->iseq
PC IDX insn_name(operands)
0x56039f0a1720 0000 nop
0x56039f0a1728 0001 getlocal_WC_1( 5 )
0x56039f0a1738 0003 branchunless( 7 )
0x56039f0a1748 0005 getlocal_WC_0( 3 )
0x56039f0a1758 0007 putstring( (VALUE)0x56039f0c7eb8 )
0x56039f0a1768 0009 opt_send_without_block( (struct rb_call_data *)0x56039f09f140 )
0x56039f0a1778 0011 pop
0x56039f0a1780 0012 getglobal( ID: 0x7fd7 )
0x56039f0a1790 0014 branchunless( 7 )
0x56039f0a17a0 0016 getlocal_WC_0( 3 )
0x56039f0a17b0 0018 putstring( (VALUE)0x56039f0c7e90 )
0x56039f0a17c0 0020 opt_send_without_block( (struct rb_call_data *)0x56039f09f150 )
0x56039f0a17d0 0022 pop
0x56039f0a17d8 0023 getlocal_WC_0( 3 )
0x56039f0a17e8 0025 putobject( (VALUE)0x56039f0c7e68 )
0x56039f0a17f8 0027 getlocal_WC_1( 6 )
0x56039f0a1808 0029 dup
0x56039f0a1810 0030 checktype( 5 )
0x56039f0a1820 0032 branchif( 4 )
0x56039f0a1830 0034 dup
0x56039f0a1838 0035 opt_send_without_block( (struct rb_call_data *)0x56039f09f160 )
0x56039f0a1848 0037 tostring
0x56039f0a1850 0038 putobject( (VALUE)0x56039f0c7e40 )
0x56039f0a1860 0040 concatstrings( 3 )
0x56039f0a1870 0042 opt_send_without_block( (struct rb_call_data *)0x56039f09f170 )
0x56039f0a1880 0044 nop
0x56039f0a1888 0045 leave
(lldb) p ec->cfp->pc
(const VALUE *) $146 = 0x000056039f0a1848
```
Here we can see the VM is currently executing `opt_send_without_block`
(because the PC is one ahead of the current instruction)
I need to disassemble instruction sequences while debugging, so I wrote
this.
Usage is like this:
```
(lldb) p iseq
(rb_iseq_t *) $147 = 0x0000000101068400
(lldb) rbdisasm iseq
0000 putspecialobject( 3 )
0002 putnil
0003 defineclass( ID: 0x560b, (rb_iseq_t *)0x1010681d0, 2 )
0007 pop
0008 putspecialobject( 3 )
0010 putnil
0011 defineclass( ID: 0x56eb, (rb_iseq_t *)0x101063b58, 2 )
0015 leave
```
Also thanks a ton to @kivikakk helping me figure out how to navigate LLDB's Python 😆
Show the size of String.
To see the whole contents even after NUL char:
```
(lldb) rp str
(const char [5]) $1 = "x"
(lldb) memory read -s1 --format x --count `sizeof($1)` -- &$1 0x1010457a8: 0x78 0x00 0x61 0x61 0x61
```
This fixes the following in my environment:
misc/expand_tabs.rb:29:in `=~': invalid byte sequence in US-ASCII (ArgumentError)
This switches from =~ to start_with? as a regular expression is
not actually needed here.
This is implemented to close [Misc #16112] because all other options got
at least one objection, and nobody has objected to this solution.
This code is a little complicated for the purpose, but that's just
because it includes some historical code for auto-style.rb:
918a7c31b6/bin/auto-style.rb
Please feel free to improve this file as you like.
[Misc #16112]
* misc/ruby-style.el (ruby-style-c-mode): set ruby-style if the
remote repository is ruby.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66038 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
The outputs from HandleCommand are printed immediately before print
statements. Fix the order in `result` by capturing the outputs.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64902 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
As debug infos in shared libraries are not accessible until loaded,
retry loading the infos when needed.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64901 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Revert "Removed old elisp files. New upstream repository was moved https://github.com/ruby/elisp."
This reverts commit 7eedd308b8.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64743 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* misc/lldb_cruby.py (lldb_rp): evaluate without frames when no
process is running, and show error messages.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58974 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* misc/lldb_cruby.py (lldb_init): get constants from
ruby_dummy_gdb_enums in the target.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58943 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* misc/ruby-additional.el (ruby-insert-heredoc-code-block): make
code between "begin;" and "end;" unquoted. still quotable
before "begin;".
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56813 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* misc/ruby-additional.el (ruby-insert-heredoc-code-block): insert
a newline adjust the line number for "begin" line.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55313 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* misc/ruby-additional.el (ruby-decode-unicode): new function to
convert escaped Unicode to raw string.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53578 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* parse.y (parser_yylex): ANDDOT at the head of the line denote
line continuation from previous one to support fluent interface,
as well as single dot.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52548 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* misc/ruby-electric.el: Import version 2.2.1 from
https://github.com/knu/ruby-electric.el. Improve compatibility
with and optimize for Emacs 24.4.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49365 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* misc/ruby-additional.el (ruby-encode-unicode): change key
binding to get rid of conflict with uncomment-region.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46995 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* misc/ruby-additional.el (ruby-encode-unicode): use marker
instead of offset to track insertion.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46994 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* ruby-electric-delete-backward-char: Enable support for number
prefix.
* ruby-electric-curlies: Fix electric operation after an open
curly.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44261 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* misc/ruby-mode.el (ruby-brace-to-do-end): split single line block.
* misc/ruby-mode.el (ruby-do-end-to-brace): shrink single line block
to one line.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44033 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* misc/ruby-additional.el (ruby-brace-to-do-end)
(ruby-do-end-to-brace, ruby-toggle-block): Remove functions that
are already in the latest released version of Emacs (24.3).
[Bug #7565]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43475 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
https://github.com/knu/ruby-electric.el.
* Hitting the newline-and-indent key within a comment fires
comment-indent-new-line.
* Introduce a new feature
`ruby-electric-autoindent-on-closing-char`.
* Fix fallback behavior of ruby-electric-space/return that
caused error with auto-complete.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43448 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* misc/ruby-electric.el: Import ruby-electric.el 2.0.1 which fixes
a bug and a flaw with auto-end introduced in the revamp.
* ruby-forward-sexp is inappropriate here because it moves the
cursor past the keyword.
* Fix a reversed looking-back check in
ruby-electric--block-beg-keyword-at-point-p.
* Do not add end again if space or return is hit repeatedly
after a block beginning keyword.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43254 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* misc/ruby-electric.el: Import ruby-electric.el 2.0 from
https://github.com/knu/ruby-electric.el which integrates changes
from another fork by @qoobaa.
* Allow ruby-electric-mode to be disabled by introducing a
dedicated key map. Electric key bindings are now defined in
ruby-electric-mode-map instead of overwriting ruby-mode-map.
* Add ruby-electric-mode-hook.
* Use a remap in binding ruby-electric-delete-backward-char.
* Totally revamp electric keywords and then introduce electric
return. Modifier keywords are now properly detected making
use of ruby-mode's indentation level calculator, and
* block-mid keywords (then, else, elsif, when, rescue and
ensure) also become electric with automatic reindentation.
* Add standarized comments for ELPA integration.
* Fix interaction with smartparens-mode by disabling its end
keyword completion, since ruby-electric has become more clever
at it.
* The custom variable `ruby-electric-keywords` is changed to
`ruby-electric-keywords-alist`, allowing user to fine-grained
configuration.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43251 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
(returning 0 at BOF/EOF) instead of char-before/char-after
(returning nil at BOF/EOF) to avoid error from char-syntax when
at BOF/EOF.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43189 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
else clause to unbreak with `cp932`, etc.
* misc/ruby-mode.el (ruby-mode-set-encoding): Ditto.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43188 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
`default-buffer-file-coding-system` if the :prefer-utf-8
property is not available.
* misc/ruby-mode.el (ruby-mode-set-encoding): Ditto.
* misc/ruby-additional.el (ruby-encoding-map): Override the
default value.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43187 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* misc/ruby-additional.el (ruby-mode-set-encoding): Add support
for `prefer-utf-8` which was introduced in Emacs trunk.
* misc/ruby-additional.el (ruby-encoding-map): Add a mapping from
`japanese-cp932` to `cp932` to fix the problem where saving a
source file written in Shift_JIS twice would end up having
`coding: japanese-cp932` which Ruby could not recognize.
* misc/ruby-additional.el (ruby-mode-set-encoding): Add support
for encodings mapped to nil in `ruby-encoding-map`.
* misc/ruby-additional.el (ruby-encoding-map): Map `us-ascii` and
`utf-8` to nil by default, meaning they need not be explicitly
declared in magic comment.
* misc/ruby-additional.el (ruby-encoding-map): Add type
declaration for better customize UI.
* misc/ruby-mode.el: Ditto for the above.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43186 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* misc/ruby-electric.el (ruby-electric-space-can-be-expanded-p):
Return nil to avoid "end" insertion when in smartparens-mode
that is configured to insert "end" for the same keyword.
* misc/ruby-electric.el (ruby-electric-keywords): New custom
variable to replace `ruby-electric-simple-keywords-re` with.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43183 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
(returning 0 at BOF/EOF) instead of char-before/char-after
(returning nil at BOF/EOF) to avoid error from char-syntax when
at BOF/EOF.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43182 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
support for smartparen-mode.
* misc/ruby-electric.el (ruby-electric-cua-replace-region-maybe)
(ruby-electric-cua-delete-region-maybe): New functions that
combine `ruby-electric-cua-*-region` with
`ruby-electric-cua-*-region-p`, using a slightly better way to
detect if it is in cua-mode.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43053 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
`self-insert-command` which fires `post-self-insert-hook` and
`post-command-hook`, to make the ruby-electric commands work
nicely with those minor modes that make use of them to do
similar input assistance, such as electric-pair-mode,
autopair-mode and smartparens-mode.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43051 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
delete-char instead of delete-backward-char, which is an
interactive function.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@40823 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
backquotes electric as well. It was listed in
ruby-electric-expand-delimiters-list but not activated.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@40818 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Introduce electric DEL that deletes what the previous electric
command has input.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@40817 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
a closing quote when the quote typed does not start a string, as
in $', ?\' or ?\".
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@40797 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* misc/ruby-electric.el (ruby-electric-closing-char): New
interactive function bound to closing characters. Typing one of
those closing characters right after the matching counterpart
cancels the effect of automatic closing. For example, typing
"{" followed by "}" simply makes "{}" instead of "{ } }".
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@40307 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* misc/ruby-electric.el (ruby-electric-hash): New electric
function that expands a hash sign inside a string or regexp to
"#{}".
* misc/ruby-electric.el (ruby-electric-curlies): Do not insert
spaces inside when the curly brace is a delimiter of %r, %w,
etc.
* misc/ruby-electric.el (ruby-electric-curlies): Insert another
space before a closing curly brace when
ruby-electric-newline-before-closing-bracket is nil.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@40166 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* misc/ruby-electric.el (ruby-electric-curlies)
(ruby-electric-matching-char, ruby-electric-bar): Avoid electric
insertion when there is a prefix argument.
* misc/ruby-electric.el (ruby-electric-insert)
(ruby-electric-cua-replace-region-p)
(ruby-electric-cua-replace-region): Avoid electric insertion and
fall back when cua-mode is enabled and a region is active.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@39419 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* misc/ruby-electric.el (ruby-electric-curlies): Fix the bug where
an open curly is always replaced with a hash sign.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38895 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* misc/inf-ruby.el (inferior-ruby-mode): fix the
compilation-shell-minor-mode configuration. a patch by
j2petkov (Jean-Christophe Petkovich) in [ruby-core:46518].
[Bug #6742]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38107 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* misc/ruby-additional.el (ruby-mode-set-encoding): now encoding needs
to be set always explicitly actually. [Feature #6679]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37533 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* misc/ruby-electric.el using variable `last-command-event' instead of
obsolete `last-command-char', so that work with Emacs trunk.
a patch by Victor Deryagin <vderyagin AT gmail.com>.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37297 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
to rdoc-mode.
* misc/rdoc-mode.el (rdoc-mode): Fix regexp patterns containing
"\s " where CR/LF is not supposed to match.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34355 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
do not apply deep-indent inside parens at the beginning of
expressions.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31061 b2dd03c8-39d4-4d8f-98ff-823fe69b080e