extpp 0.0.9 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +1 -1
  3. data/README.md +2 -2
  4. data/Rakefile +1 -28
  5. data/doc/text/news.md +12 -0
  6. data/include/ruby/class.hpp +191 -14
  7. data/{ext/extpp → include/ruby}/function.hpp +20 -7
  8. data/include/ruby/object.hpp +45 -6
  9. data/include/ruby/protect.hpp +9 -2
  10. data/include/ruby.hpp +0 -10
  11. data/lib/extpp/compiler.rb +0 -6
  12. data/lib/extpp/setup.rb +0 -4
  13. data/lib/extpp/version.rb +1 -1
  14. data/lib/extpp.rb +0 -12
  15. metadata +9 -76
  16. data/ext/extpp/class.cpp +0 -277
  17. data/ext/extpp/extconf.rb +0 -110
  18. data/ext/extpp/function.cpp +0 -28
  19. data/ext/extpp/object.cpp +0 -48
  20. data/ext/extpp/protect.cpp +0 -12
  21. data/lib/extpp/platform.rb +0 -8
  22. data/test/fixtures/cast/Makefile +0 -269
  23. data/test/fixtures/cast/cast.cpp +0 -39
  24. data/test/fixtures/cast/cast.o +0 -0
  25. data/test/fixtures/cast/cast.so +0 -0
  26. data/test/fixtures/cast/extconf.rb +0 -4
  27. data/test/fixtures/cast/mkmf.log +0 -144
  28. data/test/fixtures/class/Makefile +0 -269
  29. data/test/fixtures/class/class.cpp +0 -46
  30. data/test/fixtures/class/class.o +0 -0
  31. data/test/fixtures/class/class.so +0 -0
  32. data/test/fixtures/class/extconf.rb +0 -4
  33. data/test/fixtures/class/mkmf.log +0 -144
  34. data/test/fixtures/object/Makefile +0 -269
  35. data/test/fixtures/object/extconf.rb +0 -4
  36. data/test/fixtures/object/mkmf.log +0 -144
  37. data/test/fixtures/object/object.cpp +0 -102
  38. data/test/fixtures/object/object.o +0 -0
  39. data/test/fixtures/object/object.so +0 -0
  40. data/test/fixtures/protect/Makefile +0 -269
  41. data/test/fixtures/protect/extconf.rb +0 -4
  42. data/test/fixtures/protect/mkmf.log +0 -144
  43. data/test/fixtures/protect/protect.cpp +0 -70
  44. data/test/fixtures/protect/protect.o +0 -0
  45. data/test/fixtures/protect/protect.so +0 -0
  46. data/test/helper.rb +0 -11
  47. data/test/run-test.rb +0 -31
  48. data/test/test-cast.rb +0 -46
  49. data/test/test-class.rb +0 -47
  50. data/test/test-object.rb +0 -68
  51. data/test/test-protect.rb +0 -54
