summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoryui-knk <spiketeika@gmail.com>2023-12-28 11:52:50 +0900
committerYuichiro Kaneko <spiketeika@gmail.com>2023-12-28 13:17:36 +0900
commit4374236e959c1e585611acfc7a2e3d2142265ab0 (patch)
tree737356bfa56a37a7a62762b04eb6f6de5261fb6f
parent02973b78f499acc28c714a082c82a846314a911f (diff)
Add errno_ptr property for Universal Parser
-rw-r--r--ruby_parser.c7
-rw-r--r--rubyparser.h1
-rw-r--r--universal_parser.c2
3 files changed, 10 insertions, 0 deletions
diff --git a/ruby_parser.c b/ruby_parser.c
index 68d45768be..844dbbaa6a 100644
--- a/ruby_parser.c
+++ b/ruby_parser.c
@@ -450,6 +450,12 @@ ruby_verbose2(void)
return ruby_verbose;
}
+static int *
+rb_errno_ptr2(void)
+{
+ return rb_errno_ptr();
+}
+
static int
type_p(VALUE obj, int t)
{
@@ -724,6 +730,7 @@ rb_parser_config_initialize(rb_parser_config_t *config)
config->bug = rb_bug;
config->fatal = rb_fatal;
config->verbose = ruby_verbose2;
+ config->errno_ptr = rb_errno_ptr2;
config->make_backtrace = rb_make_backtrace;
diff --git a/rubyparser.h b/rubyparser.h
index 0add750038..e6a0a6bc8d 100644
--- a/rubyparser.h
+++ b/rubyparser.h
@@ -1352,6 +1352,7 @@ typedef struct rb_parser_config_struct {
void (*bug)(const char *fmt, ...);
void (*fatal)(const char *fmt, ...);
VALUE (*verbose)(void);
+ int *(*errno_ptr)(void);
/* VM */
VALUE (*make_backtrace)(void);
diff --git a/universal_parser.c b/universal_parser.c
index 8fc358b14a..61acaf7e05 100644
--- a/universal_parser.c
+++ b/universal_parser.c
@@ -331,6 +331,8 @@ struct rb_imemo_tmpbuf_struct {
#define rb_fatal p->config->fatal
#undef ruby_verbose
#define ruby_verbose p->config->verbose()
+#undef errno
+#define errno (*p->config->errno_ptr())
#define rb_make_backtrace p->config->make_backtrace