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

116 Коммитов

Автор SHA1 Сообщение Дата
Matt Valentine-House 0c7c654b4d [Prism] Fix local variable access for POST_EXECUTION_NODE 2023-11-30 21:31:57 +00:00
Matt Valentine-House 57782d3d47 Store depth offset inside the scope node.
Instead of incrementing the depth using call by reference as we're
recursing up the stack we could instead store an offset for each known
scope where we know the depth is going to represented differently in the
Prism ast.
2023-11-30 21:31:57 +00:00
Aaron Patterson 630c97acc7 Add a rescue for `defined?(A::B::C)`
It's possible for `defined?(A::B::C)` to raise an exception.  `defined?`
must swallow the exception and return nil, so this commit adds a rescue
entry for `defined?` expressions on constant paths
2023-11-30 09:48:14 -05:00
Jemma Issroff 8234763816 [PRISM] Compile empty array as newarray 0
Prior to this commit, we were compiling an empty array as a
duparray of [] which meant we were allocating a new value
unnecessarily. With this commit, we emit a newarray with size 0
instead.
2023-11-29 16:20:30 -05:00
Jemma Issroff 853fd44745 [PRISM] Implement CallNodes with splat followed by args 2023-11-29 16:19:14 -05:00
Jemma Issroff 2233204cc1 [PRISM] Account for ImplicitRestNode
Prism introduced a new ImplicitRestNode. This adds tests for the
ImplicitRestNode cases, and changes one assert which is no longer
accurate.
2023-11-29 16:14:28 -05:00
Jemma Issroff 53841941f0 [PRISM] Fix EnsureNode, pass depth to get locals
This commit fixes a bug with locals in ensure nodes by setting
the local tables correctly. It also changes accessing locals to
look at local tables in parent scopes, and account for this
correctly on depths of get or setlocals.
2023-11-29 16:00:00 -05:00
Jemma Issroff a9c07cbd21 [PRISM] Don't calculate params size based on locals
Prior to this commit, we were conflating the size of the locals
list with the number of parameters. This commit distinguishes
the two, and fixes a related bug which would occur if we set a local
that was not a parameter
2023-11-28 17:01:34 -05:00
Jemma Issroff 7bd172744f [PRISM] Implement more compilation of SplatNodes
There was a bug with the rest argument in SplatNodes, this commit
fixes it, and adds more tests illustrating the behavior of
SplatNodes
2023-11-28 14:03:57 -05:00
Jemma Issroff 2760f23774 [PRISM] Compile YieldNode with different arguments 2023-11-28 14:02:53 -05:00
Jemma Issroff 1acea50100 [PRISM] Small fixes to parameters ordering and methods 2023-11-27 16:02:38 -05:00
Jemma Issroff e4dd8f6c9c [PRISM] Renamed some variables, added comments 2023-11-27 15:14:40 -05:00
Jemma Issroff ba26c6eae0 [PRISM] Compile IndexOperatorWriteNode 2023-11-27 15:14:40 -05:00
Jemma Issroff ec5eddf695 [PRISM] Compile IndexAndWriteNode 2023-11-27 15:14:40 -05:00
Jemma Issroff 13b7cddc2b [PRISM] Compile IndexOrWriteNode 2023-11-27 15:14:40 -05:00
Jemma Issroff 95064bb88d [PRISM] Fix compilation for SplatNodes within ArrayNodes
SplatNodes within ArrayNodes (e.g. [*1..2, 3]) need to be special
cased in the compiler because they use a combination of concatarray
and newarray instructions to treat each sequence of splat or non-splat
elements as independent arrays which get concatenated. This commit
implements those cases.
2023-11-27 12:52:07 -05:00
Jemma Issroff 6d447fa35f [PRISM] Don't pop several args related nodes 2023-11-27 12:51:50 -05:00
Matt Valentine-House 406dafbb34 [PRISM] Insert Tracepoint line events on line change 2023-11-24 12:54:35 +00:00
Jemma Issroff 3db21d2d4c [PRISM] Rename flag to CONTAINS_KEYWORD_SPLAT
We need to do this change first on ruby/ruby before merging to
ruby/prism to avoid breaking ruby/ruby CI
2023-11-21 17:29:07 -05:00
Kevin Newton a5b482837b Remove string concat node in prism 2023-11-21 11:35:46 -05:00
Kevin Newton 914640eadd Use new match write targets 2023-11-20 18:00:44 -05:00
Jemma Issroff 103bbd21f8 [PRISM] Updated LocalVariableTargetNodes too 2023-11-20 13:48:46 -08:00
Jemma Issroff b913626bea [PRISM] Fix LocalVariableWriteNodes within blocks
Prior to this commit, we weren't recursing up scopes to look for
the local definition. With this commit, we do so, fixing local writes
within blocks
2023-11-20 13:48:46 -08:00
eileencodes 2796e4ece2 [PRISM] Implement once node for interpolated regex
This PR implements the once node on interpolated regexes.