@@ -1,269 +0,0 @@
1
-
2
- SHELL = /bin/sh
3
-
4
- # V=0 quiet, V=1 verbose. other values don't work.
5
- V = 0
6
- Q1 = $(V:1=)
7
- Q = $(Q1:0=@)
8
- ECHO1 = $(V:1=@ :)
9
- ECHO = $(ECHO1:0=@ echo)
10
- NULLCMD = :
11
-
12
- #### Start of system configuration section. ####
13
-
14
- srcdir = .
15
- topdir = /tmp/local/include/ruby-2.7.0
16
- hdrdir = $(topdir)
17
- arch_hdrdir = /tmp/local/include/ruby-2.7.0/x86_64-linux
18
- PATH_SEPARATOR = :
19
- VPATH = $(srcdir):$(arch_hdrdir)/ruby:$(hdrdir)/ruby
20
- prefix = $(DESTDIR)/tmp/local
21
- rubysitearchprefix = $(rubylibprefix)/$(sitearch)
22
- rubyarchprefix = $(rubylibprefix)/$(arch)
23
- rubylibprefix = $(libdir)/$(RUBY_BASE_NAME)
24
- exec_prefix = $(prefix)
25
- vendorarchhdrdir = $(vendorhdrdir)/$(sitearch)
26
- sitearchhdrdir = $(sitehdrdir)/$(sitearch)
27
- rubyarchhdrdir = $(rubyhdrdir)/$(arch)
28
- vendorhdrdir = $(rubyhdrdir)/vendor_ruby
29
- sitehdrdir = $(rubyhdrdir)/site_ruby
30
- rubyhdrdir = $(includedir)/$(RUBY_VERSION_NAME)
31
- vendorarchdir = $(vendorlibdir)/$(sitearch)
32
- vendorlibdir = $(vendordir)/$(ruby_version)
33
- vendordir = $(rubylibprefix)/vendor_ruby
34
- sitearchdir = $(sitelibdir)/$(sitearch)
35
- sitelibdir = $(sitedir)/$(ruby_version)
36
- sitedir = $(rubylibprefix)/site_ruby
37
- rubyarchdir = $(rubylibdir)/$(arch)
38
- rubylibdir = $(rubylibprefix)/$(ruby_version)
39
- sitearchincludedir = $(includedir)/$(sitearch)
40
- archincludedir = $(includedir)/$(arch)
41
- sitearchlibdir = $(libdir)/$(sitearch)
42
- archlibdir = $(libdir)/$(arch)
43
- ridir = $(datarootdir)/$(RI_BASE_NAME)
44
- mandir = $(datarootdir)/man
45
- localedir = $(datarootdir)/locale
46
- libdir = $(exec_prefix)/lib
47
- psdir = $(docdir)
48
- pdfdir = $(docdir)
49
- dvidir = $(docdir)
50
- htmldir = $(docdir)
51
- infodir = $(datarootdir)/info
52
- docdir = $(datarootdir)/doc/$(PACKAGE)
53
- oldincludedir = $(DESTDIR)/usr/include
54
- includedir = $(prefix)/include
55
- runstatedir = $(localstatedir)/run
56
- localstatedir = $(prefix)/var
57
- sharedstatedir = $(prefix)/com
58
- sysconfdir = $(prefix)/etc
59
- datadir = $(datarootdir)
60
- datarootdir = $(prefix)/share
61
- libexecdir = $(exec_prefix)/libexec
62
- sbindir = $(exec_prefix)/sbin
63
- bindir = $(exec_prefix)/bin
64
- archdir = $(rubyarchdir)
65
-
66
-
67
- CC_WRAPPER =
68
- CC = gcc
69
- CXX = g++
70
- LIBRUBY = $(LIBRUBY_SO)
71
- LIBRUBY_A = lib$(RUBY_SO_NAME)-static.a
72
- LIBRUBYARG_SHARED = -Wl,-rpath,$(libdir) -L$(libdir) -l$(RUBY_SO_NAME)
73
- LIBRUBYARG_STATIC = -Wl,-rpath,$(libdir) -L$(libdir) -l$(RUBY_SO_NAME)-static $(MAINLIBS)
74
- empty =
75
- OUTFLAG = -o $(empty)
76
- COUTFLAG = -o $(empty)
77
- CSRCFLAG = $(empty)
78
-
79
- RUBY_EXTCONF_H =
80
- cflags = $(optflags) $(debugflags) $(warnflags)
81
- cxxflags = $(optflags) $(debugflags) $(warnflags)
82
- optflags = -O3 -march=native
83
- debugflags = -ggdb3
84
- warnflags = -Wall -Wextra -Wdeprecated-declarations -Wduplicated-cond -Wimplicit-function-declaration -Wimplicit-int -Wmisleading-indentation -Wpointer-arith -Wwrite-strings -Wimplicit-fallthrough=0 -Wmissing-noreturn -Wno-cast-function-type -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-packed-bitfield-compat -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wsuggest-attribute=format -Wsuggest-attribute=noreturn -Wunused-variable
85
- cppflags =
86
- CCDLFLAGS = -fPIC
87
- CFLAGS = $(CCDLFLAGS) $(cflags) -fPIC $(ARCH_FLAG)
88
- INCFLAGS = -I. -I$(arch_hdrdir) -I$(hdrdir)/ruby/backward -I$(hdrdir) -I$(srcdir) -I/home/kou/work/ruby/extpp/include
89
- DEFS =
90
- CPPFLAGS = $(DEFS) $(cppflags)
91
- CXXFLAGS = $(CCDLFLAGS) -O3 -march\=native -ggdb3 -Wall -Wextra -Wdeprecated-declarations -Wduplicated-cond -Wmisleading-indentation -Wpointer-arith -Wwrite-strings -Wimplicit-fallthrough\=0 -Wmissing-noreturn -Wno-cast-function-type -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-packed-bitfield-compat -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wsuggest-attribute\=format -Wsuggest-attribute\=noreturn -Wunused-variable $(ARCH_FLAG)
92
- ldflags = -L. -fstack-protector-strong -rdynamic -Wl,-export-dynamic
93
- dldflags = -Wl,--compress-debug-sections=zlib
94
- ARCH_FLAG =
95
- DLDFLAGS = $(ldflags) $(dldflags) $(ARCH_FLAG)
96
- LDSHARED = $(CC) -shared
97
- LDSHAREDXX = $(CXX) -shared
98
- AR = ar
99
- EXEEXT =
100
-
101
- RUBY_INSTALL_NAME = $(RUBY_BASE_NAME)
102
- RUBY_SO_NAME = ruby
103
- RUBYW_INSTALL_NAME =
104
- RUBY_VERSION_NAME = $(RUBY_BASE_NAME)-$(ruby_version)
105
- RUBYW_BASE_NAME = rubyw
106
- RUBY_BASE_NAME = ruby
107
-
108
- arch = x86_64-linux
109
- sitearch = $(arch)
110
- ruby_version = 2.7.0
111
- ruby = $(bindir)/$(RUBY_BASE_NAME)
112
- RUBY = $(ruby)
113
- ruby_headers = $(hdrdir)/ruby.h $(hdrdir)/ruby/backward.h $(hdrdir)/ruby/ruby.h $(hdrdir)/ruby/defines.h $(hdrdir)/ruby/missing.h $(hdrdir)/ruby/intern.h $(hdrdir)/ruby/st.h $(hdrdir)/ruby/subst.h $(arch_hdrdir)/ruby/config.h
114
-
115
- RM = rm -f
116
- RM_RF = $(RUBY) -run -e rm -- -rf
117
- RMDIRS = rmdir --ignore-fail-on-non-empty -p
118
- MAKEDIRS = /bin/mkdir -p
119
- INSTALL = /usr/bin/install -c
120
- INSTALL_PROG = $(INSTALL) -m 0755
121
- INSTALL_DATA = $(INSTALL) -m 644
122
- COPY = cp
123
- TOUCH = exit >
124
-
125
- #### End of system configuration section. ####
126
-
127
- preload =
128
- libpath = . $(libdir)
129
- LIBPATH = -L. -L$(libdir) -Wl,-rpath,$(libdir)
130
- DEFFILE =
131
-
132
- CLEANFILES = mkmf.log
133
- DISTCLEANFILES =
134
- DISTCLEANDIRS =
135
-
136
- extout =
137
- extout_prefix =
138
- target_prefix =
139
- LOCAL_LIBS =
140
- LIBS = $(LIBRUBYARG_SHARED) -lm -lc /home/kou/work/ruby/extpp/ext/extpp/libruby-extpp.so
141
- ORIG_SRCS = object.cpp
142
- SRCS = $(ORIG_SRCS)
143
- OBJS = object.o
144
- HDRS =
145
- LOCAL_HDRS =
146
- TARGET = object
147
- TARGET_NAME = object
148
- TARGET_ENTRY = Init_$(TARGET_NAME)
149
- DLLIB = $(TARGET).so
150
- EXTSTATIC =
151
- STATIC_LIB =
152
-
153
- TIMESTAMP_DIR = .
154
- BINDIR = $(bindir)
155
- RUBYCOMMONDIR = $(sitedir)$(target_prefix)
156
- RUBYLIBDIR = $(sitelibdir)$(target_prefix)
157
- RUBYARCHDIR = $(sitearchdir)$(target_prefix)
158
- HDRDIR = $(rubyhdrdir)/ruby$(target_prefix)
159
- ARCHHDRDIR = $(rubyhdrdir)/$(arch)/ruby$(target_prefix)
160
- TARGET_SO_DIR =
161
- TARGET_SO = $(TARGET_SO_DIR)$(DLLIB)
162
- CLEANLIBS = $(TARGET_SO)
163
- CLEANOBJS = *.o *.bak
164
-
165
- all: $(DLLIB)
166
- static: $(STATIC_LIB)
167
- .PHONY: all install static install-so install-rb
168
- .PHONY: clean clean-so clean-static clean-rb
169
-
170
- clean-static::
171
- clean-rb-default::
172
- clean-rb::
173
- clean-so::
174
- clean: clean-so clean-static clean-rb-default clean-rb
175
- -$(Q)$(RM) $(CLEANLIBS) $(CLEANOBJS) $(CLEANFILES) .*.time
176
-
177
- distclean-rb-default::
178
- distclean-rb::
179
- distclean-so::
180
- distclean-static::
181
- distclean: clean distclean-so distclean-static distclean-rb-default distclean-rb
182
- -$(Q)$(RM) Makefile $(RUBY_EXTCONF_H) conftest.* mkmf.log
183
- -$(Q)$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES)
184
- -$(Q)$(RMDIRS) $(DISTCLEANDIRS) 2> /dev/null || true
185
-
186
- realclean: distclean
187
- install: install-so install-rb
188
-
189
- install-so: $(DLLIB) $(TIMESTAMP_DIR)/.sitearchdir.time
190
- $(INSTALL_PROG) $(DLLIB) $(RUBYARCHDIR)
191
- clean-static::
192
- -$(Q)$(RM) $(STATIC_LIB)
193
- install-rb: pre-install-rb do-install-rb install-rb-default
194
- install-rb-default: pre-install-rb-default do-install-rb-default
195
- pre-install-rb: Makefile
196
- pre-install-rb-default: Makefile
197
- do-install-rb:
198
- do-install-rb-default:
199
- pre-install-rb-default:
200
- @$(NULLCMD)
201
- $(TIMESTAMP_DIR)/.sitearchdir.time:
202
- $(Q) $(MAKEDIRS) $(@D) $(RUBYARCHDIR)
203
- $(Q) $(TOUCH) $@
204
-
205
- site-install: site-install-so site-install-rb
206
- site-install-so: install-so
207
- site-install-rb: install-rb
208
-
209
- .SUFFIXES: .c .m .cc .mm .cxx .cpp .o .S
210
-
211
- .cc.o:
212
- $(ECHO) compiling $(<)
213
- $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$<
214
-
215
- .cc.S:
216
- $(ECHO) translating $(<)
217
- $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$<
218
-
219
- .mm.o:
220
- $(ECHO) compiling $(<)
221
- $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$<
222
-
223
- .mm.S:
224
- $(ECHO) translating $(<)
225
- $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$<
226
-
227
- .cxx.o:
228
- $(ECHO) compiling $(<)
229
- $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$<
230
-
231
- .cxx.S:
232
- $(ECHO) translating $(<)
233
- $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$<
234
-
235
- .cpp.o:
236
- $(ECHO) compiling $(<)
237
- $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$<
238
-
239
- .cpp.S:
240
- $(ECHO) translating $(<)
241
- $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$<
242
-
243
- .c.o:
244
- $(ECHO) compiling $(<)
245
- $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$<
246
-
247
- .c.S:
248
- $(ECHO) translating $(<)
249
- $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$<
250
-
251
- .m.o:
252
- $(ECHO) compiling $(<)
253
- $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$<
254
-
255
- .m.S:
256
- $(ECHO) translating $(<)
257
- $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$<
258
-
259
- $(TARGET_SO): $(OBJS) Makefile
260
- $(ECHO) linking shared-object $(DLLIB)
261
- -$(Q)$(RM) $(@)
262
- $(Q) $(LDSHAREDXX) -o $@ $(OBJS) $(LIBPATH) $(DLDFLAGS) $(LOCAL_LIBS) $(LIBS)
263
-
264
-
265
-
266
- $(OBJS): $(HDRS) $(ruby_headers)
267
-
268
- extpp_headers = /home/kou/work/ruby/extpp/include/ruby/object.hpp /home/kou/work/ruby/extpp/include/ruby/class.hpp /home/kou/work/ruby/extpp/include/ruby/protect.hpp /home/kou/work/ruby/extpp/include/ruby/cast.hpp /home/kou/work/ruby/extpp/include/ruby/type.hpp /home/kou/work/ruby/extpp/include/ruby.hpp
269
- $(OBJS): $(extpp_headers)
@@ -1,4 +0,0 @@
1
- require "mkmf"
2
- require "extpp"
3
-
4
- create_makefile("object")
@@ -1,144 +0,0 @@
1
- check_debug_build: checking --enable-debug-build option... -------------------- no
2
-
3
- --------------------
4
-
5
- check_cxx: checking C++ compiler... -------------------- g++
6
-
7
- --------------------
8
-
9
- check_version: checking g++ version... -------------------- 8.3
10
-
11
- --------------------
12
-
13
- "g++ -Werror -Wall -c conftest.cpp"
14
- checked program was:
15
- /* begin */
16
- 1: int main(void) {return 0;}/* end */
17
-
18
- "g++ -Werror -Wextra -c conftest.cpp"
19
- checked program was:
20
- /* begin */
21
- 1: int main(void) {return 0;}/* end */
22
-
23
- "g++ -Werror -Wdeprecated-declarations -c conftest.cpp"
24
- checked program was:
25
- /* begin */
26
- 1: int main(void) {return 0;}/* end */
27
-
28
- "g++ -Werror -Wduplicated-cond -c conftest.cpp"
29
- checked program was:
30
- /* begin */
31
- 1: int main(void) {return 0;}/* end */
32
-
33
- "g++ -Werror -Wimplicit-function-declaration -c conftest.cpp"
34
- cc1plus: error: command line option ‘-Wimplicit-function-declaration’ is valid for C/ObjC but not for C++ [-Werror]
35
- cc1plus: all warnings being treated as errors
36
- checked program was:
37
- /* begin */
38
- 1: int main(void) {return 0;}/* end */
39
-
40
- "g++ -Werror -Wimplicit-int -c conftest.cpp"
41
- cc1plus: error: command line option ‘-Wimplicit-int’ is valid for C/ObjC but not for C++ [-Werror]
42
- cc1plus: all warnings being treated as errors
43
- checked program was:
44
- /* begin */
45
- 1: int main(void) {return 0;}/* end */
46
-
47
- "g++ -Werror -Wmisleading-indentation -c conftest.cpp"
48
- checked program was:
49
- /* begin */
50
- 1: int main(void) {return 0;}/* end */
51
-
52
- "g++ -Werror -Wpointer-arith -c conftest.cpp"
53
- checked program was:
54
- /* begin */
55
- 1: int main(void) {return 0;}/* end */
56
-
57
- "g++ -Werror -Wwrite-strings -c conftest.cpp"
58
- checked program was:
59
- /* begin */
60
- 1: int main(void) {return 0;}/* end */
61
-
62
- "g++ -Werror -Wimplicit-fallthrough=0 -c conftest.cpp"
63
- checked program was:
64
- /* begin */
65
- 1: int main(void) {return 0;}/* end */
66
-
67
- "g++ -Werror -Wmissing-noreturn -c conftest.cpp"
68
- checked program was:
69
- /* begin */
70
- 1: int main(void) {return 0;}/* end */
71
-
72
- "g++ -Werror -Wcast-function-type -c conftest.cpp"
73
- checked program was:
74
- /* begin */
75
- 1: int main(void) {return 0;}/* end */
76
-
77
- "g++ -Werror -Wconstant-logical-operand -c conftest.cpp"
78
- g++: error: unrecognized command line option ‘-Wconstant-logical-operand’; did you mean ‘-Wno-tautological-compare’?
79
- checked program was:
80
- /* begin */
81
- 1: int main(void) {return 0;}/* end */
82
-
83
- "g++ -Werror -Wlong-long -c conftest.cpp"
84
- checked program was:
85
- /* begin */
86
- 1: int main(void) {return 0;}/* end */
87
-
88
- "g++ -Werror -Wmissing-field-initializers -c conftest.cpp"
89
- checked program was:
90
- /* begin */
91
- 1: int main(void) {return 0;}/* end */
92
-
93
- "g++ -Werror -Woverlength-strings -c conftest.cpp"
94
- checked program was:
95
- /* begin */
96
- 1: int main(void) {return 0;}/* end */
97
-
98
- "g++ -Werror -Wpacked-bitfield-compat -c conftest.cpp"
99
- checked program was:
100
- /* begin */
101
- 1: int main(void) {return 0;}/* end */
102
-
103
- "g++ -Werror -Wparentheses-equality -c conftest.cpp"
104
- g++: error: unrecognized command line option ‘-Wparentheses-equality’; did you mean ‘-Wparentheses’?
105
- checked program was:
106
- /* begin */
107
- 1: int main(void) {return 0;}/* end */
108
-
109
- "g++ -Werror -Wself-assign -c conftest.cpp"
110
- g++: error: unrecognized command line option ‘-Wself-assign’; did you mean ‘-Wcast-align’?
111
- checked program was:
112
- /* begin */
113
- 1: int main(void) {return 0;}/* end */
114
-
115
- "g++ -Werror -Wtautological-compare -c conftest.cpp"
116
- checked program was:
117
- /* begin */
118
- 1: int main(void) {return 0;}/* end */
119
-
120
- "g++ -Werror -Wunused-parameter -c conftest.cpp"
121
- checked program was:
122
- /* begin */
123
- 1: int main(void) {return 0;}/* end */
124
-
125
- "g++ -Werror -Wunused-value -c conftest.cpp"
126
- checked program was:
127
- /* begin */
128
- 1: int main(void) {return 0;}/* end */
129
-
130
- "g++ -Werror -Wsuggest-attribute=format -c conftest.cpp"
131
- checked program was:
132
- /* begin */
133
- 1: int main(void) {return 0;}/* end */
134
-
135
- "g++ -Werror -Wsuggest-attribute=noreturn -c conftest.cpp"
136
- checked program was:
137
- /* begin */
138
- 1: int main(void) {return 0;}/* end */
139
-
140
- "g++ -Werror -Wunused-variable -c conftest.cpp"
141
- checked program was:
142
- /* begin */
143
- 1: int main(void) {return 0;}/* end */
144
-
@@ -1,102 +0,0 @@
1
- #include <ruby.hpp>
2
-
3
- extern "C" void
4
- Init_object(void)
5
- {
6
- rb::Class klass("ObjectMethods");
7
- klass.define_method("to_bool_true", [](VALUE self) {
8
- rb::Object object(Qtrue);
9
- if (object) {
10
- return Qtrue;
11
- } else {
12
- return Qfalse;
13
- }
14
- });
15
- klass.define_method("to_bool_false", [](VALUE self) {
16
- rb::Object object(Qfalse);
17
- if (object) {
18
- return Qtrue;
19
- } else {
20
- return Qfalse;
21
- }
22
- });
23
- klass.define_method("to_bool_nil", [](VALUE self) {
24
- rb::Object object(Qnil);
25
- if (object) {
26
- return Qtrue;
27
- } else {
28
- return Qfalse;
29
- }
30
- });
31
- klass.define_method("to_ruby", [](int argc, VALUE *argv, VALUE self) {
32
- VALUE rb_object;
33
- rb_scan_args(argc, argv, "1", &rb_object);
34
- rb::Object object(rb_object);
35
- return static_cast<VALUE>(object);
36
- });
37
- klass.define_method("send_no_arguments", [](int argc, VALUE *argv, VALUE self) {
38
- VALUE rb_receiver;
39
- VALUE rb_method_name;
40
- rb_scan_args(argc, argv, "2", &rb_receiver, &rb_method_name);
41
- rb::Object receiver(rb_receiver);
42
- rb::Object method_name(rb_method_name);
43
- auto result = receiver.send(method_name);
44
- return static_cast<VALUE>(result);
45
- });
46
- klass.define_method("send_two_arguments", [](int argc, VALUE *argv, VALUE self) {
47
- VALUE rb_receiver;
48
- VALUE rb_method_name;
49
- VALUE rb_arg1;
50
- VALUE rb_arg2;
51
- rb_scan_args(argc, argv, "4",
52
- &rb_receiver,
53
- &rb_method_name,
54
- &rb_arg1,
55
- &rb_arg2);
56
- rb::Object receiver(rb_receiver);
57
- rb::Object method_name(rb_method_name);
58
- auto result = receiver.send(method_name, {rb_arg1, rb_arg2});
59
- return static_cast<VALUE>(result);
60
- });
61
- klass.define_method("send_block", [](int argc, VALUE *argv, VALUE self) {
62
- VALUE rb_receiver;
63
- VALUE rb_method_name;
64
- rb_scan_args(argc, argv, "2",
65
- &rb_receiver,
66
- &rb_method_name);
67
- rb::Object receiver(rb_receiver);
68
- rb::Object method_name(rb_method_name);
69
- auto result = receiver.send(method_name,
70
- {},
71
- [](VALUE rb_n) -> VALUE {
72
- auto n = rb::Object(rb_n);
73
- auto n_raw = rb::cast<int32_t>(n);
74
- return rb::cast<rb::Object>(n_raw * n_raw);
75
- });
76
- return static_cast<VALUE>(result);
77
- });
78
- klass.define_method("ivar_set", [](int argc, VALUE *argv, VALUE self) {
79
- VALUE rb_receiver;
80
- VALUE rb_name;
81
- VALUE rb_value;
82
- rb_scan_args(argc, argv, "3",
83
- &rb_receiver,
84
- &rb_name,
85
- &rb_value);
86
- rb::Object receiver(rb_receiver);
87
- rb::Object name(rb_name);
88
- auto result = receiver.ivar_set(name, rb_value);
89
- return static_cast<VALUE>(result);
90
- });
91
- klass.define_method("ivar_get", [](int argc, VALUE *argv, VALUE self) {
92
- VALUE rb_receiver;
93
- VALUE rb_name;
94
- rb_scan_args(argc, argv, "2",
95
- &rb_receiver,
96
- &rb_name);
97
- rb::Object receiver(rb_receiver);
98
- rb::Object name(rb_name);
99
- auto result = receiver.ivar_get(name);
100
- return static_cast<VALUE>(result);
101
- });
102
- }
Binary file
Binary file