aboutsummaryrefslogtreecommitdiffstats
path: root/iseq.c
Commit message (Collapse)AuthorAgeFilesLines
* RubyVM::InstructionSequence.compile_file_prismKevin Newton2023-11-201-41/+66
| | | | | | | | * Provide a new API compile_file_prism which mirrors compile_file but uses prism to parse/compile. * Provide the ability to run test-all with RUBY_ISEQ_DUMP_DEBUG set to "prism". If it is, we'll use the new compile_file_prism API to load iseqs during the test run.
* Escape and quote non-local variable namesNobuyoshi Nakada2023-11-151-1/+1
|
* [prism] Update to use new options APIsKevin Newton2023-11-031-12/+13
|
* [PRISM] Move scope_node itself to CRuby, create prism_compile.hJemma Issroff2023-10-251-3/+1
|
* [PRISM] Move pm_scope_node_init to prism_compile.cJemma Issroff2023-10-251-0/+2
| | | | | | pm_scope_node_init is only used for CRuby, so should not live in the ruby/prism repo. We will merge the changes here first so they're not breaking, and will then remove from ruby/prism
* Address PR commentsJemma Issroff2023-10-181-5/+5
|
* Put line change backJemma Issroff2023-10-181-3/+0
|
* Temporarily removed location code on scope nodesJemma Issroff2023-10-181-0/+3
|
* Remove pm_compile_context_t, move the context onto ScopeNodeJemma Issroff2023-10-181-19/+19
| | | | | | | We changed ScopeNodes to point to their parent (previous) ScopeNodes. Accordingly, we can remove pm_compile_context_t, and store all necessary context in ScopeNodes, allowing us to access locals from outer scopes.
* YJIT: Add a live ISeq counter Alan Wu2023-10-181-0/+2
| | | | | | | It's an estimator for application size and could be used as a compilation heuristic later. Co-authored-by: Maxime Chevalier-Boisvert <maxime.chevalierboisvert@shopify.com> Co-authored-by: Takashi Kokubun <takashikkbn@gmail.com>
* [ci skip] More docs for InstructionSequence.compileMatt Valentine-House2023-10-021-2/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit documents that you can also pass a `File` object to `RubyVM::InstructionSequence.compile`, instead of a string, and this will behave in a similar way to `RubyVM::InstructionSequence.compile_file` e.g. ``` ❯ ./ruby -e "puts RubyVM::InstructionSequence.compile(File.open('test.rb')).disasm" == disasm: #<ISeq:<compiled>@<compiled>:1 (1,0)-(2,21)> local table (size: 1, argc: 0 [opts: 0, rest: -1, post: 0, block: -1, kw: -1@-1, kwrest: -1]) [ 1] name@0 0000 putstring "Ruby" ( 1)[Li] 0002 setlocal_WC_0 name@0 0004 putself ( 2)[Li] 0005 putobject "Hello, " 0007 getlocal_WC_0 name@0 0009 dup 0010 objtostring <calldata!mid:to_s, argc:0, FCALL|ARGS_SIMPLE> 0012 anytostring 0013 concatstrings 2 0015 opt_send_without_block <calldata!mid:puts, argc:1, FCALL|ARGS_SIMPLE> 0017 leave ~/git/ruby master* ≡ ⇡ ❯ ./ruby -e "puts RubyVM::InstructionSequence.compile(File.open('test.rb').read).disasm" == disasm: #<ISeq:<compiled>@<compiled>:1 (1,0)-(2,21)> local table (size: 1, argc: 0 [opts: 0, rest: -1, post: 0, block: -1, kw: -1@-1, kwrest: -1]) [ 1] name@0 0000 putstring "Ruby" ( 1)[Li] 0002 setlocal_WC_0 name@0 0004 putself ( 2)[Li] 0005 putobject "Hello, " 0007 getlocal_WC_0 name@0 0009 dup 0010 objtostring <calldata!mid:to_s, argc:0, FCALL|ARGS_SIMPLE> 0012 anytostring 0013 concatstrings 2 0015 opt_send_without_block <calldata!mid:puts, argc:1, FCALL|ARGS_SIMPLE> 0017 leave ``` This is explicitly allowed by this code path in `rb_iseq_compile_with_option` so we should document it. ``` if (RB_TYPE_P(src, T_FILE)) { parse = rb_parser_compile_file_path; } else { parse = rb_parser_compile_string_path; StringValue(src); } ```
* Rename YARP symbols to prismKevin Newton2023-09-271-22/+23
|
* fix iseq kwargs table and original_iseq leaksAdam Hess2023-09-261-0/+4
| | | | | | [bug #19903] Co-authored-by: Peter Zhu <peter@peterzhu.ca>
* Copy compile options from AST directly without intermediate HashNobuyoshi Nakada2023-09-011-15/+9
|
* Copy `rb_compile_option_t` only if neededNobuyoshi Nakada2023-09-011-17/+8
| | | | Use `COMPILE_OPTION_DEFAULT` if nothing to change.
* Use macro argument not the variable directlyNobuyoshi Nakada2023-09-011-1/+1
|
* Update YARP APIs to handle uint8_tKevin Newton2023-08-301-1/+1
|
* Compile more YARP node types (#8322)Jemma Issroff2023-08-291-0/+46
| | | | | | | | | | | | | | | | | | | | | | | | | * Add several more node simple types to YARP's compiler: Nodes include: DefinedNode, EmbeddedStatementsNode, LocalVariableReadNode, LocalVariableWriteNode, MultiWriteNode, OptionalParameterNode, SplatNode, YieldNode * Add AssocSplatNode, RangeNode * Add RangeNode, other helpers for future nodes * Add ArrayNode, HashNode, static literal helpers * Add branch conditionals * Add IfNode, UnlessNode * Add ScopeNode * NEW_ISEQ and NEW_CHILD_ISEQ implemented for YARP * Add nodes that depend on ScopeNode * Addressed PR comments
* [YARP] Compile basic types (#8311)Jemma Issroff2023-08-291-3/+4
| | | | | | | | | | | | | | | | | | | | | * Add a compile_context arg to yp_compile_node The compile_context will allow us to pass around the parser, and the constants and lookup table (to be used in future commits). * Compile yp_program_node_t and yp_statements_node_t Add the compilation for program and statements node so that we can successfully compile an empty program with YARP. * Helper functions for parsing numbers, strings, and symbols * Compile basic numeric / boolean node types in YARP * Compile StringNode and SymbolNodes in YARP * Compile several basic node types in YARP * Added error return for missing node
* Add yarp/yarp_compiler.c (#8042)Jemma Issroff2023-08-281-1/+66
| | | | | | | | | | | | * Add yarp/yarp_compiler.c as stencil for compiling YARP This commit adds yarp/yarp_compiler.c, and changes the sync script to ensure that yarp/yarp_compiler.c will not get overwritten * [Misc #119772] Create and expose RubyVM::InstructionSequence.compile_yarp This commit creates the stencil for a compile_yarp function, which we will continue to fill out. It allows us to check the output of compiled YARP code against compiled code without using YARP.
* Move SCRIPT_LINES__ away from parse.yNobuyoshi Nakada2023-08-251-0/+1
|
* support `rescue` event for TracePointKoichi Sasada2023-08-011-1/+4
| | | | fix [Feature #19572]
* `cc->cme` should not be marked.Ruby2023-07-281-21/+28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | cc is callcache. cc->klass (klass) should not be marked because if the klass is free'ed, the cc->klass will be cleared by `vm_cc_invalidate()`. cc->cme (cme) should not be marked because if cc is invalidated when cme is free'ed. - klass marks cme if klass uses cme. - caller classe's ccs->cme marks cc->cme. - if cc is invalidated (klass doesn't refer the cc), cc is invalidated by `vm_cc_invalidate()` and cc->cme is not be accessed. - On the multi-Ractors, cme will be collected with global GC so that it is safe if GC is not interleaving while accessing cc and cme. fix [Bug #19436] ```ruby 10_000.times{|i| # p i if (i%1_000) == 0 str = "x" * 1_000_000 def str.foo = nil eval "def call#{i}(s) = s.foo" send "call#{i}", str } ``` Without this patch: ``` real 1m5.639s user 0m6.637s sys 0m58.292s ``` and with this patch: ``` real 0m2.045s user 0m1.627s sys 0m0.164s ```
* Clean up OPT_STACK_CACHING (#8132)Takashi Kokubun2023-07-271-4/+0
|
* Don't check for null pointer in calls to freePeter Zhu2023-06-301-2/+2
| | | | | | | | According to the C99 specification section 7.20.3.2 paragraph 2: > If ptr is a null pointer, no action occurs. So we do not need to check that the pointer is a null pointer.
* Replace parser & node compile_option from Hash to bit fieldyui-knk2023-06-171-1/+10
| | | | This commit reduces dependency to CRuby object.
* [Feature #19719] Universal Parseryui-knk2023-06-121-1/+1
| | | | | | | | | Introduce Universal Parser mode for the parser. This commit includes these changes: * Introduce `UNIVERSAL_PARSER` macro. All of CRuby related functions are passed via `struct rb_parser_config_struct` when this macro is enabled. * Add CI task with 'cppflags=-DUNIVERSAL_PARSER' for ubuntu.
* Move `ruby_node_name` to node.c and rename prefix of the functionyui-knk2023-05-231-11/+0
|
* Move `catch_except_p` to `compile_data`eileencodes2023-04-111-1/+0
| | | | | | | | | | | | | | The `catch_except_p` flag is used for communicating between parent and child iseq's that a throw instruction was emitted. So for example if a child iseq has a throw in it and the parent wants to catch the throw, we use this flag to communicate to the parent iseq that a throw instruction was emitted. This flag is only useful at compile time, it only impacts the compilation process so it seems to be fine to move it from the iseq body to the compile_data struct. Co-authored-by: Aaron Patterson <tenderlove@ruby-lang.org>
* Remove unused VM_CALL_BLOCKISEQ flagTakashi Kokubun2023-04-011-1/+0
|
* `vm_call_single_noarg_inline_builtin`Koichi Sasada2023-03-231-8/+47
| | | | | | | | If the iseq only contains `opt_invokebuiltin_delegate_leave` insn and the builtin-function (bf) is inline-able, the caller doesn't need to build a method frame. `vm_call_single_noarg_inline_builtin` is fast path for such cases.
* Remove obsoleted functions in rjit.cTakashi Kokubun2023-03-071-1/+1
|
* s/mjit/rjit/Takashi Kokubun2023-03-061-4/+4
|
* s/MJIT/RJIT/Takashi Kokubun2023-03-061-3/+3
|
* Stop exporting symbols for MJITTakashi Kokubun2023-03-061-1/+1
|
* Store MJIT blocks on each ISEQTakashi Kokubun2023-03-051-2/+2
|
* Invalidate everything on GC.compactTakashi Kokubun2023-03-051-1/+1
|
* Fix spelling (#7389)John Bampton2023-02-271-1/+1
|
* Merge gc.h and internal/gc.hMatt Valentine-House2023-02-091-1/+1
| | | | [Feature #19425]
* Rename iseq_mark_and_update to iseq_mark_and_movePeter Zhu2023-02-081-2/+2
| | | | The new name is more consistent.
* Pass through `line_offset` argument correctly (but it was always 0). (#7177)Samuel Williams2023-01-271-1/+1
|
* Ensure main file has default coverage if required. (#7169)Samuel Williams2023-01-221-2/+11
| | | * Extract common code for coverage setup.
* Make all of the references of iseq movablePeter Zhu2023-01-201-20/+15
|
* Combine code paths for marking ccPeter Zhu2023-01-191-7/+19
| | | | | This commit avoids a separate code path for marking and moving the callcache of the iseq.
* Add rb_gc_mark_and_move and implement on iseqPeter Zhu2023-01-191-161/+72
| | | | | | | | | | This commit adds rb_gc_mark_and_move which takes a pointer to an object and marks it during marking phase and updates references during compaction. This allows for marking and reference updating to be combined into a single function, which reduces code duplication and prevents bugs if marking and reference updating goes out of sync. This commit also implements rb_gc_mark_and_move on iseq as an example.
* ci in iseq can only be object or nullPeter Zhu2023-01-191-2/+2
| | | | | It looks like rb_callinfo in iseq can only be either a Ruby object or null, since it cannot be allocated on the stack.
* Set max_iv_count (used for object shapes) based on inline cachesJemma Issroff2022-12-061-19/+6
| | | | | | | | | | | | | | | | With this change, we're storing the iv name on an inline cache on setinstancevariable instructions. This allows us to check the inline cache to count instance variables set in initialize and give us an estimate of iv capacity for an object. For the purpose of estimating the number of instance variables required for an object, we're assuming that all initialize methods will call `super`. This change allows us to estimate the number of instance variables required without disassembling instruction sequences. Co-Authored-By: Aaron Patterson <tenderlove@ruby-lang.org>
* Fix crash when RGENGC_CHECK_MODE=2Peter Zhu2022-12-041-8/+10
| | | | | | Commit dba61f4 fixes a crash when GC'ing a iseq that failed to compile. However, if we turn on RGENGC_CHECK_MODE then rb_iseq_memsize crashes since it cannot handle an iseq without is_entries.
* return early if there is no is_entries bufferAaron Patterson2022-12-031-0/+8
| | | | | | | | If there is a compilation error, is_entries may not be allocated, but ic_size could be greater than 0. If we don't have a buffer to iterate over, just return early. Otherwise GC could segv [Bug #19173]
* Use consistent style [ci skip]Nobuyoshi Nakada2022-12-021-1/+2
|