Skip to content

Commit d94e5df

Browse files
committed
1 parent 1d89a7e commit d94e5df

33 files changed

+8092
-2102
lines changed

src/main/c/yarp/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ FUZZ_OUTPUT_DIR = $(shell pwd)/fuzz/output
1111
SOEXT := $(shell ruby -e 'puts RbConfig::CONFIG["SOEXT"]')
1212

1313
CPPFLAGS := -Iinclude
14-
CFLAGS := -g -O2 -std=c99 -Wall -Werror -Wextra -Wpedantic -Wundef -Wconversion -Wno-missing-braces -fPIC -fvisibility=hidden
14+
CFLAGS := -g -O2 -std=c99 -Wall -Werror -Wextra -Wpedantic -Wundef -Wconversion -Wno-missing-braces -fPIC -fvisibility=hidden $(CFLAGS)
1515
CC := cc
1616
WASI_SDK_PATH := /opt/wasi-sdk
1717

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,15 @@ const char * pm_token_type_human(pm_token_type_t token_type);
187187
*/
188188
PRISM_EXPORTED_FUNCTION void pm_parser_errors_format(const pm_parser_t *parser, pm_buffer_t *buffer, bool colorize);
189189

190+
/**
191+
* Dump JSON to the given buffer.
192+
*
193+
* @param buffer The buffer to serialize to.
194+
* @param parser The parser that parsed the node.
195+
* @param node The node to serialize.
196+
*/
197+
PRISM_EXPORTED_FUNCTION void pm_dump_json(pm_buffer_t *buffer, const pm_parser_t *parser, const pm_node_t *node);
198+
190199
/**
191200
* @mainpage
192201
*

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

Lines changed: 77 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -829,188 +829,191 @@ enum pm_node_type {
829829
/** InterpolatedXStringNode */
830830
PM_INTERPOLATED_X_STRING_NODE = 87,
831831

832+
/** ItParametersNode */
833+
PM_IT_PARAMETERS_NODE = 88,
834+
832835
/** KeywordHashNode */
833-
PM_KEYWORD_HASH_NODE = 88,
836+
PM_KEYWORD_HASH_NODE = 89,
834837

835838
/** KeywordRestParameterNode */
836-
PM_KEYWORD_REST_PARAMETER_NODE = 89,
839+
PM_KEYWORD_REST_PARAMETER_NODE = 90,
837840

838841
/** LambdaNode */
839-
PM_LAMBDA_NODE = 90,
842+
PM_LAMBDA_NODE = 91,
840843

841844
/** LocalVariableAndWriteNode */
842-
PM_LOCAL_VARIABLE_AND_WRITE_NODE = 91,
845+
PM_LOCAL_VARIABLE_AND_WRITE_NODE = 92,
843846

844847
/** LocalVariableOperatorWriteNode */
845-
PM_LOCAL_VARIABLE_OPERATOR_WRITE_NODE = 92,
848+
PM_LOCAL_VARIABLE_OPERATOR_WRITE_NODE = 93,
846849

847850
/** LocalVariableOrWriteNode */
848-
PM_LOCAL_VARIABLE_OR_WRITE_NODE = 93,
851+
PM_LOCAL_VARIABLE_OR_WRITE_NODE = 94,
849852

850853
/** LocalVariableReadNode */
851-
PM_LOCAL_VARIABLE_READ_NODE = 94,
854+
PM_LOCAL_VARIABLE_READ_NODE = 95,
852855

853856
/** LocalVariableTargetNode */
854-
PM_LOCAL_VARIABLE_TARGET_NODE = 95,
857+
PM_LOCAL_VARIABLE_TARGET_NODE = 96,
855858

856859
/** LocalVariableWriteNode */
857-
PM_LOCAL_VARIABLE_WRITE_NODE = 96,
860+
PM_LOCAL_VARIABLE_WRITE_NODE = 97,
858861

859862
/** MatchLastLineNode */
860-
PM_MATCH_LAST_LINE_NODE = 97,
863+
PM_MATCH_LAST_LINE_NODE = 98,
861864

862865
/** MatchPredicateNode */
863-
PM_MATCH_PREDICATE_NODE = 98,
866+
PM_MATCH_PREDICATE_NODE = 99,
864867

865868
/** MatchRequiredNode */
866-
PM_MATCH_REQUIRED_NODE = 99,
869+
PM_MATCH_REQUIRED_NODE = 100,
867870

868871
/** MatchWriteNode */
869-
PM_MATCH_WRITE_NODE = 100,
872+
PM_MATCH_WRITE_NODE = 101,
870873

871874
/** MissingNode */
872-
PM_MISSING_NODE = 101,
875+
PM_MISSING_NODE = 102,
873876

