extpp 0.0.6 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +1 -1
  3. data/README.md +1 -1
  4. data/Rakefile +1 -28
  5. data/doc/text/news.md +43 -0
  6. data/include/ruby/cast.hpp +4 -4
  7. data/include/ruby/class.hpp +190 -13
  8. data/{ext/extpp → include/ruby}/function.hpp +20 -7
  9. data/include/ruby/object.hpp +44 -5
  10. data/include/ruby/protect.hpp +12 -5
  11. data/lib/extpp/compiler.rb +17 -10
  12. data/lib/extpp/setup.rb +0 -0
  13. data/lib/extpp/version.rb +1 -1
  14. data/lib/extpp.rb +0 -12
  15. data/sample/hello/Rakefile +6 -1
  16. metadata +7 -74
  17. data/ext/extpp/class.cpp +0 -277
  18. data/ext/extpp/extconf.rb +0 -110
  19. data/ext/extpp/function.cpp +0 -28
  20. data/ext/extpp/object.cpp +0 -48
  21. data/ext/extpp/protect.cpp +0 -12
  22. data/lib/extpp/platform.rb +0 -14
  23. data/test/fixtures/cast/Makefile +0 -269
  24. data/test/fixtures/cast/cast.cpp +0 -39
  25. data/test/fixtures/cast/cast.o +0 -0
  26. data/test/fixtures/cast/cast.so +0 -0
  27. data/test/fixtures/cast/extconf.rb +0 -4
  28. data/test/fixtures/cast/mkmf.log +0 -140
  29. data/test/fixtures/class/Makefile +0 -269
  30. data/test/fixtures/class/class.cpp +0 -46
  31. data/test/fixtures/class/class.o +0 -0
  32. data/test/fixtures/class/class.so +0 -0
  33. data/test/fixtures/class/extconf.rb +0 -4
  34. data/test/fixtures/class/mkmf.log +0 -140
  35. data/test/fixtures/object/Makefile +0 -269
  36. data/test/fixtures/object/extconf.rb +0 -4
  37. data/test/fixtures/object/mkmf.log +0 -140
  38. data/test/fixtures/object/object.cpp +0 -102
  39. data/test/fixtures/object/object.o +0 -0
  40. data/test/fixtures/object/object.so +0 -0
  41. data/test/fixtures/protect/Makefile +0 -269
  42. data/test/fixtures/protect/extconf.rb +0 -4
  43. data/test/fixtures/protect/mkmf.log +0 -140
  44. data/test/fixtures/protect/protect.cpp +0 -70
  45. data/test/fixtures/protect/protect.o +0 -0
  46. data/test/fixtures/protect/protect.so +0 -0
  47. data/test/helper.rb +0 -9
  48. data/test/run-test.rb +0 -23
  49. data/test/test-cast.rb +0 -46
  50. data/test/test-class.rb +0 -47
  51. data/test/test-object.rb +0 -68
  52. 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 = protect.cpp
