Skip to content

Commit 8fb9237

Browse files
committed
[GR-45043] Import the latest YARP (0.15.0)
PullRequest: truffleruby/4039
2 parents a78212f + 9c016fa commit 8fb9237

25 files changed

+9390
-2703
lines changed

src/main/c/yarp/Makefile

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ SOEXT := $(shell ruby -e 'puts RbConfig::CONFIG["SOEXT"]')
1313
CPPFLAGS := -Iinclude
1414
CFLAGS := -g -O2 -std=c99 -Wall -Werror -Wextra -Wpedantic -Wundef -Wconversion -fPIC -fvisibility=hidden
1515
CC := cc
16+
WASI_SDK_PATH := /opt/wasi-sdk
1617

1718
HEADERS := $(shell find include -name '*.h')
1819
SOURCES := $(shell find src -name '*.c')
@@ -23,6 +24,7 @@ all: shared static
2324

2425
shared: build/librubyparser.$(SOEXT)
2526
static: build/librubyparser.a
27+
wasm: javascript/src/prism.wasm
2628

2729
build/librubyparser.$(SOEXT): $(SHARED_OBJECTS)
2830
$(ECHO) "linking $@"
@@ -32,6 +34,10 @@ build/librubyparser.a: $(STATIC_OBJECTS)
3234
$(ECHO) "building $@"
3335
$(Q) $(AR) $(ARFLAGS) $@ $(STATIC_OBJECTS) $(Q1:0=>/dev/null)
3436

37+
javascript/src/prism.wasm: Makefile $(SOURCES) $(HEADERS)
38+
$(ECHO) "building $@"
39+
$(Q) $(WASI_SDK_PATH)/bin/clang --sysroot=$(WASI_SDK_PATH)/share/wasi-sysroot/ $(DEBUG_FLAGS) -DPRISM_EXPORT_SYMBOLS -D_WASI_EMULATED_MMAN -lwasi-emulated-mman $(CPPFLAGS) $(CFLAGS) -Wl,--export-all -Wl,--no-entry -mexec-model=reactor -o $@ $(SOURCES)
40+
3541
build/shared/%.o: src/%.c Makefile $(HEADERS)
3642
$(ECHO) "compiling $@"
3743
$(Q) mkdir -p $(@D)

src/main/c/yarp/include/prism.h

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,17 @@
22
#define PRISM_H
33

44
#include "prism/defines.h"
5+
#include "prism/util/pm_buffer.h"
6+
#include "prism/util/pm_char.h"
7+
#include "prism/util/pm_memchr.h"
8+
#include "prism/util/pm_strpbrk.h"
59
#include "prism/ast.h"
610
#include "prism/diagnostic.h"
711
#include "prism/node.h"
812
#include "prism/pack.h"
913
#include "prism/parser.h"
14+
#include "prism/prettyprint.h"
1015
#include "prism/regexp.h"
11-
#include "prism/util/pm_buffer.h"
12-
#include "prism/util/pm_char.h"
13-
#include "prism/util/pm_memchr.h"
14-
#include "prism/util/pm_strpbrk.h"
1516
#include "prism/version.h"
1617

1718
#include <assert.h>
@@ -29,13 +30,8 @@
2930

3031
void pm_serialize_content(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer);
3132

32-
void pm_print_node(pm_parser_t *parser, pm_node_t *node);
33-
3433
void pm_parser_metadata(pm_parser_t *parser, const char *metadata);
3534

36-
// Generate a scope node from the given node.
37-
void pm_scope_node_init(const pm_node_t *node, pm_scope_node_t *scope, pm_scope_node_t *previous, pm_parser_t *parser);
38-
3935
// The prism version and the serialization format.
4036
PRISM_EXPORTED_FUNCTION const char * pm_version(void);
4137

@@ -59,9 +55,6 @@ PRISM_EXPORTED_FUNCTION void pm_parser_free(pm_parser_t *parser);
5955
// Parse the Ruby source associated with the given parser and return the tree.
6056
PRISM_EXPORTED_FUNCTION pm_node_t * pm_parse(pm_parser_t *parser);
6157

62-
// Pretty-prints the AST represented by the given node to the given buffer.
63-
PRISM_EXPORTED_FUNCTION void pm_prettyprint(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer);
64-
6558
// Serialize the AST represented by the given node to the given buffer.
6659
PRISM_EXPORTED_FUNCTION void pm_serialize(pm_parser_t *parser, pm_node_t *node, pm_buffer_t *buffer);
6760

