summaryrefslogtreecommitdiff
path: root/eval.c
Commit message (Collapse)AuthorAgeFilesLines
* [Bug #19016] Handle syntax error in main script like other errorsNobuyoshi Nakada2022-11-201-1/+2
| | | | | So that `SyntaxError#detailed_message` will be used also in the case exiting by such syntax error.
* Use `enum ruby_tag_type` over `int`Nobuyoshi Nakada2022-11-201-4/+4
|
* Using UNDEF_P macroS-H-GAMELINKS2022-11-161-8/+8
|
* MJIT: Stop using the VM barrier for jit_contTakashi Kokubun2022-10-191-1/+2
| | | | | | | | | | | | | | | | This solves multiple problems. First, RB_VM_LOCK_ENTER/LEAVE is a barrier. We could at least use the _NO_BARRIER variant. Second, this doesn't need to interfere with GC or other GVL users when multiple Ractors are used. This needs to be used in very few places, so the benefit of fine-grained locking would outweigh its small maintenance cost. Third, it fixes a crash for YJIT. Because YJIT is never disabled until a process exits unlike MJIT that finishes earlier, we could call jit_cont_free when EC no longer exists, which crashes RB_VM_LOCK_ENTER.
* Make mjit_cont sharable with YJIT (#6556)Takashi Kokubun2022-10-171-1/+3
| | | | | | | * Make mjit_cont sharable with YJIT * Update dependencies * Update YJIT binding
* Support using at toplevel in wrapped scriptChris Salzberg2022-09-241-2/+4
| | | | | | | Allow refinements to be used at the toplevel within a script that is loaded under a module. Fixes [Bug #18960]
* Expand tabs [ci skip]Takashi Kokubun2022-07-211-350/+350
| | | | [Misc #18891]
* Remove unnecessary module flag, add module assertions to other module flagsJemma Issroff2022-05-231-8/+5
|
* Add ISEQ_BODY macroPeter Zhu2022-03-241-2/+2
| | | | | | Use ISEQ_BODY macro to get the rb_iseq_constant_body of the ISeq. Using this macro will make it easier for us to change the allocation strategy of rb_iseq_constant_body when using Variable Width Allocation.
* A positional Hash is not keyword arguments [Bug #18632]Nobuyoshi Nakada2022-03-181-4/+5
|
* Remove Refinement#{extend_object,append_features,prepend_features}Jeremy Evans2022-01-051-3/+18
| | | | | | | Also make include, prepend, and extend raise a TypeError if one of the modules is a refinement. Implements [Feature #18270]
* Add Module#refinements and Refinement#refined_class [Feature #12737]Shugo Maeda2022-01-051-1/+43
|
* Add Module.used_refinementsShugo Maeda2022-01-051-0/+53
|
* Remove Refinement#include and Refinement#prependNobuyoshi Nakada2021-12-261-2/+2
|
* Add docs for Refinement classzverok2021-12-241-6/+1
|
* Clarify the error message when trying to import C methods [Bug #18385]Shugo Maeda2021-12-061-1/+1
|
* Deprecate include/prepend in refinements and add Refinement#import_methods ↵Shugo Maeda2021-10-211-1/+67
| | | | | | | | | | instead Refinement#import_methods imports methods from modules. Unlike Module#include, it copies methods and adds them into the refinement, so the refinement is activated in the imported methods. [Bug #17429] [ruby-core:101639]
* Consider modified modules initialized [Bug #18185]Nobuyoshi Nakada2021-09-241-0/+3
|
* include/ruby/internal/intern/eval.h: add doxygen卜部昌平2021-09-101-65/+0
| | | | Must not be a bad idea to improve documents. [ci skip]
* include/ruby/internal/intern/proc.h: add doxygen卜部昌平2021-09-101-17/+0
| | | | Must not be a bad idea to improve documents. [ci skip]
* include/ruby/internal/error.h: add doxygen卜部昌平2021-09-101-14/+0
| | | | Must not be a bad idea to improve documents.
* include/ruby/internal/interpreter.h: add doxygen卜部昌平2021-09-101-55/+0
| | | | | | | | Must not be a bad idea to improve documents. [ci skip] In fact many functions declared in the header file are already documented more or less. They were just copy & pasted, with applying some style updates.
* include/ruby/internal/iterator.h: add doxygen卜部昌平2021-09-101-64/+0
| | | | Must not be a bad idea to improve documents. [ci skip]
* include/ruby/internal/module.h: add doxygen卜部昌平2021-09-101-6/+0
| | | | | | | | Must not be a bad idea to improve documents. [ci skip] In fact many functions declared in the header file are already documented more or less. They were just copy & pasted, with applying some style updates.
* Remove root_jmpbuf in rb_thread_structNobuyoshi Nakada2021-08-101-3/+0
| | | | It has not been used since 1b82c877dfa72e8505ded149fd0e3ba956529d3f.
* Suppress a clobbered warningNobuyoshi Nakada2021-08-091-4/+3
|
* Suppress warnings in C++2aNobuyoshi Nakada2021-08-091-3/+4
| | | | | | | | | * bitwise operation between different enumeration types ('ruby_value_type' and 'ruby_fl_type') is deprecated [-Wdeprecated-enum-enum-conversion] * volatile-qualified parameter type 'volatile int' is deprecated [-Wdeprecated-volatile]
* Replace copy coroutine with pthread implementation.Samuel Williams2021-07-011-5/+0
|
* Refactor rb_obj_call_init and rb_obj_call_init_kw (#4351)S.H2021-04-041-2/+1
|
* Add rb_exc_exception functionS.H2021-03-271-8/+13
| | | | | `rb_exc_raise` and `rb_fatal` func have similar code(in `eval.c`). I think that better cut out and replace these code like `rb_exc_exception` function.
* Make a few functions staticAlan Wu2021-03-181-7/+4
|
* Expose scheduler as public interface & bug fixes. (#3945)Samuel Williams2021-02-091-4/+4
| | | | | | | | | * Rename `rb_scheduler` to `rb_fiber_scheduler`. * Use public interface if available. * Use `rb_check_funcall` where possible. * Don't use `unblock` unless the fiber was non-blocking.
* Copy va_list of exception classesNobuyoshi Nakada2021-02-091-1/+5
| | | | | The list is reused when an exception raised again after retrying in the rescue procedure.
* Also `eclass` loop can raise in `rb_obj_is_kind_of`Nobuyoshi Nakada2021-02-091-1/+1
|
* Assign TAG_NONE to ruby_tag_type instead of 0Nobuyoshi Nakada2021-02-091-2/+2
|
* [DOC] Fix grammar: "is same as" -> "is the same as"Marcus Stollsteimer2021-01-051-1/+1
|
* Remove obsoleted internal/mjit.h inclusionTakashi Kokubun2020-11-221-1/+0
| | | | :bow:
* fix public interfaceKoichi Sasada2020-11-181-1/+1
| | | | | | | | | | | | | | | | | | To make some kind of Ractor related extensions, some functions should be exposed. * include/ruby/thread_native.h * rb_native_mutex_* * rb_native_cond_* * include/ruby/ractor.h * RB_OBJ_SHAREABLE_P(obj) * rb_ractor_shareable_p(obj) * rb_ractor_std*() * rb_cRactor and rm ractor_pub.h and rename srcdir/ractor.h to srcdir/ractor_core.h (to avoid conflict with include/ruby/ractor.h)
* Rename to `Fiber#set_scheduler`.Samuel Williams2020-11-071-2/+2
|
* Some global variables can be accessed from ractorsKoichi Sasada2020-10-201-0/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Some global variables should be used from non-main Ractors. [Bug #17268] ```ruby # ractor-local (derived from created ractor): debug '$DEBUG' => $DEBUG, '$-d' => $-d, # ractor-local (derived from created ractor): verbose '$VERBOSE' => $VERBOSE, '$-w' => $-w, '$-W' => $-W, '$-v' => $-v, # process-local (readonly): other commandline parameters '$-p' => $-p, '$-l' => $-l, '$-a' => $-a, # process-local (readonly): getpid '$$' => $$, # thread local: process result '$?' => $?, # scope local: match '$~' => $~.inspect, '$&' => $&, '$`' => $`, '$\'' => $', '$+' => $+, '$1' => $1, # scope local: last line '$_' => $_, # scope local: last backtrace '$@' => $@, '$!' => $!, # ractor local: stdin, out, err '$stdin' => $stdin.inspect, '$stdout' => $stdout.inspect, '$stderr' => $stderr.inspect, ```
* Rework `rb_ec_scheduler_finalize` to ensure exceptions are printed.Samuel Williams2020-10-011-11/+16
|
* Fix order of operations during `rb_ec_finalize`.Samuel Williams2020-09-301-4/+9
|
* When setting current thread scheduler to nil, invoke `#close`.Samuel Williams2020-09-211-0/+11
|
* Introduce Ractor mechanism for parallel executionKoichi Sasada2020-09-031-1/+2
| | | | | | | | | | | | | | | | This commit introduces Ractor mechanism to run Ruby program in parallel. See doc/ractor.md for more details about Ractor. See ticket [Feature #17100] to see the implementation details and discussions. [Feature #17100] This commit does not complete the implementation. You can find many bugs on using Ractor. Also the specification will be changed so that this feature is experimental. You will see a warning when you make the first Ractor with `Ractor.new`. I hope this feature can help programmers from thread-safety issues.
* Remove write barrier exemption for T_ICLASSAlan Wu2020-08-171-2/+1
| | | | | | | | | | | | | | | | | | | Before this commit, iclasses were "shady", or not protected by write barriers. Because of that, the GC needs to spend more time marking these objects than otherwise. Applications that make heavy use of modules should see reduction in GC time as they have a significant number of live iclasses on the heap. - Put logic for iclass method table ownership into a function - Remove calls to WB_UNPROTECT and insert write barriers for iclasses This commit relies on the following invariant: for any non oirigin iclass `I`, `RCLASS_M_TBL(I) == RCLASS_M_TBL(RBasic(I)->klass)`. This invariant did not hold prior to 98286e9 for classes and modules that have prepended modules. [Feature #16984]
* Lazily insert origins on prepend to save memoryAlan Wu2020-07-221-3/+0
| | | | | | | | | | | | | | | | 98286e9850936e27e8ae5e4f20858cc9c13d2dde made it so that `Module#include` allocates an origin iclass on each use. Since `include` is widely used, the extra allocation can contribute significantly to memory usage. Instead of always allocating in anticipation of prepend, this change takes a different approach. The new setup inserts a origin iclass into the super chains of all the children of the module when prepend happens for the first time. rb_ensure_origin is made static again since now that adding an origin now means walking over all usages, we want to limit the number of places where we do it.
* rb_class_modify_check: add UNREACHABLE卜部昌平2020-06-291-0/+1
| | | | | | | | (I was not aware of this because I use clang, but) it seems gcc cannot detect reachablility of this point. It renders an unused variable warning, which is a false positive. Let us suppress the compiler. https://github.com/ruby/ruby/runs/816997191#step:9:62
* make_exception: early return卜部昌平2020-06-291-1/+1
| | | | | The rb_exc_new3() result is already ready to be returned. No need to fall through the switch.
* make_exception: do not goto into a branch卜部昌平2020-06-291-20/+13
| | | | | I'm not necessarily against every goto in general, but jumping into a branch is definitely a bad idea. Better refactor.
* setup_exception: do not goto into a branch卜部昌平2020-06-291-4/+7
| | | | | I'm not necessarily against every goto in general, but jumping into a branch is definitely a bad idea. Better refactor.