aboutsummaryrefslogtreecommitdiffstats
path: root/compile.c
Commit message (Collapse)AuthorAgeFilesLines
* Interpolated strings are no longer frozen with frozen-string-literal: trueBenoit Daloze2020-09-151-59/+1
| | | | | * Remove freezestring instruction since this was the only usage for it. * [Feature #17104]
* Introduce Ractor mechanism for parallel executionKoichi Sasada2020-09-031-1/+16
| | | | | | | | | | | | | | | | 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.
* procnames-start-lines [ci skip]Nobuyoshi Nakada2020-08-171-3/+6
|
* Revisit "Refactor to reduce "swap" instruction of pattern matching"Nobuyoshi Nakada2020-08-171-3/+3
| | | | Just moved "case base" after allocating cache space.
* Revert "Refactor to reduce "swap" instruction of pattern matching"Kazuhiro NISHIYAMA2020-08-171-1/+2
| | | | | | | | | | | | | | | | | | | | | This reverts commit 3a4be429b50062122d1616256de38649464d3146. To fix following warning: ``` compiling ../compile.c ../compile.c:6336:20: warning: variable 'line' is uninitialized when used here [-Wuninitialized] ADD_INSN(head, line, putnil); /* allocate stack for cached #deconstruct value */ ^~~~ ../compile.c:220:57: note: expanded from macro 'ADD_INSN' ADD_ELEM((seq), (LINK_ELEMENT *) new_insn_body(iseq, (line), BIN(insn), 0)) ^~~~ ../compile.c:6327:13: note: initialize the variable 'line' to silence this warning int line; ^ = 0 1 warning generated. ```
* Refactor to reduce "swap" instruction of pattern matchingwanabe2020-08-161-2/+1
|
* Adjust sp for `case ... in a: 0 ... end`wanabe2020-08-161-0/+2
|
* Adjust sp for `case ... in *, a, * end`wanabe2020-08-161-0/+3
|
* Adjust sp for `case ... in *v end`/`case ... in v1, v2 end`wanabe2020-08-161-0/+3
|
* Adjust sp for `case ... in v1 ... in v2 end`wanabe2020-08-161-0/+3
|
* Adjust sp for `case ... in v1, v2 ... end`wanabe2020-08-161-0/+2
|
* Adjust sp for `case ... in pat => var ... end`wanabe2020-08-161-0/+1
|
* Adjust sp for `case ... in pat1 | pat2 ... end`wanabe2020-08-161-0/+1
|
* Adjust sp for pattern matching implicit/explicit "else"wanabe2020-08-161-0/+8
|
* Warn sp overwriting on compile timewanabe2020-08-161-1/+20
|
* Show hidden object and TS_BUILTIN for halfbaked insn datawanabe2020-08-161-2/+6
|
* Use ID instead of GENTRY for gvars. (#3278)Koichi Sasada2020-07-031-46/+4
| | | | | | | | | | | | Use ID instead of GENTRY for gvars. Global variables are compiled into GENTRY (a pointer to struct rb_global_entry). This patch replace this GENTRY to ID and make the code simple. We need to search GENTRY from ID every time (st_lookup), so additional overhead will be introduced. However, the performance of accessing global variables is not important now a day and this simplicity helps Ractor development.
* compile_redo: fix wrong condition卜部昌平2020-06-291-1/+1
|
* ibf_dump_object_object: do not goto into a branch卜部昌平2020-06-291-8/+4
| | | | | I'm not necessarily against every goto in general, but jumping into a branch is definitely a bad idea. Better refactor.
* compile_call: do not goto into a branch卜部昌平2020-06-291-10/+9
| | | | | I'm not necessarily against every goto in general, but jumping into a branch is definitely a bad idea. Better refactor.
* compile_redo: do not goto into a branch卜部昌平2020-06-291-7/+3
| | | | | I'm not necessarily against every goto in general, but jumping into a branch is definitely a bad idea. Better refactor.
* compile_next: do not goto into a branch卜部昌平2020-06-291-6/+2
| | | | | I'm not necessarily against every goto in general, but jumping into a branch is definitely a bad idea. Better refactor.
* compile_break: do not goto into a branch卜部昌平2020-06-291-19/+15
| | | | | I'm not necessarily against every goto in general, but jumping into a branch is definitely a bad idea. Better refactor.
* compile_branch_condition: do not goto into a branch卜部昌平2020-06-291-10/+10
| | | | | I'm not necessarily against every goto in general, but jumping into a branch is definitely a bad idea. Better refactor.
* optimize_checktype: do not goto into a branch卜部昌平2020-06-291-2/+1
| | | | | I'm not necessarily against every goto in general, but jumping into a branch is definitely a bad idea. Better refactor.
* iseq_set_exception_table: do not goto into a branch卜部昌平2020-06-291-5/+2
| | | | | I'm not necessarily against every goto in general, but jumping into a branch is definitely a bad idea. Better refactor.
* Removed non-ASCII code to suppress warnings by localized compilersNobuyoshi Nakada2020-06-271-2/+2
|
* Cosmetic changeKazuki Tsujimoto2020-06-271-1/+2
|
* Add #deconstruct cache to find patternVladimir Dementyev2020-06-271-59/+65
|
* Optimize array pattern matching by caching #deconstruct valueVladimir Dementyev2020-06-271-16/+64
|
* Removed no longer used flagsNobuyoshi Nakada2020-06-271-2/+0
|
* Not to rewrite node while compilingNobuyoshi Nakada2020-06-271-9/+4
| | | | | | Moved this hack mark to an argument to `compile_hash`. > Bad Hack: temporarily mark hash node with flag so > compile_hash can compile call differently.
* Introduce Primitive.attr! to annotate 'inline' (#3242)Takashi Kokubun2020-06-201-0/+8
| | | [Feature #15589]
* compile.c: Improve branch coverage instrumentation [Bug #16967]Yusuke Endoh2020-06-201-23/+73
| | | | | | | | | | | | | | Formerly, branch coverage measurement counters are generated for each compilation traverse of the AST. However, ensure clause node is traversed twice; one is for normal-exit case (the resulted bytecode is embedded in its outer scope), and the other is for exceptional case (the resulted bytecode is used in catch table). Two branch coverage counters are generated for the two cases, but it is not desired. This changeset revamps the internal representation of branch coverage measurement. Branch coverage counters are generated only at the first visit of a branch node. Visiting the same node reuses the already-generated counter, so double counting is avoided.
* compile.c: pass NODE* instead of a quadruple of code locationYusuke Endoh2020-06-201-82/+37
|
* compile.c (branch_coverage_valid_p): Refactored outYusuke Endoh2020-06-201-8/+10
|
* compile.c: Use functions for building branch coverage instructionsYusuke Endoh2020-06-201-54/+65
| | | | instead of maros. Just refactoring.
* [Feature #16254] Allow `Primitive.func` styleNobuyoshi Nakada2020-06-191-3/+12
|
* [Feature #16254] Allow `__builtin.func` styleNobuyoshi Nakada2020-06-191-7/+18
|
* Dup splat array in certain cases where there is a block argumentJeremy Evans2020-06-181-1/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This makes: ```ruby args = [1, 2, -> {}]; foo(*args, &args.pop) ``` call `foo` with 1, 2, and the lambda, in addition to passing the lambda as a block. This is different from the previous behavior, which passed the lambda as a block but not as a regular argument, which goes against the expected left-to-right evaluation order. This is how Ruby already compiled arguments if using leading arguments, trailing arguments, or keywords in the same call. This works by disabling the optimization that skipped duplicating the array during the splat (splatarray instruction argument switches from false to true). In the above example, the splat call duplicates the array. I've tested and cases where a local variable or symbol are used do not duplicate the array, so I don't expect this to decrease the performance of most Ruby programs. However, programs such as: ```ruby foo(*args, &bar) ``` could see a decrease in performance, if `bar` is a method call and not a local variable. This is not a perfect solution, there are ways to get around this: ```ruby args = Struct.new(:a).new([:x, :y]) def args.to_a; a; end def args.to_proc; a.pop; ->{}; end foo(*args, &args) # calls foo with 1 argument (:x) # not 2 arguments (:x and :y) ``` A perfect solution would require completely disabling the optimization. Fixes [Bug #16504] Fixes [Bug #16500]
* Replaced accessors of `Struct` with `invokebuiltin`Nobuyoshi Nakada2020-06-171-9/+8
|
* Revert "Replaced accessors of `Struct` with `invokebuiltin`"Nobuyoshi Nakada2020-06-161-8/+9
| | | | | This reverts commit 19cabe8b09d92d033c244f32ff622b8e513375f1, which didn't support tool/lib/iseq_loader_checker.rb.
* Replaced accessors of `Struct` with `invokebuiltin`Nobuyoshi Nakada2020-06-161-9/+8
|
* Introduce find pattern [Feature #16828]Kazuki Tsujimoto2020-06-141-0/+167
|
* Fix crashes in the peephole optimizer on OpenBSD/sparc64Jeremy Evans2020-06-081-2/+3
| | | | | | | These crashes are due to alignment issues, casting ADJUST to INSN and then accessing after the end of the ADJUST. These patches come from Stefan Sperling <stsp@apache.org>, who reported the issue.
* compile.c: Mark cursor in debug listNobuyoshi Nakada2020-05-311-5/+5
|
* compile.c: Removed wrong conversionNobuyoshi Nakada2020-05-311-1/+1
|
* Adjusted an indentNobuyoshi Nakada2020-05-301-1/+1
|
* add indent for debug disasm outputKoichi Sasada2020-05-291-3/+3
|
* Fixed potential memory leakNobuyoshi Nakada2020-05-221-3/+4
| | | | | Create a wrapper object first, then buffer allocation which can fail.