Jemma Issroff
68a81b44e3
[PRISM] Implement compilation for CallOrWriteNode
2023-10-26 07:15:35 -03:00
Jemma Issroff
e28a033035
[PRISM] Extract helper to use for CallOrWriteNode
2023-10-26 07:15:35 -03:00
Jemma Issroff
2a8dbb1323
[PRISM] Implemented compilation for CallAndWriteNode
2023-10-26 07:15:35 -03:00
Jemma Issroff
b5f6e2a7c4
[PRISM] ScopeNode doesn't need void * anymore
2023-10-25 18:18:35 -03:00
Jemma Issroff
0abf2d86b9
[PRISM] Move pm_scope_node_init to prism_compile.c
...
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
2023-10-25 18:18:35 -03:00
Jemma Issroff
f87c31f3e0
[PRISM] Add PM_POP macro, cleanup missing macro usage
2023-10-25 17:27:00 -03:00
Jemma Issroff
8197bbb0a9
[PRISM] Toggled accepts_no_kwarg to true on NoKeywordsParameterNode
2023-10-25 13:02:44 -03:00
Jemma Issroff
fb0a30166d
[PRISM] Add tests for ParametersNode
2023-10-25 13:02:44 -03:00
Jemma Issroff
fe0827013b
[PRISM] Implement NoKeywordsParameterNode
2023-10-25 13:02:44 -03:00
Jemma Issroff
39207b496e
[PRISM] Implement compilation for PreExecutionNodes
2023-10-23 13:22:55 -07:00
Jemma Issroff
5abff9dbff
[PRISM] Add PM_PUTNIL macro
2023-10-23 13:22:55 -07:00
Jemma Issroff
7c4e3ca27b
[PRISM] Fix AssocSplat node
...
This commit emits the correct instructions for hashes which have
both AssocSplat and Assoc nodes contained within them
2023-10-23 13:15:52 -07:00
Jemma Issroff
60196b4780
[PRISM] Fix __LINE__ to be 1-indexed by default
2023-10-23 13:59:48 -03:00
Jemma Issroff
62c674f98c
[PRISM] Fix compilation for IfNode, UnlessNode
...
This properly implements the branch condition for FlipFlopNodes on
If / UnlessNodes, and also fixes the bug in UnlessNodes
2023-10-23 12:37:50 -03:00
Jemma Issroff
01787d53bf
[PRISM] Setup encodings in prism compiler
2023-10-20 16:29:06 -03:00
Jemma Issroff
a426a230de
[PRISM] Fixed StringConcatNode, uncommented tests
2023-10-20 11:49:53 -03:00
Nobuyoshi Nakada
9d1940ba3c
[Bug #19966 ] [PRISM] Fix singleton method definition
2023-10-20 15:16:34 +09:00
Jemma Issroff
10c5063704
Address PR comments
2023-10-18 17:16:11 -07:00
Jemma Issroff
5408ce8c17
Fixed mistyping
2023-10-18 17:16:11 -07:00
Jemma Issroff
ba3a99acaf
Remove pm_compile_context_t, move the context onto ScopeNode
...
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.
2023-10-18 17:16:11 -07:00
Jemma Issroff
10d88ec9c3
[PRISM] Compile AliasGlobalVariableNode ( #8675 )
2023-10-16 12:00:01 -07:00
Jemma Issroff
728286d0e8
[PRISM] Fix more bugs in the compiler ( #8658 )
...
* Fixed ConstantPathWriteNode
* FIxed FlipFlopNode
2023-10-16 06:31:32 -07:00
Adam Hess
6e88b72d7b
[PRISM] prevent underflow on popped splatarray ( #8657 )
...
prevent underflow on popped splatarray
This only emits the splat array node when not popped
2023-10-16 05:22:07 -07:00
Jemma Issroff
34add1e595
[PRISM] Compile fixes ( #8644 )
...
* Fix compiling UndefNodes
* Fix compiling super on ClassNode
* Fix compile popped for ModuleNode
* Add checks for NULL nodes
* Only add newhash if not popped
2023-10-13 10:59:37 -07:00
Matt Valentine-House
05b9b58d55
[Prism] Fix IfNode and ElseNode
...
ElseNode looks to have been implemented at the same time as IfNode, but
was resulting in a stack underflow error.
The following is from the test code
```
if foo
bar
end
```
```
❯ make run
compiling compile.c
linking miniruby
./miniruby -I./lib -I. -I.ext/common -r./arm64-darwin22-fake ./test.rb
CRUBY: **************************************************
== disasm: #<ISeq:<compiled>@<compiled>:1 (1,0)-(2,19)>
0000 putself ( 2)[Li]
0001 opt_send_without_block <calldata!mid:foo, argc:0, FCALL|VCALL|ARGS_SIMPLE>
0003 branchunless 9
0005 putself
0006 opt_send_without_block <calldata!mid:bar, argc:0, FCALL|VCALL|ARGS_SIMPLE>
0008 pop
0009 putobject_INT2FIX_1_
0010 leave
PRISM: **************************************************
-- raw disasm--------
0000 putself ( 2)
0001 send <calldata:foo, 0>, nil ( 2)
0004 branchunless <L001> ( 2)
0006 jump <L000> ( 2)
<L000> [sp: 0]
* 0008 pop ( 1)
0009 putself ( 2)
0010 send <calldata:bar, 0>, nil ( 2)
0013 pop ( 2)
0014 jump <L002> ( 1)
<L001> [sp: 0]
<L002> [sp: -1]
0016 putobject 1 ( 2)
0018 leave ( 1)
---------------------
<compiled>: <compiled>:1: argument stack underflow (-1) (SyntaxError)
make: *** [run] Error 1
```
This commit fixes the stack underflow error for both IfNode and ElseNode
and introduces tests for them.
2023-10-04 13:53:31 -04:00
Benoit Daloze
fd984ac869
Adopt prism CallNode#name changes
2023-10-02 09:18:56 -04:00
Kevin Newton
2de5c57dce
Move more things through pm_static_literal_value
2023-09-29 09:51:23 -04:00
Kevin Newton
2e25289aee
Handle static array nodes
2023-09-29 09:51:23 -04:00
Kevin Newton
38e3cafe62
Compile implicit nodes
2023-09-29 09:51:23 -04:00
Kevin Newton
396042a25c
Fix up static hash compilation
2023-09-29 09:51:23 -04:00
Kevin Newton
3ec6be1a4b
More documentation for pattern matching compilation
2023-09-28 15:13:09 -04:00
Kevin Newton
9c8ba84675
Support if and unless guards on patterns
2023-09-28 15:13:09 -04:00
Kevin Newton
b1a28b05db
Support local variable targeting in pattern matching
2023-09-28 15:13:09 -04:00
Kevin Newton
41d3e23582
Support the AlternationPatternNode
2023-09-28 15:13:09 -04:00
Kevin Newton
64da9be3af
Fill in other missing pattern matching expression types
2023-09-28 15:13:09 -04:00
Kevin Newton
6e88a56f63
Compile basic pattern matching expressions
2023-09-28 15:13:09 -04:00
Kevin Newton
5a376f0f71
Consolidate regexp options, interpolated match last line
2023-09-28 14:11:34 -04:00
Nobuyoshi Nakada
d2c5867357
Fix up indentation [ci skip]
2023-09-29 00:55:43 +09:00
Matt Valentine-House
414c781158
[YARP] Implement MatchWriteNode
2023-09-28 16:51:30 +01:00
Kevin Newton
40b2c8e5e7
Fix up indentation in prism_compile.c
2023-09-28 09:47:46 -04:00
Kevin Newton
a213d21448
Move CRuby-specific prism files to top level
2023-09-28 09:44:16 -04:00