src/main/c/yarp/include/prism/ast.h

Lines changed: 145 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -277,79 +277,81 @@ enum pm_node_type {
277277
PM_IMAGINARY_NODE = 66,
278278
PM_IMPLICIT_NODE = 67,
279279
PM_IN_NODE = 68,
280-
PM_INSTANCE_VARIABLE_AND_WRITE_NODE = 69,
281-
PM_INSTANCE_VARIABLE_OPERATOR_WRITE_NODE = 70,
282-
PM_INSTANCE_VARIABLE_OR_WRITE_NODE = 71,
283-
PM_INSTANCE_VARIABLE_READ_NODE = 72,
284-
PM_INSTANCE_VARIABLE_TARGET_NODE = 73,
285-
PM_INSTANCE_VARIABLE_WRITE_NODE = 74,
286-
PM_INTEGER_NODE = 75,
287-
PM_INTERPOLATED_MATCH_LAST_LINE_NODE = 76,
288-
PM_INTERPOLATED_REGULAR_EXPRESSION_NODE = 77,
289-
PM_INTERPOLATED_STRING_NODE = 78,
290-
PM_INTERPOLATED_SYMBOL_NODE = 79,
291-
PM_INTERPOLATED_X_STRING_NODE = 80,
292-
PM_KEYWORD_HASH_NODE = 81,
293-
PM_KEYWORD_PARAMETER_NODE = 82,
294-
PM_KEYWORD_REST_PARAMETER_NODE = 83,
295-
PM_LAMBDA_NODE = 84,
296-
PM_LOCAL_VARIABLE_AND_WRITE_NODE = 85,
297-
PM_LOCAL_VARIABLE_OPERATOR_WRITE_NODE = 86,
298-
PM_LOCAL_VARIABLE_OR_WRITE_NODE = 87,
299-
PM_LOCAL_VARIABLE_READ_NODE = 88,
300-
PM_LOCAL_VARIABLE_TARGET_NODE = 89,
301-
PM_LOCAL_VARIABLE_WRITE_NODE = 90,
302-
PM_MATCH_LAST_LINE_NODE = 91,
303-
PM_MATCH_PREDICATE_NODE = 92,
304-
PM_MATCH_REQUIRED_NODE = 93,
305-
PM_MATCH_WRITE_NODE = 94,
306-
PM_MISSING_NODE = 95,
307-
PM_MODULE_NODE = 96,
308-
PM_MULTI_TARGET_NODE = 97,
309-
PM_MULTI_WRITE_NODE = 98,
310-
PM_NEXT_NODE = 99,
311-
PM_NIL_NODE = 100,
312-
PM_NO_KEYWORDS_PARAMETER_NODE = 101,
313-
PM_NUMBERED_REFERENCE_READ_NODE = 102,
314-
PM_OPTIONAL_PARAMETER_NODE = 103,
315-
PM_OR_NODE = 104,
316-
PM_PARAMETERS_NODE = 105,
317-
PM_PARENTHESES_NODE = 106,
318-
PM_PINNED_EXPRESSION_NODE = 107,
319-
PM_PINNED_VARIABLE_NODE = 108,
320-
PM_POST_EXECUTION_NODE = 109,
321-
PM_PRE_EXECUTION_NODE = 110,
322-
PM_PROGRAM_NODE = 111,
323-
PM_RANGE_NODE = 112,
324-
PM_RATIONAL_NODE = 113,
325-
PM_REDO_NODE = 114,
326-
PM_REGULAR_EXPRESSION_NODE = 115,
327-
PM_REQUIRED_DESTRUCTURED_PARAMETER_NODE = 116,
328-
PM_REQUIRED_PARAMETER_NODE = 117,
329-
PM_RESCUE_MODIFIER_NODE = 118,
330-
PM_RESCUE_NODE = 119,
331-
PM_REST_PARAMETER_NODE = 120,
332-
PM_RETRY_NODE = 121,
333-
PM_RETURN_NODE = 122,
334-
PM_SELF_NODE = 123,
335-
PM_SINGLETON_CLASS_NODE = 124,
336-
PM_SOURCE_ENCODING_NODE = 125,
337-
PM_SOURCE_FILE_NODE = 126,
338-
PM_SOURCE_LINE_NODE = 127,
339-
PM_SPLAT_NODE = 128,
340-
PM_STATEMENTS_NODE = 129,
341-
PM_STRING_CONCAT_NODE = 130,
342-
PM_STRING_NODE = 131,
343-
PM_SUPER_NODE = 132,
344-
PM_SYMBOL_NODE = 133,
345-
PM_TRUE_NODE = 134,
346-
PM_UNDEF_NODE = 135,
347-
PM_UNLESS_NODE = 136,
348-
PM_UNTIL_NODE = 137,
349-
PM_WHEN_NODE = 138,
350-
PM_WHILE_NODE = 139,
351-
PM_X_STRING_NODE = 140,
352-
PM_YIELD_NODE = 141,
280+
PM_INDEX_AND_WRITE_NODE = 69,
281+
PM_INDEX_OPERATOR_WRITE_NODE = 70,
282+
PM_INDEX_OR_WRITE_NODE = 71,
283+
PM_INSTANCE_VARIABLE_AND_WRITE_NODE = 72,
284+
PM_INSTANCE_VARIABLE_OPERATOR_WRITE_NODE = 73,
285+
PM_INSTANCE_VARIABLE_OR_WRITE_NODE = 74,
286+
PM_INSTANCE_VARIABLE_READ_NODE = 75,
287+
PM_INSTANCE_VARIABLE_TARGET_NODE = 76,
288+
PM_INSTANCE_VARIABLE_WRITE_NODE = 77,
289+
PM_INTEGER_NODE = 78,
290+
PM_INTERPOLATED_MATCH_LAST_LINE_NODE = 79,
291+
PM_INTERPOLATED_REGULAR_EXPRESSION_NODE = 80,
292+
PM_INTERPOLATED_STRING_NODE = 81,
293+
PM_INTERPOLATED_SYMBOL_NODE = 82,
294+
PM_INTERPOLATED_X_STRING_NODE = 83,
295+
PM_KEYWORD_HASH_NODE = 84,
296+
PM_KEYWORD_PARAMETER_NODE = 85,
297+
PM_KEYWORD_REST_PARAMETER_NODE = 86,
298+
PM_LAMBDA_NODE = 87,
299+
PM_LOCAL_VARIABLE_AND_WRITE_NODE = 88,
300+
PM_LOCAL_VARIABLE_OPERATOR_WRITE_NODE = 89,
301+
PM_LOCAL_VARIABLE_OR_WRITE_NODE = 90,
302+
PM_LOCAL_VARIABLE_READ_NODE = 91,
303+
PM_LOCAL_VARIABLE_TARGET_NODE = 92,
304+
PM_LOCAL_VARIABLE_WRITE_NODE = 93,
305+
PM_MATCH_LAST_LINE_NODE = 94,
306+
PM_MATCH_PREDICATE_NODE = 95,
307+
PM_MATCH_REQUIRED_NODE = 96,
308+
PM_MATCH_WRITE_NODE = 97,
309+
PM_MISSING_NODE = 98,
310+
PM_MODULE_NODE = 99,
311+
PM_MULTI_TARGET_NODE = 100,
312+
PM_MULTI_WRITE_NODE = 101,
313+
PM_NEXT_NODE = 102,
314+
PM_NIL_NODE = 103,
315+
PM_NO_KEYWORDS_PARAMETER_NODE = 104,
316+
PM_NUMBERED_REFERENCE_READ_NODE = 105,
317+
PM_OPTIONAL_PARAMETER_NODE = 106,
318+
PM_OR_NODE = 107,
319+
PM_PARAMETERS_NODE = 108,
320+
PM_PARENTHESES_NODE = 109,
321+
PM_PINNED_EXPRESSION_NODE = 110,
322+
PM_PINNED_VARIABLE_NODE = 111,
323+
PM_POST_EXECUTION_NODE = 112,
324+
PM_PRE_EXECUTION_NODE = 113,
325+
PM_PROGRAM_NODE = 114,
326+
PM_RANGE_NODE = 115,
327+
PM_RATIONAL_NODE = 116,
328+
PM_REDO_NODE = 117,
329+
PM_REGULAR_EXPRESSION_NODE = 118,
330+
PM_REQUIRED_PARAMETER_NODE = 119,
331+
PM_RESCUE_MODIFIER_NODE = 120,
332+
PM_RESCUE_NODE = 121,
333+
PM_REST_PARAMETER_NODE = 122,
334+
PM_RETRY_NODE = 123,
335+
PM_RETURN_NODE = 124,
336+
PM_SELF_NODE = 125,
337+
PM_SINGLETON_CLASS_NODE = 126,
338+
PM_SOURCE_ENCODING_NODE = 127,
339+
PM_SOURCE_FILE_NODE = 128,
340+
PM_SOURCE_LINE_NODE = 129,
341+
PM_SPLAT_NODE = 130,
342+
PM_STATEMENTS_NODE = 131,
343+
PM_STRING_CONCAT_NODE = 132,
344+
PM_STRING_NODE = 133,
345+
PM_SUPER_NODE = 134,
346+
PM_SYMBOL_NODE = 135,
347+
PM_TRUE_NODE = 136,
348+
PM_UNDEF_NODE = 137,
349+
PM_UNLESS_NODE = 138,
350+
PM_UNTIL_NODE = 139,
351+
PM_WHEN_NODE = 140,
352+
PM_WHILE_NODE = 141,
353+
PM_X_STRING_NODE = 142,
354+
PM_YIELD_NODE = 143,
353355
PM_SCOPE_NODE
354356
};
355357