874877
/** ModuleNode */
875-
PM_MODULE_NODE = 102,
878+
PM_MODULE_NODE = 103,
876879

877880
/** MultiTargetNode */
878-
PM_MULTI_TARGET_NODE = 103,
881+
PM_MULTI_TARGET_NODE = 104,
879882

880883
/** MultiWriteNode */
881-
PM_MULTI_WRITE_NODE = 104,
884+
PM_MULTI_WRITE_NODE = 105,
882885

883886
/** NextNode */
884-
PM_NEXT_NODE = 105,
887+
PM_NEXT_NODE = 106,
885888

886889
/** NilNode */
887-
PM_NIL_NODE = 106,
890+
PM_NIL_NODE = 107,
888891

889892
/** NoKeywordsParameterNode */
890-
PM_NO_KEYWORDS_PARAMETER_NODE = 107,
893+
PM_NO_KEYWORDS_PARAMETER_NODE = 108,
891894

892895
/** NumberedParametersNode */
893-
PM_NUMBERED_PARAMETERS_NODE = 108,
896+
PM_NUMBERED_PARAMETERS_NODE = 109,
894897

895898
/** NumberedReferenceReadNode */
896-
PM_NUMBERED_REFERENCE_READ_NODE = 109,
899+
PM_NUMBERED_REFERENCE_READ_NODE = 110,
897900

898901
/** OptionalKeywordParameterNode */
899-
PM_OPTIONAL_KEYWORD_PARAMETER_NODE = 110,
902+
PM_OPTIONAL_KEYWORD_PARAMETER_NODE = 111,
900903

901904
/** OptionalParameterNode */
902-
PM_OPTIONAL_PARAMETER_NODE = 111,
905+
PM_OPTIONAL_PARAMETER_NODE = 112,
903906

904907
/** OrNode */
905-
PM_OR_NODE = 112,
908+
PM_OR_NODE = 113,
906909

907910
/** ParametersNode */
908-
PM_PARAMETERS_NODE = 113,
911+
PM_PARAMETERS_NODE = 114,
909912

910913
/** ParenthesesNode */
911-
PM_PARENTHESES_NODE = 114,
914+
PM_PARENTHESES_NODE = 115,
912915

913916
/** PinnedExpressionNode */
914-
PM_PINNED_EXPRESSION_NODE = 115,
917+
PM_PINNED_EXPRESSION_NODE = 116,
915918

916919
/** PinnedVariableNode */
917-
PM_PINNED_VARIABLE_NODE = 116,
920+
PM_PINNED_VARIABLE_NODE = 117,
918921

919922
/** PostExecutionNode */
920-
PM_POST_EXECUTION_NODE = 117,
923+
PM_POST_EXECUTION_NODE = 118,
921924

922925
/** PreExecutionNode */
923-
PM_PRE_EXECUTION_NODE = 118,
926+
PM_PRE_EXECUTION_NODE = 119,
924927

925928
/** ProgramNode */
926-
PM_PROGRAM_NODE = 119,
929+
PM_PROGRAM_NODE = 120,
927930

928931
/** RangeNode */
929-
PM_RANGE_NODE = 120,
932+
PM_RANGE_NODE = 121,
930933

931934
/** RationalNode */
932-
PM_RATIONAL_NODE = 121,
935+
PM_RATIONAL_NODE = 122,
933936

934937
/** RedoNode */
935-
PM_REDO_NODE = 122,
938+
PM_REDO_NODE = 123,
936939

937940
/** RegularExpressionNode */
938-
PM_REGULAR_EXPRESSION_NODE = 123,
941+
PM_REGULAR_EXPRESSION_NODE = 124,
939942

940943
/** RequiredKeywordParameterNode */
941-
PM_REQUIRED_KEYWORD_PARAMETER_NODE = 124,
944+
PM_REQUIRED_KEYWORD_PARAMETER_NODE = 125,
942945

943946
/** RequiredParameterNode */
944-
PM_REQUIRED_PARAMETER_NODE = 125,
947+
PM_REQUIRED_PARAMETER_NODE = 126,
945948

946949
/** RescueModifierNode */
947-
PM_RESCUE_MODIFIER_NODE = 126,
950+
PM_RESCUE_MODIFIER_NODE = 127,
948951

949952
/** RescueNode */
950-
PM_RESCUE_NODE = 127,
953+
PM_RESCUE_NODE = 128,
951954

952955
/** RestParameterNode */
953-
PM_REST_PARAMETER_NODE = 128,
956+
PM_REST_PARAMETER_NODE = 129,
954957

955958
/** RetryNode */
956-
PM_RETRY_NODE = 129,
959+
PM_RETRY_NODE = 130,
957960

958961
/** ReturnNode */
959-
PM_RETURN_NODE = 130,
962+
PM_RETURN_NODE = 131,
960963

