Граф коммитов

40270 Коммитов

Автор SHA1 Сообщение Дата
normal 3114f4a2ca parse.y (struct parser_params): pack to 4 cache lines on x86-64
This reduces the struct from 256 (from 288) bytes on my x86-64
system, allowing the struct to fit cleanly into 4 cache lines
(if a malloc implementation allows it).

* parse.y (struct parser_params): pack: 88 => 256 bytes on 64-bit
  [ruby-core:70034] [Feature #11371]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51302 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-20 03:21:58 +00:00
nobu d8d9148506 thread.c: reuse tag
* thread.c (rb_thread_terminate_all): reuse the tag pushed before
  a loop, instead of pushing/popping same tag repeatedly.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51301 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-20 00:11:40 +00:00
nobu 1b8ff4f799 ruby_vm_throw_flags
* vm_core.h (ruby_vm_throw_flags): constants for throw.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51300 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-20 00:08:23 +00:00
svn 46b70c8da5 * 2015-07-20
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51299 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-19 15:21:19 +00:00
nobu 747129ae53 thread.c: fix timeout limit
* thread.c (ppoll): fix the limit, timeout argument of poll(2) is
  an int but not a time_t.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51298 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-19 15:21:00 +00:00
nobu 28c389c676 pty.c: fix example typo [ci skip]
* ext/pty/pty.c: [DOC] fix example typo, an old name at move from
  PTY.open.  [Fix GH-972]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51297 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-19 05:29:21 +00:00
svn ce6ee740b6 * 2015-07-19
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51296 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-19 00:26:04 +00:00
nobu 34e61ca92b eval.c: check tag value
* eval.c (rb_jump_tag): paranoiac check of tag value.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51295 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-19 00:25:45 +00:00
nobu f10eb2c363 load.c: use TAG_RETURN
* load.c (rb_require_internal): use TAG_RETURN not a magic number.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51294 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-18 14:47:11 +00:00
nobu 22f75c300d thread.c: gather common statements
* thread.c (vm_check_ints_blocking): gather common statements at
  the end, and prefer LIKELY for Visual C optimization.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51293 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-18 12:29:21 +00:00
nobu 1998039ea4 load.c: reduce EXEC_TAGs
* load.c (rb_load_internal0): do not raise any exceptions but
  return the result tag state.
* load.c (rb_load_protect): reduce nested EXEC_TAGs.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51292 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-18 11:44:59 +00:00
nobu e9e08a5b10 gc.c: reduce EXEC_TAGs
* gc.c (run_finalizer): set and restore safe level here to reduce
  nested EXEC_TAGs.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51291 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-18 10:52:19 +00:00
nobu ca5cfbe1ab eval.c: extra conversion of exit status
* eval.c (ruby_cleanup): error_handle() returns exit status to the
  system, not internal error state, do not convert the exit status
  again.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51290 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-18 09:45:25 +00:00
normal 3661dae19c test/ruby/test_process.rb: test thread+sigs work after failed exec
Preparation for possible upcoming changes to timer thread.  We need
to ensure signal handling and thread scheduling works after an exec
failure.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51289 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-18 01:29:25 +00:00
normal 1d9cf30d39 test/socket/test_nonblock: use smaller buffer for sendmsg
OpenBSD's limit is less than 128.

* test/socket/test_nonblock: use smaller buffer for sendmsg
  Patch-by: Jeremy Evans <code@jeremyevans.net>
  [ruby-core:70016] [Bug #11364]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51288 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-17 22:21:37 +00:00
normal a3dca0f594 signal.c (trap_handler): cleanup to use RSTRING_GETMEM + memcmp
strncmp is unnecessary since the switch/case statement already
checks length of the string; so use memcmp.

This makes for a small reduction in binary size on 32-bit x86:

   text	   data	    bss	    dec	    hex	filename
2847473	  12360	  30632	2890465	 2c1ae1	ruby.before
2847313	  12328	  30632	2890273	 2c1a21	ruby.after

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51287 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-17 22:08:49 +00:00
svn f2feaafe0c * 2015-07-18
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51286 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-17 18:03:05 +00:00
normal d4454d0123 io.c (argf_read_nonblock): support `exception: false'
This is a preparation for [ruby-core:69892]
("io.c: avoid kwarg parsing in C API")
since I noticed ARGF.read_nonblock did not properly catch up to
the `exception: false' change.

* io.c (argf_read_nonblock): support `exception: false'
  (io_nonblock_eof): new function
  (io_read_nonblock): use io_nonblock_eof
  (argf_getpartial): accept kwargs hash for `exception: false'
* test/ruby/test_argf.rb (test_read_nonblock): new test
  [ruby-core:70000] [Feature #11358]
* NEWS: add item for ARGF.read_nonblock

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51285 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-17 18:02:53 +00:00
nobu ab742d9d2e vm_eval.c: safe level 4
* vm_eval.c (rb_eval_cmd): $SAFE=4 has been deprecated.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51284 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-17 14:51:34 +00:00
nobu 67f5f9477c compile.c: use ruby_tag_type
* compile.c (iseq_compile_each): use enum ruby_tag_type names.
* vm_core.h (ruby_tag_type): move from eval_intern.h for compiling
  break/next/redo/return.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51283 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-17 13:18:12 +00:00
nobu 2731b91d80 compile.c: remove unused big
* compile.c (iseq_compile_each): remove unused big flag, `while`
  loop always leaves a result on the stack.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51282 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-17 13:15:29 +00:00
nobu df62161d7e RUBY_VM_CHECK_INTS: eval the argument only once
* vm_core.h (RUBY_VM_CHECK_INTS): evaluate the argument only once
  to get rid of inadvertent side effects.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51281 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-17 07:28:53 +00:00
nobu ce7fdcf0f8 RUBY_VM_CHECK_INTS_BLOCKING: move to thread.c
* thread.c (RUBY_VM_CHECK_INTS_BLOCKING): move from vm_core.h for
  the static function rb_threadptr_pending_interrupt_empty_p.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51280 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-17 07:28:36 +00:00
nobu 01962439e9 EXEC_EVENT_HOOK_ORIG: eval the arguments only once
* vm_core.h (EXEC_EVENT_HOOK_ORIG): evaluate each arguments only
  once to get rid of inadvertent side effects.  fix use of `th`
  variable in the second `if` statement.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51279 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-17 07:28:22 +00:00
nobu 137d08de4b encoding.h: ENC_CODERANGE_CLEAN_P
* include/ruby/encoding.h (ENC_CODERANGE_CLEAN_P): predicate that
  tells if the coderange is clean, that is 7bit or valid, and no
  needs to scrub.
* re.c (rb_reg_expr_str): use ENC_CODERANGE_CLEAN_P.
* string.c (enc_strlen, rb_enc_cr_str_buf_cat, rb_str_scrub):
  ditto.
* string.c (rb_str_enumerate_chars): ditto, and suppress a warning
  by gcc6.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51278 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-17 06:39:29 +00:00
nobu 13b3abb227 test_range.rb: add Range#new test
* test/ruby/test_range.rb (test_first_last): Add test for
  `Range.new`.  [Fix GH-971]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51277 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-17 06:37:05 +00:00
nobu e2a87e8bc3 test_range.rb: add Range#last assertions
* test/ruby/test_range.rb (test_first_last): Add assertions to
  test of `Range#last` with exclude_end true case.  [Fix GH-970]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51276 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-17 06:36:42 +00:00
normal 3ee156c7a3 thread.c (rb_thread_alone): simplify
This function now also works in more places if ruby_current_thread
is unset.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51275 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-17 01:42:18 +00:00
normal 3e5c21f7cb remove unnecessary enumerator requires
* lib/rinda/tuplespace.rb: remove enumerator require
* test/pathname/test_pathname.rb: ditto

Related to https://bugs.ruby-lang.org/issues/10902
but not a complete fix.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51274 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-17 00:59:02 +00:00
normal 4fd2443580 avoid redundant GET_THREAD() calls
This reduces binary size slightly on my 32-bit system:

   text    data     bss     dec     hex filename
2847705   12360   30632 2890697  2c1bc9 ruby.orig
2847641   12360   30632 2890633  2c1b89 ruby

* iseq.c (rb_iseq_compile_with_option): reuse result of previous
  GET_THREAD() call
* thread.c (thread_create_core): ditto
  (rb_mutex_trylock): ditto
  (rb_mutex_lock): ditto
* process.c (rb_waitpid): avoid multiple eval from RUBY_VM_CHECK_INTS
* thread.c (rb_thread_check_ints): ditto

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51273 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-16 20:42:43 +00:00
svn 5d59a808ce * 2015-07-17
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51272 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-16 20:26:48 +00:00
normal 08f234445c thread.c (mutex_alloc): remove needless volatile
Allocation functions do not do anything non-obvious to the
compiler, so there's no reason for volatile here.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51271 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-16 20:26:32 +00:00
kazu 020ff711ce fix typos [ci skip]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51270 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-16 13:29:20 +00:00
ko1 c3e8cca950 * vm_core.h: constify rb_iseq_t::parent_iseq.
rb_iseq_t::local_iseq is not constant data because
  local_iseq::flip_cnt can be modified (commentted).
* compile.c: catch up this fix.
* iseq.c: ditto.
* vm_insnhelper.c: ditto.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51269 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-16 13:13:50 +00:00
ngoto f242e17f9b * process.c (redirect_dup2): when the new FD of dup2() coflicts
with one of the timer thread FDs, the internal FD is diverted.
  [Bug #11336] [ruby-core:69886] [Bug #11350] [ruby-core:69961]
    
* process.c (dup2_with_divert): new function for the above purpose.
   
* thread_pthread.c (rb_divert_reserved_fd): new function for
  diverting reserved FD. If the given FD is the same as one of the
  reserved FDs, the reserved FD number is internally changed.
  It returns -1 when error. Otherwise, returns 0. It also returns
  0 if there is no need to change reserved FD number.

* thread_win32.c (rb_divert_reserved_fd): always returns 0 because
  of no reserved FDs.

* internal.h (rb_divert_reserved_fd): prototype declaration.
  It is Ruby internal use only.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51268 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-16 13:06:13 +00:00
ko1 7b08338ab1 * iseq.c (rb_iseq_disasm): rename rb_iseq_t *iseqdat to iseq
and VALUE *iseq to code.
* iseq.c (rb_iseq_disasm_insn): ditto.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51267 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-16 12:50:25 +00:00
nobu ffd76ff3b5 string.c: remove redundant calls
* string.c (rb_str_enumerate_lines): do not check if a block is
  given twice.  RETURN_ENUMERATOR includes rb_block_given_p()
  check which is redundant here.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51266 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-16 12:29:23 +00:00
ngoto db2fe4b8ef Revert r51209 because signals after stopping timer thread before
entering exec(2) system call may be lost.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51265 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-16 12:08:56 +00:00
nobu b3e9fce036 vm.c: fix mark with rewinding cfp
* vm.c (REWIND_CFP): keep the arguments region inside the valid
  value stack.  [ruby-core:69969] [Bug #11352]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51264 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-16 05:34:27 +00:00
nobu aab3599dae vm.c: fix mark with rewinding cfp
* vm.c (m_core_hash_merge_ptr): copy the arguments to the machine
  stack before rewinding the control frame pointer and leaving the
  arguments outside valid region of the value stack.
  [ruby-core:69969] [Bug #11352]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51263 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-16 05:18:40 +00:00
normal e981a61c53 process.c (close_unless_reserved): declare type of `fd' arg
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51262 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-16 02:39:30 +00:00
normal 3fc5459977 load.c: use fstring for loaded features and expanded load path
Loaded features is an obvious candidate for fstring since
feature paths of Ruby sources are included in iseq locations,
and iseq locations are in the fstring table anyways.

Deduplicating expanded load path can reuse old objects, since since
repeated expansions may recycle before old expanded paths are GC-ed
away.

* load.c (rb_construct_expanded_load_path): fstring expanded path
  (get_loaded_features_index): fstring feature path
  (rb_provide_feature): ditto
  [ruby-core:69871] [Feature #11331]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51261 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-16 00:03:40 +00:00
normal 5522e010e5 thread.c (thread_initialize): avoid RSTRING_PTR and NUMT2INT
Favor passing VALUE args as-is and using PRisVALUE in format strings
to prevent premature GC.  In this case, we are not fixing any real
bug because location path has other references, but this makes code
easier-to-review.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51260 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-15 18:11:05 +00:00
ngoto 66a36e9b13 * test/ruby/test_process.rb (test_exec_close_reserved_fd): test for
[Bug #11353]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51259 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-15 16:39:25 +00:00
svn 80025e956b * 2015-07-16
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51258 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-15 15:39:50 +00:00
kazu 19c41354c5 * .gitignore: ignore version.i. [ci skip]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51257 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-15 15:39:34 +00:00
ngoto 7a1413a768 * test/ruby/test_process.rb (test_deadlock_by_signal_at_forking):
use RUBY (= EnvUtil.rubybin)


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51256 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-15 14:44:06 +00:00
ngoto d1bce9ec55 * process.c (redirect_close, parent_redirect_close): should not close
reserved FD. It should be closed in the exec system call due to the
  O_CLOEXEC or FD_CLOEXEC flag. [Bug #11353] [ruby-core:69977]
    
* process.c (close_unless_reserved): new function to close FD unless
  it is reserved for internal communication.
      
* thread_pthread.c (rb_reserved_fd_p): should check owner_process pid
  to avoid false positive in forked child process.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51255 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-15 14:26:22 +00:00
kazu ae406d9e09 fix typos [ci skip]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51254 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-15 13:27:58 +00:00
normal dab4d077d1 remove redundant NULL checks after RUBY_VM_IFUNC_P
* proc.c (proc_mark): remove redundant check
* vm.c (env_mark): ditto

This doesn't change object code size, but the unstripped
executable is smaller and the code less confusing.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51253 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-15 09:32:08 +00:00