@@ -424,6 +426,8 @@ typedef struct pm_and_node {
424426
// ArgumentsNode
425427
//
426428
// Type: PM_ARGUMENTS_NODE
429+
// Flags:
430+
// PM_ARGUMENTS_NODE_FLAGS_KEYWORD_SPLAT
427431
typedef struct pm_arguments_node {
428432
pm_node_t base;
429433
struct pm_node_list arguments;
@@ -562,9 +566,6 @@ typedef struct pm_call_and_write_node {
562566
struct pm_node *receiver;
563567
pm_location_t call_operator_loc;
564568
pm_location_t message_loc;
565-
pm_location_t opening_loc;
566-
struct pm_arguments_node *arguments;
567-
pm_location_t closing_loc;
568569
pm_constant_id_t read_name;
569570
pm_constant_id_t write_name;
570571
pm_location_t operator_loc;
@@ -600,9 +601,6 @@ typedef struct pm_call_operator_write_node {
600601
struct pm_node *receiver;
601602
pm_location_t call_operator_loc;
602603
pm_location_t message_loc;
603-
pm_location_t opening_loc;
604-
struct pm_arguments_node *arguments;
605-
pm_location_t closing_loc;
606604
pm_constant_id_t read_name;
607605
pm_constant_id_t write_name;
608606
pm_constant_id_t operator;
@@ -621,9 +619,6 @@ typedef struct pm_call_or_write_node {
621619
struct pm_node *receiver;
622620
pm_location_t call_operator_loc;
623621
pm_location_t message_loc;
624-
pm_location_t opening_loc;
625-
struct pm_arguments_node *arguments;
626-
pm_location_t closing_loc;
627622
pm_constant_id_t read_name;
628623
pm_constant_id_t write_name;
629624
pm_location_t operator_loc;
@@ -1071,8 +1066,8 @@ typedef struct pm_hash_node {
10711066
typedef struct pm_hash_pattern_node {
10721067
pm_node_t base;
10731068
struct pm_node *constant;
1074-
struct pm_node_list assocs;
1075-
struct pm_node *kwrest;
1069+
struct pm_node_list elements;
1070+
struct pm_node *rest;
10761071
pm_location_t opening_loc;
10771072
pm_location_t closing_loc;
10781073
} pm_hash_pattern_node_t;
@@ -1116,6 +1111,61 @@ typedef struct pm_in_node {
11161111
pm_location_t then_loc;
11171112
} pm_in_node_t;
11181113

1114+
// IndexAndWriteNode
1115+
//
1116+
// Type: PM_INDEX_AND_WRITE_NODE
1117+
// Flags:
1118+
// PM_CALL_NODE_FLAGS_SAFE_NAVIGATION
1119+
// PM_CALL_NODE_FLAGS_VARIABLE_CALL
1120+
typedef struct pm_index_and_write_node {
1121+
pm_node_t base;
1122+
struct pm_node *receiver;
1123+
pm_location_t call_operator_loc;
1124+
pm_location_t opening_loc;
1125+
struct pm_arguments_node *arguments;
1126+
pm_location_t closing_loc;
1127+
struct pm_node *block;
1128+
pm_location_t operator_loc;
1129+
struct pm_node *value;
1130+
} pm_index_and_write_node_t;
1131+
1132+
// IndexOperatorWriteNode
1133+
//
1134+
// Type: PM_INDEX_OPERATOR_WRITE_NODE
1135+
// Flags:
1136+
// PM_CALL_NODE_FLAGS_SAFE_NAVIGATION
1137+
// PM_CALL_NODE_FLAGS_VARIABLE_CALL
1138+
typedef struct pm_index_operator_write_node {
1139+
pm_node_t base;
1140+
struct pm_node *receiver;
1141+
pm_location_t call_operator_loc;
1142+
pm_location_t opening_loc;
1143+
struct pm_arguments_node *arguments;
1144+
pm_location_t closing_loc;
1145+
struct pm_node *block;
1146+
pm_constant_id_t operator;
1147+
pm_location_t operator_loc;
1148+
struct pm_node *value;
1149+
} pm_index_operator_write_node_t;
1150+
1151+
// IndexOrWriteNode
1152+
//
1153+
// Type: PM_INDEX_OR_WRITE_NODE
1154+
// Flags:
1155+
// PM_CALL_NODE_FLAGS_SAFE_NAVIGATION
1156+
// PM_CALL_NODE_FLAGS_VARIABLE_CALL
1157+
typedef struct pm_index_or_write_node {
1158+
pm_node_t base;
1159+
struct pm_node *receiver;
1160+
pm_location_t call_operator_loc;
1161+
pm_location_t opening_loc;
1162+
struct pm_arguments_node *arguments;
1163+
pm_location_t closing_loc;
1164+
struct pm_node *block;
1165+
pm_location_t operator_loc;
1166+
struct pm_node *value;
1167+
} pm_index_or_write_node_t;
1168+
11191169
// InstanceVariableAndWriteNode
11201170
//
11211171
// Type: PM_INSTANCE_VARIABLE_AND_WRITE_NODE
@@ -1439,7 +1489,9 @@ typedef struct pm_module_node {
14391489
// Type: PM_MULTI_TARGET_NODE
14401490
typedef struct pm_multi_target_node {
14411491
pm_node_t base;
1442-
struct pm_node_list targets;
1492+
struct pm_node_list lefts;
1493+
struct pm_node *rest;
1494+
struct pm_node_list rights;
14431495
pm_location_t lparen_loc;
14441496
pm_location_t rparen_loc;
14451497
} pm_multi_target_node_t;
@@ -1449,7 +1501,9 @@ typedef struct pm_multi_target_node {
14491501
// Type: PM_MULTI_WRITE_NODE
14501502
typedef struct pm_multi_write_node {
14511503
pm_node_t base;
1452-
struct pm_node_list targets;
1504+
struct pm_node_list lefts;
1505+
struct pm_node *rest;
1506+
struct pm_node_list rights;
14531507
pm_location_t lparen_loc;
14541508
pm_location_t rparen_loc;
14551509
pm_location_t operator_loc;
@@ -1632,16 +1686,6 @@ typedef struct pm_regular_expression_node {
16321686
pm_string_t unescaped;
16331687
} pm_regular_expression_node_t;
16341688

1635-
// RequiredDestructuredParameterNode
1636-
//
1637-
// Type: PM_REQUIRED_DESTRUCTURED_PARAMETER_NODE
1638-
typedef struct pm_required_destructured_parameter_node {
1639-
pm_node_t base;
1640-
struct pm_node_list parameters;
1641-
pm_location_t opening_loc;
1642-
pm_location_t closing_loc;
1643-
} pm_required_destructured_parameter_node_t;
1644-
16451689
// RequiredParameterNode
16461690
//
16471691
// Type: PM_REQUIRED_PARAMETER_NODE
@@ -1889,6 +1933,11 @@ typedef struct pm_yield_node {
18891933
pm_location_t rparen_loc;
18901934
} pm_yield_node_t;
18911935

1936+
// ArgumentsNodeFlags
1937+
typedef enum pm_arguments_node_flags {
1938+
PM_ARGUMENTS_NODE_FLAGS_KEYWORD_SPLAT = 1 << 0,
1939+
} pm_arguments_node_flags_t;
1940+
18921941
// CallNodeFlags
18931942
typedef enum pm_call_node_flags {
18941943
PM_CALL_NODE_FLAGS_SAFE_NAVIGATION = 1 << 0,

src/main/c/yarp/include/prism/diagnostic.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ typedef enum {
158158
PM_ERR_NUMBERED_PARAMETER_NOT_ALLOWED,
159159
PM_ERR_NUMBERED_PARAMETER_OUTER_SCOPE,
160160
PM_ERR_OPERATOR_MULTI_ASSIGN,
161+
PM_ERR_OPERATOR_WRITE_ARGUMENTS,
161162
PM_ERR_OPERATOR_WRITE_BLOCK,
162163
PM_ERR_PARAMETER_ASSOC_SPLAT_MULTI,
163164
PM_ERR_PARAMETER_BLOCK_MULTI,

0 commit comments

Comments
 (0)