There is a bug in Prism where the interpolated regex with the once flag
only works when there is not a local variable so the test uses a "1".
We'll need to fix that.
2023-11-20 12:42:05 -08:00
Jemma Issroff c5d5929443 [PRISM] Don't pop args to YieldNode 2023-11-20 12:12:34 -08:00
eileencodes 4dd11c067d Switching first argument in pm_interpolated_node_compile
This changes the first argument in `pm_interpolated_node_compile` to use
a pointer.
2023-11-20 07:05:09 -08:00
Jemma Issroff 775ed27d6d [PRISM] Initialize keyword to silence warning 2023-11-13 17:48:55 -05:00
Jemma Issroff ae1fad4cd7 [PRISM] Implement compilation for ForwardingArgumentssNode 2023-11-09 09:45:59 -03:00
Nobuyoshi Nakada 0f02fbd9ff Range check in pm_constant_id_lookup 2023-11-09 18:21:45 +09:00
Nobuyoshi Nakada e824b69a86 Remove useless casts 2023-11-09 18:21:45 +09:00
Matt Valentine-House 5c8d2c2d45 [PRISM] Always lookup idERROR_INFO consistently.
We know where it is in the iseq local table, because we forced it using
`iseq_set_exception_local_table` when compiling the BEGIN_NODE, so we
can always look it up from the same place.

Co-Authored-By Peter Zhu <peter@peterzhu.ca>
2023-11-08 20:28:58 -05:00
Jemma Issroff f9e34a1fd3 [PRISM] Add tests for OptionalKeywordParameterNode
This commit adds tests for the compilation of the
OptionalKeywordParameterNode, and fixes cases on the
RequiredKeywordParameterNode
2023-11-08 18:15:47 -03:00
Jemma Issroff 70e4ff9feb [PRISM] Added tests for ForwardingParameterNode, KeywordRestParameterNode 2023-11-08 18:15:47 -03:00
Jemma Issroff 26cff6ae2b [PRISM] Add tests for several parameters nodes
This commit adds tests for BlockParameterNode, RequiredParameterNode,
RequiredKeywordParameterNode and RestParameterNode
2023-11-08 18:15:47 -03:00
Jemma Issroff bc07b0b9e1 [PRISM] Implement compilation for different parameters
This commit compiles most parameter types, setting appropriate values on
the ISEQ_BODY. It also adds tests for callers and callees of methods,
using many versions of tests from bootstraptest
2023-11-07 15:15:16 -03:00
Matt Valentine-House e7bdd9e498 [PRISM] Move Local table setup into EnsureNode compilation 2023-11-07 14:03:57 +00:00
Matt Valentine-House b7d5a63b9a [PRISM] Don't generate leave insns for Ensure nodes 2023-11-07 14:03:57 +00:00
Matt Valentine-House 8ef7f27321 [PRISM] CompileEnsureNode 2023-11-07 14:03:57 +00:00
Matt Valentine-House 237b85c256 [PRISM] PM_COMPILE into a specified LINK_ANCHOR 2023-11-07 14:03:57 +00:00
Jemma Issroff f6ba87ca88 [PRISM] Implement compilation for MultiWriteNodes, fix MultiTargetNodes
Compilation now works for MultiWriteNodes and MultiTargetNodes, with
nesting on MultiWrites. See the tests added in this commit for example
behavior.
2023-11-06 10:39:07 -03:00
Matt Valentine-House cdb410f688 [PRISM] Fix stack consistency with Popped begin
When a begin node is popped it only needs to putnil if that nil is going
to be the return value, otherwise it can successfully be optimised out.
2023-11-03 15:19:28 +00:00
Matt Valentine-House dcb9ded6c9 [PRISM] Fix CallNode with arguments when popped
Previously emitting a call node with an argument followed by another
node would cause the argument to be mistakenly omitted from the argument
list causing a stack underflow.

```
PRISM: **************************************************
-- raw disasm--------
   0000 putself                                                          (   0)
   0001 send                 <calldata:puts, 1>, nil                     (   0)
*  0004 pop                                                              (   0)
   0005 putobject            1                                           (   0)
   0007 leave                                                            (   0)
---------------------
```
2023-11-03 07:28:05 +00:00
Jemma Issroff c6f5c64639 [PRISM] Fix popped for ForNode 2023-11-02 17:46:43 -03:00
Jemma Issroff 7f18448a8e [PRISM] Fix popped for CallOperatorWriteNode 2023-11-02 17:46:43 -03:00
Jemma Issroff d8bdb15a8b [PRISM] Fix popped for Call{And,Or}WriteNode 2023-11-02 17:46:43 -03:00
Jemma Issroff 5acced49c2 [PRISM] Fix popped for SingletonClassNode 2023-11-02 17:46:43 -03:00
Jemma Issroff 33f18b3d2f [PRISM] Fix popped for CaseNode 2023-11-02 17:46:43 -03:00
Jemma Issroff 62baf723b6 [PRISM] Fix popped for AssocSplatNode 2023-11-02 17:46:43 -03:00
Jemma Issroff 8b4b3b1d38 [PRISM] Fix popped for MatchWriteNode 2023-11-02 17:46:43 -03:00
Jemma Issroff 0359f9ca67 [PRISM] Fix popped for ConstantPathOperatorWriteNode 2023-11-02 17:46:43 -03:00