From 84b5274143bf54f77f9950eeba72a64cc761dd45 Mon Sep 17 00:00:00 2001 From: Jemma Issroff Date: Wed, 19 Jul 2023 16:15:01 -0400 Subject: [PATCH] [ruby/yarp] Resync YARP (#8098) --- common.mk | 5 - yarp/defines.h | 6 + yarp/node.c | 261 ++++++++++++++++++++++++++++++++++++++++ yarp/node.h | 3 + yarp/util/yp_snprintf.c | 14 --- yarp/yarp.c | 2 +- 6 files changed, 271 insertions(+), 20 deletions(-) delete mode 100644 yarp/util/yp_snprintf.c diff --git a/common.mk b/common.mk index d7f031a1c5..ffe04bd6af 100644 --- a/common.mk +++ b/common.mk @@ -124,7 +124,6 @@ YARP_FILES = yarp/api_node.$(OBJEXT) \ yarp/util/yp_list.$(OBJEXT) \ yarp/util/yp_memchr.$(OBJEXT) \ yarp/util/yp_newline_list.$(OBJEXT) \ - yarp/util/yp_snprintf.$(OBJEXT) \ yarp/util/yp_state_stack.$(OBJEXT) \ yarp/util/yp_string.$(OBJEXT) \ yarp/util/yp_string_list.$(OBJEXT) \ @@ -19665,10 +19664,6 @@ yarp/util/yp_newline_list.$(OBJEXT): $(top_srcdir)/yarp/defines.h yarp/util/yp_newline_list.$(OBJEXT): $(top_srcdir)/yarp/util/yp_newline_list.c yarp/util/yp_newline_list.$(OBJEXT): $(top_srcdir)/yarp/util/yp_newline_list.h yarp/util/yp_newline_list.$(OBJEXT): {$(VPATH)}config.h -yarp/util/yp_snprintf.$(OBJEXT): $(top_srcdir)/yarp/config.h -yarp/util/yp_snprintf.$(OBJEXT): $(top_srcdir)/yarp/defines.h -yarp/util/yp_snprintf.$(OBJEXT): $(top_srcdir)/yarp/util/yp_snprintf.c -yarp/util/yp_snprintf.$(OBJEXT): {$(VPATH)}config.h yarp/util/yp_state_stack.$(OBJEXT): $(top_srcdir)/yarp/config.h yarp/util/yp_state_stack.$(OBJEXT): $(top_srcdir)/yarp/defines.h yarp/util/yp_state_stack.$(OBJEXT): $(top_srcdir)/yarp/util/yp_state_stack.c diff --git a/yarp/defines.h b/yarp/defines.h index 5dba303a3d..ea5db993c9 100644 --- a/yarp/defines.h +++ b/yarp/defines.h @@ -45,6 +45,12 @@ int yp_snprintf(char *dest, YP_ATTRIBUTE_UNUSED size_t size, const char *format, #if defined(HAVE_SNPRINTF) // We use snprintf if it's available # define yp_snprintf snprintf + +#else + // In case snprintf isn't present on the system, we provide our own that simply + // forwards to the less-safe sprintf. +# define yp_snprintf(dest, size, ...) sprintf((dest), __VA_ARGS__) + #endif #endif diff --git a/yarp/node.c b/yarp/node.c index 0b45624fc7..f02cac3f3c 100644 --- a/yarp/node.c +++ b/yarp/node.c @@ -1732,3 +1732,264 @@ yp_node_memsize(yp_node_t *node, yp_memsize_t *memsize) { *memsize = (yp_memsize_t) { .memsize = 0, .node_count = 0 }; yp_node_memsize_node(node, memsize); } + +// Returns a string representation of the given node type. +YP_EXPORTED_FUNCTION const char * +yp_node_type_to_str(yp_node_type_t node_type) +{ + switch (node_type) { + case YP_NODE_ALIAS_NODE: + return "YP_NODE_ALIAS_NODE"; + case YP_NODE_ALTERNATION_PATTERN_NODE: + return "YP_NODE_ALTERNATION_PATTERN_NODE"; + case YP_NODE_AND_NODE: + return "YP_NODE_AND_NODE"; + case YP_NODE_ARGUMENTS_NODE: + return "YP_NODE_ARGUMENTS_NODE"; + case YP_NODE_ARRAY_NODE: + return "YP_NODE_ARRAY_NODE"; + case YP_NODE_ARRAY_PATTERN_NODE: + return "YP_NODE_ARRAY_PATTERN_NODE"; + case YP_NODE_ASSOC_NODE: + return "YP_NODE_ASSOC_NODE"; + case YP_NODE_ASSOC_SPLAT_NODE: + return "YP_NODE_ASSOC_SPLAT_NODE"; + case YP_NODE_BACK_REFERENCE_READ_NODE: + return "YP_NODE_BACK_REFERENCE_READ_NODE"; + case YP_NODE_BEGIN_NODE: + return "YP_NODE_BEGIN_NODE"; + case YP_NODE_BLOCK_ARGUMENT_NODE: + return "YP_NODE_BLOCK_ARGUMENT_NODE"; + case YP_NODE_BLOCK_NODE: + return "YP_NODE_BLOCK_NODE"; + case YP_NODE_BLOCK_PARAMETER_NODE: + return "YP_NODE_BLOCK_PARAMETER_NODE"; + case YP_NODE_BLOCK_PARAMETERS_NODE: + return "YP_NODE_BLOCK_PARAMETERS_NODE"; + case YP_NODE_BREAK_NODE: + return "YP_NODE_BREAK_NODE"; + case YP_NODE_CALL_NODE: + return "YP_NODE_CALL_NODE"; + case YP_NODE_CALL_OPERATOR_AND_WRITE_NODE: + return "YP_NODE_CALL_OPERATOR_AND_WRITE_NODE"; + case YP_NODE_CALL_OPERATOR_OR_WRITE_NODE: + return "YP_NODE_CALL_OPERATOR_OR_WRITE_NODE"; + case YP_NODE_CALL_OPERATOR_WRITE_NODE: + return "YP_NODE_CALL_OPERATOR_WRITE_NODE"; + case YP_NODE_CAPTURE_PATTERN_NODE: + return "YP_NODE_CAPTURE_PATTERN_NODE"; + case YP_NODE_CASE_NODE: + return "YP_NODE_CASE_NODE"; + case YP_NODE_CLASS_NODE: + return "YP_NODE_CLASS_NODE"; + case YP_NODE_CLASS_VARIABLE_OPERATOR_AND_WRITE_NODE: + return "YP_NODE_CLASS_VARIABLE_OPERATOR_AND_WRITE_NODE"; + case YP_NODE_CLASS_VARIABLE_OPERATOR_OR_WRITE_NODE: + return "YP_NODE_CLASS_VARIABLE_OPERATOR_OR_WRITE_NODE"; + case YP_NODE_CLASS_VARIABLE_OPERATOR_WRITE_NODE: + return "YP_NODE_CLASS_VARIABLE_OPERATOR_WRITE_NODE"; + case YP_NODE_CLASS_VARIABLE_READ_NODE: + return "YP_NODE_CLASS_VARIABLE_READ_NODE"; + case YP_NODE_CLASS_VARIABLE_WRITE_NODE: + return "YP_NODE_CLASS_VARIABLE_WRITE_NODE"; + case YP_NODE_CONSTANT_OPERATOR_AND_WRITE_NODE: + return "YP_NODE_CONSTANT_OPERATOR_AND_WRITE_NODE"; + case YP_NODE_CONSTANT_OPERATOR_OR_WRITE_NODE: + return "YP_NODE_CONSTANT_OPERATOR_OR_WRITE_NODE"; + case YP_NODE_CONSTANT_OPERATOR_WRITE_NODE: + return "YP_NODE_CONSTANT_OPERATOR_WRITE_NODE"; + case YP_NODE_CONSTANT_PATH_NODE: + return "YP_NODE_CONSTANT_PATH_NODE"; + case YP_NODE_CONSTANT_PATH_OPERATOR_AND_WRITE_NODE: + return "YP_NODE_CONSTANT_PATH_OPERATOR_AND_WRITE_NODE"; + case YP_NODE_CONSTANT_PATH_OPERATOR_OR_WRITE_NODE: + return "YP_NODE_CONSTANT_PATH_OPERATOR_OR_WRITE_NODE"; + case YP_NODE_CONSTANT_PATH_OPERATOR_WRITE_NODE: + return "YP_NODE_CONSTANT_PATH_OPERATOR_WRITE_NODE"; + case YP_NODE_CONSTANT_PATH_WRITE_NODE: + return "YP_NODE_CONSTANT_PATH_WRITE_NODE"; + case YP_NODE_CONSTANT_READ_NODE: + return "YP_NODE_CONSTANT_READ_NODE"; + case YP_NODE_DEF_NODE: + return "YP_NODE_DEF_NODE"; + case YP_NODE_DEFINED_NODE: + return "YP_NODE_DEFINED_NODE"; + case YP_NODE_ELSE_NODE: + return "YP_NODE_ELSE_NODE"; + case YP_NODE_EMBEDDED_STATEMENTS_NODE: + return "YP_NODE_EMBEDDED_STATEMENTS_NODE"; + case YP_NODE_EMBEDDED_VARIABLE_NODE: + return "YP_NODE_EMBEDDED_VARIABLE_NODE"; + case YP_NODE_ENSURE_NODE: + return "YP_NODE_ENSURE_NODE"; + case YP_NODE_FALSE_NODE: + return "YP_NODE_FALSE_NODE"; + case YP_NODE_FIND_PATTERN_NODE: + return "YP_NODE_FIND_PATTERN_NODE"; + case YP_NODE_FLOAT_NODE: + return "YP_NODE_FLOAT_NODE"; + case YP_NODE_FOR_NODE: + return "YP_NODE_FOR_NODE"; + case YP_NODE_FORWARDING_ARGUMENTS_NODE: + return "YP_NODE_FORWARDING_ARGUMENTS_NODE"; + case YP_NODE_FORWARDING_PARAMETER_NODE: + return "YP_NODE_FORWARDING_PARAMETER_NODE"; + case YP_NODE_FORWARDING_SUPER_NODE: + return "YP_NODE_FORWARDING_SUPER_NODE"; + case YP_NODE_GLOBAL_VARIABLE_OPERATOR_AND_WRITE_NODE: + return "YP_NODE_GLOBAL_VARIABLE_OPERATOR_AND_WRITE_NODE"; + case YP_NODE_GLOBAL_VARIABLE_OPERATOR_OR_WRITE_NODE: + return "YP_NODE_GLOBAL_VARIABLE_OPERATOR_OR_WRITE_NODE"; + case YP_NODE_GLOBAL_VARIABLE_OPERATOR_WRITE_NODE: + return "YP_NODE_GLOBAL_VARIABLE_OPERATOR_WRITE_NODE"; + case YP_NODE_GLOBAL_VARIABLE_READ_NODE: + return "YP_NODE_GLOBAL_VARIABLE_READ_NODE"; + case YP_NODE_GLOBAL_VARIABLE_WRITE_NODE: + return "YP_NODE_GLOBAL_VARIABLE_WRITE_NODE"; + case YP_NODE_HASH_NODE: + return "YP_NODE_HASH_NODE"; + case YP_NODE_HASH_PATTERN_NODE: + return "YP_NODE_HASH_PATTERN_NODE"; + case YP_NODE_IF_NODE: + return "YP_NODE_IF_NODE"; + case YP_NODE_IMAGINARY_NODE: + return "YP_NODE_IMAGINARY_NODE"; + case YP_NODE_IN_NODE: + return "YP_NODE_IN_NODE"; + case YP_NODE_INSTANCE_VARIABLE_OPERATOR_AND_WRITE_NODE: + return "YP_NODE_INSTANCE_VARIABLE_OPERATOR_AND_WRITE_NODE"; + case YP_NODE_INSTANCE_VARIABLE_OPERATOR_OR_WRITE_NODE: + return "YP_NODE_INSTANCE_VARIABLE_OPERATOR_OR_WRITE_NODE"; + case YP_NODE_INSTANCE_VARIABLE_OPERATOR_WRITE_NODE: + return "YP_NODE_INSTANCE_VARIABLE_OPERATOR_WRITE_NODE"; + case YP_NODE_INSTANCE_VARIABLE_READ_NODE: + return "YP_NODE_INSTANCE_VARIABLE_READ_NODE"; + case YP_NODE_INSTANCE_VARIABLE_WRITE_NODE: + return "YP_NODE_INSTANCE_VARIABLE_WRITE_NODE"; + case YP_NODE_INTEGER_NODE: + return "YP_NODE_INTEGER_NODE"; + case YP_NODE_INTERPOLATED_REGULAR_EXPRESSION_NODE: + return "YP_NODE_INTERPOLATED_REGULAR_EXPRESSION_NODE"; + case YP_NODE_INTERPOLATED_STRING_NODE: + return "YP_NODE_INTERPOLATED_STRING_NODE"; + case YP_NODE_INTERPOLATED_SYMBOL_NODE: + return "YP_NODE_INTERPOLATED_SYMBOL_NODE"; + case YP_NODE_INTERPOLATED_X_STRING_NODE: + return "YP_NODE_INTERPOLATED_X_STRING_NODE"; + case YP_NODE_KEYWORD_HASH_NODE: + return "YP_NODE_KEYWORD_HASH_NODE"; + case YP_NODE_KEYWORD_PARAMETER_NODE: + return "YP_NODE_KEYWORD_PARAMETER_NODE"; + case YP_NODE_KEYWORD_REST_PARAMETER_NODE: + return "YP_NODE_KEYWORD_REST_PARAMETER_NODE"; + case YP_NODE_LAMBDA_NODE: + return "YP_NODE_LAMBDA_NODE"; + case YP_NODE_LOCAL_VARIABLE_OPERATOR_AND_WRITE_NODE: + return "YP_NODE_LOCAL_VARIABLE_OPERATOR_AND_WRITE_NODE"; + case YP_NODE_LOCAL_VARIABLE_OPERATOR_OR_WRITE_NODE: + return "YP_NODE_LOCAL_VARIABLE_OPERATOR_OR_WRITE_NODE"; + case YP_NODE_LOCAL_VARIABLE_OPERATOR_WRITE_NODE: + return "YP_NODE_LOCAL_VARIABLE_OPERATOR_WRITE_NODE"; + case YP_NODE_LOCAL_VARIABLE_READ_NODE: + return "YP_NODE_LOCAL_VARIABLE_READ_NODE"; + case YP_NODE_LOCAL_VARIABLE_WRITE_NODE: + return "YP_NODE_LOCAL_VARIABLE_WRITE_NODE"; + case YP_NODE_MATCH_PREDICATE_NODE: + return "YP_NODE_MATCH_PREDICATE_NODE"; + case YP_NODE_MATCH_REQUIRED_NODE: + return "YP_NODE_MATCH_REQUIRED_NODE"; + case YP_NODE_MISSING_NODE: + return "YP_NODE_MISSING_NODE"; + case YP_NODE_MODULE_NODE: + return "YP_NODE_MODULE_NODE"; + case YP_NODE_MULTI_WRITE_NODE: + return "YP_NODE_MULTI_WRITE_NODE"; + case YP_NODE_NEXT_NODE: + return "YP_NODE_NEXT_NODE"; + case YP_NODE_NIL_NODE: + return "YP_NODE_NIL_NODE"; + case YP_NODE_NO_KEYWORDS_PARAMETER_NODE: + return "YP_NODE_NO_KEYWORDS_PARAMETER_NODE"; + case YP_NODE_NUMBERED_REFERENCE_READ_NODE: + return "YP_NODE_NUMBERED_REFERENCE_READ_NODE"; + case YP_NODE_OPTIONAL_PARAMETER_NODE: + return "YP_NODE_OPTIONAL_PARAMETER_NODE"; + case YP_NODE_OR_NODE: + return "YP_NODE_OR_NODE"; + case YP_NODE_PARAMETERS_NODE: + return "YP_NODE_PARAMETERS_NODE"; + case YP_NODE_PARENTHESES_NODE: + return "YP_NODE_PARENTHESES_NODE"; + case YP_NODE_PINNED_EXPRESSION_NODE: + return "YP_NODE_PINNED_EXPRESSION_NODE"; + case YP_NODE_PINNED_VARIABLE_NODE: + return "YP_NODE_PINNED_VARIABLE_NODE"; + case YP_NODE_POST_EXECUTION_NODE: + return "YP_NODE_POST_EXECUTION_NODE"; + case YP_NODE_PRE_EXECUTION_NODE: + return "YP_NODE_PRE_EXECUTION_NODE"; + case YP_NODE_PROGRAM_NODE: + return "YP_NODE_PROGRAM_NODE"; + case YP_NODE_RANGE_NODE: + return "YP_NODE_RANGE_NODE"; + case YP_NODE_RATIONAL_NODE: + return "YP_NODE_RATIONAL_NODE"; + case YP_NODE_REDO_NODE: + return "YP_NODE_REDO_NODE"; + case YP_NODE_REGULAR_EXPRESSION_NODE: + return "YP_NODE_REGULAR_EXPRESSION_NODE"; + case YP_NODE_REQUIRED_DESTRUCTURED_PARAMETER_NODE: + return "YP_NODE_REQUIRED_DESTRUCTURED_PARAMETER_NODE"; + case YP_NODE_REQUIRED_PARAMETER_NODE: + return "YP_NODE_REQUIRED_PARAMETER_NODE"; + case YP_NODE_RESCUE_MODIFIER_NODE: + return "YP_NODE_RESCUE_MODIFIER_NODE"; + case YP_NODE_RESCUE_NODE: + return "YP_NODE_RESCUE_NODE"; + case YP_NODE_REST_PARAMETER_NODE: + return "YP_NODE_REST_PARAMETER_NODE"; + case YP_NODE_RETRY_NODE: + return "YP_NODE_RETRY_NODE"; + case YP_NODE_RETURN_NODE: + return "YP_NODE_RETURN_NODE"; + case YP_NODE_SELF_NODE: + return "YP_NODE_SELF_NODE"; + case YP_NODE_SINGLETON_CLASS_NODE: + return "YP_NODE_SINGLETON_CLASS_NODE"; + case YP_NODE_SOURCE_ENCODING_NODE: + return "YP_NODE_SOURCE_ENCODING_NODE"; + case YP_NODE_SOURCE_FILE_NODE: + return "YP_NODE_SOURCE_FILE_NODE"; + case YP_NODE_SOURCE_LINE_NODE: + return "YP_NODE_SOURCE_LINE_NODE"; + case YP_NODE_SPLAT_NODE: + return "YP_NODE_SPLAT_NODE"; + case YP_NODE_STATEMENTS_NODE: + return "YP_NODE_STATEMENTS_NODE"; + case YP_NODE_STRING_CONCAT_NODE: + return "YP_NODE_STRING_CONCAT_NODE"; + case YP_NODE_STRING_NODE: + return "YP_NODE_STRING_NODE"; + case YP_NODE_SUPER_NODE: + return "YP_NODE_SUPER_NODE"; + case YP_NODE_SYMBOL_NODE: + return "YP_NODE_SYMBOL_NODE"; + case YP_NODE_TRUE_NODE: + return "YP_NODE_TRUE_NODE"; + case YP_NODE_UNDEF_NODE: + return "YP_NODE_UNDEF_NODE"; + case YP_NODE_UNLESS_NODE: + return "YP_NODE_UNLESS_NODE"; + case YP_NODE_UNTIL_NODE: + return "YP_NODE_UNTIL_NODE"; + case YP_NODE_WHEN_NODE: + return "YP_NODE_WHEN_NODE"; + case YP_NODE_WHILE_NODE: + return "YP_NODE_WHILE_NODE"; + case YP_NODE_X_STRING_NODE: + return "YP_NODE_X_STRING_NODE"; + case YP_NODE_YIELD_NODE: + return "YP_NODE_YIELD_NODE"; + } + return "\0"; +} diff --git a/yarp/node.h b/yarp/node.h index f75e03ba10..a107baddb8 100644 --- a/yarp/node.h +++ b/yarp/node.h @@ -27,6 +27,9 @@ typedef struct { // Calculates the memory footprint of a given node. YP_EXPORTED_FUNCTION void yp_node_memsize(yp_node_t *node, yp_memsize_t *memsize); +// Returns a string representation of the given node type. +YP_EXPORTED_FUNCTION const char * yp_node_type_to_str(yp_node_type_t node_type); + #define YP_EMPTY_NODE_LIST ((yp_node_list_t) { .nodes = NULL, .size = 0, .capacity = 0 }) #define YP_EMPTY_LOCATION_LIST ((yp_location_list_t) { .locations = NULL, .size = 0, .capacity = 0 }) diff --git a/yarp/util/yp_snprintf.c b/yarp/util/yp_snprintf.c deleted file mode 100644 index f3b69c2f58..0000000000 --- a/yarp/util/yp_snprintf.c +++ /dev/null @@ -1,14 +0,0 @@ -#include "yarp/defines.h" - -#ifndef HAVE_SNPRINTF -// In case snprintf isn't present on the system, we provide our own that simply -// forwards to the less-safe sprintf. -int -yp_snprintf(char *dest, YP_ATTRIBUTE_UNUSED size_t size, const char *format, ...) { - va_list args; - va_start(args, format); - int result = vsprintf(dest, format, args); - va_end(args); - return result; -} -#endif diff --git a/yarp/yarp.c b/yarp/yarp.c index 8e920b3571..c80aa5499a 100644 --- a/yarp/yarp.c +++ b/yarp/yarp.c @@ -12391,7 +12391,7 @@ parse_expression_infix(yp_parser_t *parser, yp_node_t *node, yp_binding_power_t YP_ATTRIBUTE_UNUSED bool captured_group_names = yp_regexp_named_capture_group_names(content_loc->start, (size_t) (content_loc->end - content_loc->start), &named_captures); - // We assert that the the regex was successfully parsed + // We assert that the regex was successfully parsed assert(captured_group_names); for (size_t index = 0; index < named_captures.length; index++) {