142
- SRCS = $(ORIG_SRCS)
143
- OBJS = protect.o
144
- HDRS =
145
- LOCAL_HDRS =
146
- TARGET = protect
147
- TARGET_NAME = protect
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("protect")
@@ -1,140 +0,0 @@
1
- check_debug_build: checking --enable-debug-build option... -------------------- no
2
-
3
- --------------------
4
-
5
- check_version: checking g++ version... -------------------- 8.2
6
-
7
- --------------------
8
-
9
- "g++ -Werror -Wall -c conftest.cpp"
10
- checked program was:
11
- /* begin */
12
- 1: int main(void) {return 0;}/* end */
13
-
14
- "g++ -Werror -Wextra -c conftest.cpp"
15
- checked program was:
16
- /* begin */
17
- 1: int main(void) {return 0;}/* end */
18
-
19
- "g++ -Werror -Wdeprecated-declarations -c conftest.cpp"
20
- checked program was:
21
- /* begin */
22
- 1: int main(void) {return 0;}/* end */
23
-
24
- "g++ -Werror -Wduplicated-cond -c conftest.cpp"
25
- checked program was:
26
- /* begin */
27
- 1: int main(void) {return 0;}/* end */
28
-
29
- "g++ -Werror -Wimplicit-function-declaration -c conftest.cpp"
30
- cc1plus: error: command line option ‘-Wimplicit-function-declaration’ is valid for C/ObjC but not for C++ [-Werror]
31
- cc1plus: all warnings being treated as errors
32
- checked program was:
33
- /* begin */
34
- 1: int main(void) {return 0;}/* end */
35
-
36
- "g++ -Werror -Wimplicit-int -c conftest.cpp"
37
- cc1plus: error: command line option ‘-Wimplicit-int’ is valid for C/ObjC but not for C++ [-Werror]
38
- cc1plus: all warnings being treated as errors
39
- checked program was:
40
- /* begin */
41
- 1: int main(void) {return 0;}/* end */
42
-
43
- "g++ -Werror -Wmisleading-indentation -c conftest.cpp"
44
- checked program was:
45
- /* begin */
46
- 1: int main(void) {return 0;}/* end */
47
-
48
- "g++ -Werror -Wpointer-arith -c conftest.cpp"
49
- checked program was:
50
- /* begin */
51
- 1: int main(void) {return 0;}/* end */
52
-
53
- "g++ -Werror -Wwrite-strings -c conftest.cpp"
54
- checked program was:
55
- /* begin */
56
- 1: int main(void) {return 0;}/* end */
57
-
58
- "g++ -Werror -Wimplicit-fallthrough=0 -c conftest.cpp"
59
- checked program was:
60
- /* begin */
61
- 1: int main(void) {return 0;}/* end */
62
-
63
- "g++ -Werror -Wmissing-noreturn -c conftest.cpp"
64
- checked program was:
65
- /* begin */
66
- 1: int main(void) {return 0;}/* end */
67
-
68
- "g++ -Werror -Wcast-function-type -c conftest.cpp"
69
- checked program was:
70
- /* begin */
71
- 1: int main(void) {return 0;}/* end */
72
-
73
- "g++ -Werror -Wconstant-logical-operand -c conftest.cpp"
74
- g++: error: unrecognized command line option ‘-Wconstant-logical-operand’; did you mean ‘-Wno-tautological-compare’?
75
- checked program was:
76
- /* begin */
77
- 1: int main(void) {return 0;}/* end */
78
-
79
- "g++ -Werror -Wlong-long -c conftest.cpp"
80
- checked program was:
81
- /* begin */
82
- 1: int main(void) {return 0;}/* end */
83
-
84
- "g++ -Werror -Wmissing-field-initializers -c conftest.cpp"
85
- checked program was:
86
- /* begin */
87
- 1: int main(void) {return 0;}/* end */
88
-
89
- "g++ -Werror -Woverlength-strings -c conftest.cpp"
90
- checked program was:
91
- /* begin */
92
- 1: int main(void) {return 0;}/* end */
93
-
94
- "g++ -Werror -Wpacked-bitfield-compat -c conftest.cpp"
95
- checked program was:
96
- /* begin */
97
- 1: int main(void) {return 0;}/* end */
98
-
99
- "g++ -Werror -Wparentheses-equality -c conftest.cpp"
100
- g++: error: unrecognized command line option ‘-Wparentheses-equality’; did you mean ‘-Wparentheses’?
101
- checked program was:
102
- /* begin */
103
- 1: int main(void) {return 0;}/* end */
104
-
105
- "g++ -Werror -Wself-assign -c conftest.cpp"
106
- g++: error: unrecognized command line option ‘-Wself-assign’; did you mean ‘-Wcast-align’?
107
- checked program was:
108
- /* begin */
109
- 1: int main(void) {return 0;}/* end */
110
-
111
- "g++ -Werror -Wtautological-compare -c conftest.cpp"
112
- checked program was:
113
- /* begin */
114
- 1: int main(void) {return 0;}/* end */
115
-
116
- "g++ -Werror -Wunused-parameter -c conftest.cpp"
117
- checked program was:
118
- /* begin */
119
- 1: int main(void) {return 0;}/* end */
120
-
121
- "g++ -Werror -Wunused-value -c conftest.cpp"
122
- checked program was:
123
- /* begin */
124
- 1: int main(void) {return 0;}/* end */
125
-
126
- "g++ -Werror -Wsuggest-attribute=format -c conftest.cpp"
127
- checked program was:
128
- /* begin */
129
- 1: int main(void) {return 0;}/* end */
130
-
131
- "g++ -Werror -Wsuggest-attribute=noreturn -c conftest.cpp"
132
- checked program was:
133
- /* begin */
134
- 1: int main(void) {return 0;}/* end */
135
-
136
- "g++ -Werror -Wunused-variable -c conftest.cpp"
137
- checked program was:
138
- /* begin */
139
- 1: int main(void) {return 0;}/* end */
140
-
@@ -1,70 +0,0 @@
1
- #include <ruby.hpp>
2
-
3
- namespace {
4
- class Notifier {
5
- public:
6
- Notifier(std::string prefix, rb::Object listener) :
7
- prefix_(prefix),
8
- listener_(listener) {
9
- notify("constructed");
10
- }
11
-
12
- ~Notifier() {
13
- notify("destructed");
14
- }
15
-
16
- void notify(const char* name) {
17
- auto event = prefix_ + name;
18
- auto x = rb::Object(rb_str_new(event.data(), event.size()));
19
- listener_.send("notify", {x});
20
- }
21
-
22
- private:
23
- std::string prefix_;
24
- rb::Object listener_;
25
- };
26
- };
27
-
28
- extern "C" void
29
- Init_protect(void)
30
- {
31
- rb::Class klass("ProtectMethods");
32
- klass.define_method("protect_raw", [](int argc, VALUE *argv, VALUE self) {
33
- VALUE rb_listener;
34
- VALUE rb_block;
35
- rb_scan_args(argc, argv, "1&", &rb_listener, &rb_block);
36
- Notifier outer("outer: ", rb::Object(rb_listener));
37
- try {
38
- Notifier inner("inner: ", rb::Object(rb_listener));
39
- rb::protect(
40
- [](VALUE rb_block) -> VALUE {
41
- return rb::Object(rb_block).send("call");
42
- },
43
- rb_block);
44
- inner.notify("called");
45
- } catch (rb::State& state) {
46
- outer.notify("caught");
47
- state.jump();
48
- }
49
- outer.notify("jumped");
50
- return Qnil;
51
- });
52
- klass.define_method("protect_closure", [](int argc, VALUE *argv, VALUE self) {
53
- VALUE rb_listener;
54
- VALUE rb_block;
55
- rb_scan_args(argc, argv, "1&", &rb_listener, &rb_block);
56
- Notifier outer("outer: ", rb::Object(rb_listener));
57
- try {
58
- Notifier inner("inner: ", rb::Object(rb_listener));
59
- rb::protect([&rb_block]() -> VALUE {
60
- return rb::Object(rb_block).send("call");
61
- });
62
- inner.notify("called");
63
- } catch (rb::State& state) {
64
- outer.notify("caught");
65
- state.jump();
66
- }
67
- outer.notify("jumped");
68
- return Qnil;
69
- });
70
- }
Binary file
Binary file
data/test/helper.rb DELETED
@@ -1,9 +0,0 @@
1
- require "test-unit"
2
-
3
- module Helper
4
- module Fixture
5
- def fixture_path(*components)
6
- File.join(__dir__, "fixtures", *components)
7
- end
8
- end
9
- end
data/test/run-test.rb DELETED
@@ -1,23 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- $VERBOSE = true
4
-
5
- require "pathname"
6
-
7
- base_dir = Pathname.new(__dir__).parent.expand_path
8
-
9
- ext_dir = base_dir + "ext" + "extpp"
10
- lib_dir = base_dir + "lib"
11
- test_dir = base_dir + "test"
12
-
13
- Dir.chdir(ext_dir.to_s) do
14
- if File.exist?("Makefile")
15
- system("make > /dev/null") or exit(false)
16
- end
17
- end
18
-
19
- $LOAD_PATH.unshift(lib_dir.to_s)
20
-
21
- require_relative "helper"
22
-
23
- exit(Test::Unit::AutoRunner.run(true, test_dir.to_s))
data/test/test-cast.rb DELETED
@@ -1,46 +0,0 @@
1
- class CastTest < Test::Unit::TestCase
2
- extend Helper::Fixture
3
-
4
- class << self
5
- def startup
6
- lib_dir = File.join(__dir__, "..", "lib")
7
- Dir.chdir(fixture_path("cast")) do
8
- system(RbConfig.ruby, "-w", "-I", lib_dir, "extconf.rb")
9
- system("make")
10
- end
11
- require fixture_path("cast", "cast")
12
- end
13
- end
14
-
15
- def setup
16
- @caster = Caster.new
17
- end
18
-
19
- def test_int32
20
- assert_equal(-(2 ** 31),
21
- @caster.cast_int32(-(2 ** 31)))
22
- end
23
-
24
- def test_int64
25
- assert_equal(-(2 ** 63),
26
- @caster.cast_int64(-(2 ** 63)))
27
- end
28
-
29
- def test_uint32
30
- assert_equal(2 ** 32 - 1,
31
- @caster.cast_uint32(2 ** 32 - 1))
32
- end
33
-
34
- def test_uint64
35
- assert_equal(2 ** 64 - 1,
36
- @caster.cast_uint64(2 ** 64 - 1))
37
- end
38
-
39
- def test_string
40
- assert_equal("Hello", @caster.cast_string("Hello"))
41
- end
42
-
43
- def test_std_string
44
- assert_equal("Hello", @caster.cast_std_string("Hello"))
45
- end
46
- end
data/test/test-class.rb DELETED
@@ -1,47 +0,0 @@
1
- class ClassTest < Test::Unit::TestCase
2
- extend Helper::Fixture
3
-
4
- class << self
5
- def startup
6
- return unless self == ClassTest
7
- lib_dir = File.join(__dir__, "..", "lib")
8
- Dir.chdir(fixture_path("class")) do
9
- system(RbConfig.ruby, "-w", "-I", lib_dir, "extconf.rb")
10
- system("make")
11
- end
12
- require fixture_path("class", "class")
13
- end
14
- end
15
-
16
- sub_test_case("no argument") do
17
- def test_define_method
18
- assert_equal("Hello", Greeting.new.hello)
19
- end
20
-
21
- def test_define_method_lazy
22
- assert_equal("Hello", Greeting.new.hello_lazy)
23
- end
24
-
25
- def test_define_method_defined
26
- assert_equal("Hello", Greeting.new.hello_defined)
27
- end
28
- end
29
-
30
- sub_test_case("with arguments") do
31
- def test_define_method
32
- assert_equal("Hello Ruby", NamedGreeting.new.hello("Ruby"))
33
- end
34
-
35
- def test_define_method_compatible
36
- assert_equal("Hello Ruby", NamedGreeting.new.hello_compatible("Ruby"))
37
- end
38
-
39
- def test_define_method_lazy
40
- assert_equal("Hello Ruby", NamedGreeting.new.hello_lazy("Ruby"))
41
- end
42
-
43
- def test_define_method_defined
44
- assert_equal("Hello Ruby", NamedGreeting.new.hello_defined("Ruby"))
45
- end
46
- end
47
- end
data/test/test-object.rb DELETED
@@ -1,68 +0,0 @@
1
- class ObjectTest < Test::Unit::TestCase
2
- extend Helper::Fixture
3
-
4
- class << self
5
- def startup
6
- return unless self == ObjectTest
7
- lib_dir = File.join(__dir__, "..", "lib")
8
- Dir.chdir(fixture_path("object")) do
9
- system(RbConfig.ruby, "-w", "-I", lib_dir, "extconf.rb")
10
- system("make")
11
- end
12
- require fixture_path("object", "object")
13
- end
14
- end
15
-
16
- sub_test_case("to_bool") do
17
- def test_true
18
- assert_equal(true, ObjectMethods.new.to_bool_true)
19
- end
20
-
21
- def test_false
22
- assert_equal(false, ObjectMethods.new.to_bool_false)
23
- end
24
-
25
- def test_nil
26
- assert_equal(false, ObjectMethods.new.to_bool_nil)
27
- end
28
- end
29
-
30
- def test_to_ruby
31
- assert_equal("Hello", ObjectMethods.new.to_ruby("Hello"))
32
- end
33
-
34
- sub_test_case("send") do
35
- def test_no_arguments
36
- assert_equal("1", ObjectMethods.new.send_no_arguments(1, "to_s"))
37
- end
38
-
39
- def test_two_arguments
40
- assert_equal("ell",
41
- ObjectMethods.new.send_two_arguments("hello",
42
- "[]",
43
- 1,
44
- 3))
45
- end
46
-
47
- def test_block
48
- assert_equal([1, 4, 9],
49
- ObjectMethods.new.send_block([1, 2, 3], "collect"))
50
- end
51
- end
52
-
53
- sub_test_case("instance variable") do
54
- def test_set
55
- object = Object.new
56
- methods = ObjectMethods.new
57
- assert_equal("me", methods.ivar_set(object, "@name", "me"))
58
- assert_equal("me", object.instance_variable_get("@name"))
59
- end
60
-
61
- def test_get
62
- object = Object.new
63
- object.instance_variable_set("@name", "me")
64
- methods = ObjectMethods.new
65
- assert_equal("me", methods.ivar_get(object, "@name"))
66
- end
67
- end
68
- end