961964
/** SelfNode */
962-
PM_SELF_NODE = 131,
965+
PM_SELF_NODE = 132,
963966

964967
/** SingletonClassNode */
965-
PM_SINGLETON_CLASS_NODE = 132,
968+
PM_SINGLETON_CLASS_NODE = 133,
966969

967970
/** SourceEncodingNode */
968-
PM_SOURCE_ENCODING_NODE = 133,
971+
PM_SOURCE_ENCODING_NODE = 134,
969972

970973
/** SourceFileNode */
971-
PM_SOURCE_FILE_NODE = 134,
974+
PM_SOURCE_FILE_NODE = 135,
972975

973976
/** SourceLineNode */
974-
PM_SOURCE_LINE_NODE = 135,
977+
PM_SOURCE_LINE_NODE = 136,
975978

976979
/** SplatNode */
977-
PM_SPLAT_NODE = 136,
980+
PM_SPLAT_NODE = 137,
978981

979982
/** StatementsNode */
980-
PM_STATEMENTS_NODE = 137,
983+
PM_STATEMENTS_NODE = 138,
981984

982985
/** StringNode */
983-
PM_STRING_NODE = 138,
986+
PM_STRING_NODE = 139,
984987

985988
/** SuperNode */
986-
PM_SUPER_NODE = 139,
989+
PM_SUPER_NODE = 140,
987990

988991
/** SymbolNode */
989-
PM_SYMBOL_NODE = 140,
992+
PM_SYMBOL_NODE = 141,
990993

991994
/** TrueNode */
992-
PM_TRUE_NODE = 141,
995+
PM_TRUE_NODE = 142,
993996

994997
/** UndefNode */
995-
PM_UNDEF_NODE = 142,
998+
PM_UNDEF_NODE = 143,
996999

9971000
/** UnlessNode */
998-
PM_UNLESS_NODE = 143,
1001+
PM_UNLESS_NODE = 144,
9991002

10001003
/** UntilNode */
1001-
PM_UNTIL_NODE = 144,
1004+
PM_UNTIL_NODE = 145,
10021005

10031006
/** WhenNode */
1004-
PM_WHEN_NODE = 145,
1007+
PM_WHEN_NODE = 146,
10051008

10061009
/** WhileNode */
1007-
PM_WHILE_NODE = 146,
1010+
PM_WHILE_NODE = 147,
10081011

10091012
/** XStringNode */
1010-
PM_X_STRING_NODE = 147,
1013+
PM_X_STRING_NODE = 148,
10111014

10121015
/** YieldNode */
1013-
PM_YIELD_NODE = 148,
1016+
PM_YIELD_NODE = 149,
10141017

10151018
/** A special kind of node used for compilation. */
10161019
PM_SCOPE_NODE
@@ -1042,7 +1045,7 @@ static const pm_node_flags_t PM_NODE_FLAG_COMMON_MASK = (1 << (PM_NODE_FLAG_BITS
10421045
* Cast the type to an enum to allow the compiler to provide exhaustiveness
10431046
* checking.
10441047
*/
1045-
#define PM_NODE_TYPE(node) ((enum pm_node_type) node->type)
1048+
#define PM_NODE_TYPE(node) ((enum pm_node_type) (node)->type)
10461049

10471050
/**
10481051
* Return true if the type of the given node matches the given type.
@@ -3870,6 +3873,18 @@ typedef struct pm_interpolated_x_string_node {
38703873
pm_location_t closing_loc;
38713874
} pm_interpolated_x_string_node_t;
38723875

3876+
/**
3877+
* ItParametersNode
3878+
*
3879+
* Type: PM_IT_PARAMETERS_NODE
3880+
*
3881+
* @extends pm_node_t
3882+
*/
3883+
typedef struct pm_it_parameters_node {
3884+
/** The embedded base node. */
3885+
pm_node_t base;
3886+
} pm_it_parameters_node_t;
3887+
38733888
/**
38743889
* KeywordHashNode
38753890
*

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,4 +99,18 @@
9999
# define PM_STATIC_ASSERT(line, condition, message) typedef char PM_CONCATENATE(static_assert_, line)[(condition) ? 1 : -1]
100100
#endif
101101

102+
/**
103+
* In general, libc for embedded systems does not support memory-mapped files.
104+
* If the target platform is POSIX or Windows, we can map a file in memory and
105+
* read it in a more efficient manner.
106+
*/
107+
#ifdef _WIN32
108+
# define PRISM_HAS_MMAP
109+
#else
110+
# include <unistd.h>
111+
# ifdef _POSIX_MAPPED_FILES
112+
# define PRISM_HAS_MMAP
113+
# endif
114+
#endif
115+
102116
#endif

0 commit comments

Comments
 (0)