Remove dead code in `rb_gc_impl_ractor_cache_free`
[ruby.git] / goruby.c
blob3ca96bfda0641a129587b2f1c942200a2e700105
1 static void Init_golf_prelude(void);
2 static void *goruby_options(int argc, char **argv);
3 static int goruby_run_node(void *arg);
4 #define ruby_options goruby_options
5 #define ruby_run_node goruby_run_node
6 #include "main.c"
7 #undef ruby_options
8 #undef ruby_run_node
10 #if defined _WIN32
11 #include <io.h>
12 #include <fcntl.h>
13 #define pipe(p) _pipe(p, 32L, _O_NOINHERIT)
14 #elif defined HAVE_UNISTD_H
15 #include <unistd.h>
16 #endif
18 RUBY_EXTERN void *ruby_options(int argc, char **argv);
19 RUBY_EXTERN int ruby_run_node(void*);
21 #include "golf_prelude.rbbin"
23 static VALUE
24 init_golf(VALUE arg)
26 Init_golf_prelude();
27 rb_provide("golf.so");
28 return arg;
31 void *
32 goruby_options(int argc, char **argv)
34 static const char cmd[] = "END{require 'irb';IRB.start}";
35 int rw[2], infd;
36 void *ret;
38 if ((isatty(0) && isatty(1) && isatty(2)) && (pipe(rw) == 0)) {
39 ssize_t n;
40 infd = dup(0);
41 if (infd < 0) {
42 close(rw[0]);
43 close(rw[1]);
44 goto no_irb;
46 dup2(rw[0], 0);
47 close(rw[0]);
48 n = write(rw[1], cmd, sizeof(cmd) - 1);
49 close(rw[1]);
50 ret = n > 0 ? ruby_options(argc, argv) : NULL;
51 dup2(infd, 0);
52 close(infd);
53 return ret;
55 no_irb:
56 return ruby_options(argc, argv);
59 int
60 goruby_run_node(void *arg)
62 int state;
63 if (ruby_executable_node(arg, NULL) &&
64 NIL_P(rb_protect(init_golf, Qtrue, &state))) {
65 return state == EXIT_SUCCESS ? EXIT_FAILURE : state;
67 return ruby_run_node(arg);