extpp 0.0.9 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) 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 +6 -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/setup.rb +0 -4
  12. data/lib/extpp/version.rb +1 -1
  13. data/lib/extpp.rb +0 -12
  14. metadata +6 -73
  15. data/ext/extpp/class.cpp +0 -277
  16. data/ext/extpp/extconf.rb +0 -110
  17. data/ext/extpp/function.cpp +0 -28
  18. data/ext/extpp/object.cpp +0 -48
  19. data/ext/extpp/protect.cpp +0 -12
  20. data/lib/extpp/platform.rb +0 -8
  21. data/test/fixtures/cast/Makefile +0 -269
  22. data/test/fixtures/cast/cast.cpp +0 -39
  23. data/test/fixtures/cast/cast.o +0 -0
  24. data/test/fixtures/cast/cast.so +0 -0
  25. data/test/fixtures/cast/extconf.rb +0 -4
  26. data/test/fixtures/cast/mkmf.log +0 -144
  27. data/test/fixtures/class/Makefile +0 -269
  28. data/test/fixtures/class/class.cpp +0 -46
  29. data/test/fixtures/class/class.o +0 -0
  30. data/test/fixtures/class/class.so +0 -0
  31. data/test/fixtures/class/extconf.rb +0 -4
  32. data/test/fixtures/class/mkmf.log +0 -144
  33. data/test/fixtures/object/Makefile +0 -269
  34. data/test/fixtures/object/extconf.rb +0 -4
  35. data/test/fixtures/object/mkmf.log +0 -144
  36. data/test/fixtures/object/object.cpp +0 -102
  37. data/test/fixtures/object/object.o +0 -0
  38. data/test/fixtures/object/object.so +0 -0
  39. data/test/fixtures/protect/Makefile +0 -269
  40. data/test/fixtures/protect/extconf.rb +0 -4
  41. data/test/fixtures/protect/mkmf.log +0 -144
  42. data/test/fixtures/protect/protect.cpp +0 -70
  43. data/test/fixtures/protect/protect.o +0 -0
  44. data/test/fixtures/protect/protect.so +0 -0
  45. data/test/helper.rb +0 -11
  46. data/test/run-test.rb +0 -31
  47. data/test/test-cast.rb +0 -46
  48. data/test/test-class.rb +0 -47
  49. data/test/test-object.rb +0 -68
  50. data/test/test-protect.rb +0 -54
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3ad1ded05bdc3f935efd716bf7efca2248ff163e32ead6ad7fd2207d9c49e883
4
- data.tar.gz: b8439db5e84748907e4f4e744ee3916e96ab70b1284a6f63a376678a6d3669fb
3
+ metadata.gz: d99eab03d29814512bdae39c7be899d60794464e05b361f7cb6b612ba08d36b5
4
+ data.tar.gz: 73d755c8c3c52ddc2e2eb9474637735b1ed5f02a8b08fce1524522bcb3590bcc
5
5
  SHA512:
6
- metadata.gz: d55f0224494159be0b951787bcf5e28990f7cbd2b5a17aabdce821dcc390ca9309c8f4eb7d04db755c1bd3defb6c45807592cfb672a41af45c060de7c497fccd
7
- data.tar.gz: 3f9fb2d6a8e80e7087e5f45b8713fad57166fcfbd29e43c03c16bea3db62865def8413ea815022f02f7e08d896eebf40f5b9b6add4cb4d4f55ce334d3a8a54f2
6
+ metadata.gz: adbe4fc358aa20367f56703424366e5401c8c4c26af831b751e534fec5c853f64e0fb1a87fe68340a33ad1d50ce7808cf8d410e6cc5391f994403b57795a0702
7
+ data.tar.gz: 7fdc84981a093e94b5aeec3f1cbf58b9f986368e03f923f01ea9d6411f31d8c57f0e68dab1c054cc1a8315031a8596a586afd9064318b9ed406cb5e7b709a760
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (C) 2017 Kouhei Sutou. All rights reserved.
1
+ Copyright (C) 2017-2021 Sutou Kouhei. All rights reserved.
2
2
 
3
3
  Redistribution and use in source and binary forms, with or without
4
4
  modification, are permitted provided that the following conditions
data/README.md CHANGED
@@ -90,12 +90,12 @@ Build this extension:
90
90
  Now, you can use this extension:
91
91
 
92
92
  ```console
93
- % ruby -r extpp/setup -r ./hello -e 'p Hello.new("me").greet'
93
+ % ruby -r ./hello -e 'p Hello.new("me").greet'
94
94
  "Hello me"
95
95
  ```
96
96
 
97
97
  ## License
98
98
 
99
- Copyright (C) 2017-2019 Kouhei Sutou
99
+ Copyright (C) 2017-2021 Sutou Kouhei
100
100
 
101
101
  The 2-Clause BSD License. See [LICENSE.txt](LICENSE.txt) for details.
data/Rakefile CHANGED
@@ -13,36 +13,9 @@ end
13
13
 
14
14
  helper.install
15
15
 
16
- def run_extconf(*arguments)
17
- cd("ext/extpp") do
18
- ruby("extconf.rb", *arguments)
19
- end
20
- end
21
-
22
- desc "Configure"
23
- task :configure do
24
- run_extconf
25
- end
26
-
27
- namespace :configure do
28
- desc "Configure for debug"
29
- task :debug do
30
- run_extconf("--enable-debug-build")
31
- end
32
- end
33
-
34
- task :clean do
35
- makefile = "ext/extpp/Makefile"
36
- if File.exists?(makefile)
37
- cd(File.dirname(makefile)) do
38
- sh("make", "clean")
39
- end
40
- end
41
- end
42
-
43
16
  desc "Run tests"
44
17
  task :test do
45
18
  ruby("test/run-test.rb")
46
19
  end
47
20
 
48
- task default: ["configure:debug", :test]
21
+ task default: :test
data/doc/text/news.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # News
2
2
 
3
+ ## 0.1.0 - 2021-10-03
4
+
5
+ ### Improvements
6
+
7
+ * Implemented as header only library.
8
+
3
9
  ## 0.0.9 - 2020-11-03
4
10
 
5
11
  ### Improvements
@@ -1,26 +1,203 @@
1
1
  #pragma once
2
2
 
3
+ #include <ruby/function.hpp>
3
4
  #include <ruby/object.hpp>
4
5
 
6
+ #include <string>
7
+ #include <unordered_map>
8
+ #include <vector>
9
+
5
10
  namespace rb {
6
- class RB_EXTPP_EXPORT Class: public Object {
11
+ using MethodTable = std::unordered_map<ID, Function *>;
12
+
13
+ struct MethodDefinition {
14
+ MethodDefinition(std::string name_, Function *function_) :
15
+ name(name_),
16
+ function(function_) {
17
+ }
18
+
19
+ std::string name;
20
+ Function *function;
21
+ };
22
+ using MethodDefinitions = std::vector<MethodDefinition>;
23
+
24
+ namespace {
25
+ inline MethodTable *method_table_from_ruby(VALUE rb_method_table) {
26
+ return reinterpret_cast<MethodTable *>(NUM2ULL(rb_method_table));
27
+ }
28
+
29
+ inline VALUE method_table_to_ruby(MethodTable *method_table) {
30
+ return ULL2NUM(reinterpret_cast<uintptr_t>(method_table));
31
+ }
32
+
33
+ inline MethodDefinitions *
34
+ method_definitions_from_ruby(VALUE rb_definitions) {
35
+ return reinterpret_cast<MethodDefinitions *>(NUM2ULL(rb_definitions));
36
+ }
37
+
38
+ inline VALUE method_definitions_to_ruby(MethodDefinitions *definitions) {
39
+ return ULL2NUM(reinterpret_cast<uintptr_t>(definitions));
40
+ }
41
+
42
+ inline VALUE call_func(int argc, VALUE *argv, VALUE self) {
43
+ auto rb_method_table =
44
+ rb_ivar_get(rb_obj_class(self), rb_intern("__method_table__"));
45
+ auto method_table = method_table_from_ruby(rb_method_table);
46
+ auto method_name_symbol = rb_funcall(self, rb_intern("__method__"), 0);
47
+ auto function = (*method_table)[rb_sym2id(method_name_symbol)];
48
+ return function->call(self, argc, argv);
49
+ }
50
+
51
+ inline bool flush_method_definitions(VALUE klass) {
52
+ ID id_method_definitions = rb_intern("__method_definitions__");
53
+ auto rb_definitions = rb_ivar_get(klass, id_method_definitions);
54
+ if (NIL_P(rb_definitions)) {
55
+ return false;
56
+ }
57
+
58
+ auto definitions = method_definitions_from_ruby(rb_definitions);
59
+ auto rb_method_table = rb_ivar_get(klass, rb_intern("__method_table__"));
60
+ auto method_table = method_table_from_ruby(rb_method_table);
61
+ for (const auto &definition : *definitions) {
62
+ ID name_id = rb_intern(definition.name.c_str());
63
+ (*method_table)[name_id] = definition.function;
64
+ rb_define_method(klass,
65
+ definition.name.c_str(),
66
+ reinterpret_cast<rb::RawMethod>(call_func),
67
+ -1);
68
+ }
69
+ rb_ivar_set(klass, id_method_definitions, Qnil);
70
+ return true;
71
+ }
72
+
73
+ inline VALUE method_missing(int argc, VALUE *argv, VALUE self) {
74
+ auto klass = rb_obj_class(self);
75
+
76
+ if (flush_method_definitions(klass)) {
77
+ auto rb_method_table = rb_ivar_get(klass, rb_intern("__method_table__"));
78
+ auto method_table = method_table_from_ruby(rb_method_table);
79
+
80
+ VALUE rb_name_symbol;
81
+ VALUE rb_args;
82
+ rb_scan_args(argc, argv, "1*", &rb_name_symbol, &rb_args);
83
+ auto function = (*method_table)[rb_sym2id(rb_name_symbol)];
84
+ if (function) {
85
+ return function->call(self,
86
+ static_cast<int>(RARRAY_LEN(rb_args)),
87
+ RARRAY_PTR(rb_args));
88
+ }
89
+ }
90
+
91
+ return rb_call_super(argc, argv);
92
+ }
93
+
94
+ inline VALUE respond_to_missing_p(VALUE self,
95
+ VALUE rb_name_symbol,
96
+ VALUE rb_include_private) {
97
+ auto klass = rb_obj_class(self);
98
+
99
+ if (flush_method_definitions(klass)) {
100
+ auto rb_method_table = rb_ivar_get(klass, rb_intern("__method_table__"));
101
+ auto method_table = method_table_from_ruby(rb_method_table);
102
+
103
+ auto function = (*method_table)[rb_sym2id(rb_name_symbol)];
104
+ if (function) {
105
+ return Qtrue;
106
+ }
107
+ }
108
+
109
+ VALUE rb_args[] = {rb_name_symbol, rb_include_private};
110
+ return rb_call_super(2, rb_args);
111
+ }
112
+ }
113
+
114
+ class Class: public Object {
7
115
  public:
8
- Class(const char *name);
9
- Class(const char *name, VALUE parent);
10
- Class(VALUE klass);
11
- ~Class();
116
+ Class(const char *name) :
117
+ Class(RTEST(rb_funcall(rb_cObject,
118
+ rb_intern("const_defined?"),
119
+ 1,
120
+ rb_str_new_static(name, strlen(name)))) ?
121
+ rb_funcall(rb_cObject,
122
+ rb_intern("const_get"),
123
+ 1,
124
+ rb_str_new_static(name, strlen(name))) :
125
+ rb_define_class(name, rb_cObject)) {
126
+ }
127
+
128
+ Class(const char *name, VALUE parent) :
129
+ Class(rb_define_class(name, parent)) {
130
+ }
131
+
132
+ Class(VALUE klass) :
133
+ Object(klass),
134
+ class_(klass),
135
+ method_table_(new MethodTable()),
136
+ lazy_define_method_(false),
137
+ method_definitions_(nullptr) {
138
+ rb_iv_set(class_,
139
+ "__method_table__",
140
+ method_table_to_ruby(method_table_));
141
+ rb_iv_set(class_, "__method_definitions__", Qnil);
142
+ }
143
+
144
+ inline Class &define_method(const char *name,
145
+ MethodWithoutArguments body) {
146
+ auto function = new FunctionWithoutArgument(body);
147
+ return define_method(name, function);
148
+ }
149
+
150
+ inline Class &define_method(const char *name,
151
+ MethodWithArguments body) {
152
+ auto function = new FunctionWithArguments(body);
153
+ return define_method(name, function);
154
+ }
155
+
156
+ inline Class &define_method(const char *name,
157
+ MethodWithArgumentsCompatible body) {
158
+ auto function = new FunctionWithArgumentsCompatible(body);
159
+ return define_method(name, function);
160
+ }
161
+
162
+ inline Class &define_method(const char *name, Function *function) {
163
+ if (lazy_define_method_) {
164
+ method_definitions_->emplace_back(name, function);
165
+ } else {
166
+ ID name_id = rb_intern(name);
167
+ (*method_table_)[name_id] = function;
168
+ rb_define_method(class_,
169
+ name,
170
+ reinterpret_cast<RawMethod>(call_func),
171
+ -1);
172
+ }
173
+ return (Class &)*this;
174
+ }
12
175
 
13
- Class &define_method(const char *name,
14
- MethodWithoutArguments body);
15
- Class &define_method(const char *name,
16
- MethodWithArguments body);
17
- Class &define_method(const char *name,
18
- MethodWithArgumentsCompatible body);
176
+ inline Class &enable_lazy_define_method() {
177
+ if (lazy_define_method_) {
178
+ return (Class &)*this;
179
+ }
19
180
 
20
- Class &enable_lazy_define_method();
181
+ lazy_define_method_ = true;
182
+ method_definitions_ = new MethodDefinitions();
183
+ rb_iv_set(class_,
184
+ "__method_definitions__",
185
+ method_definitions_to_ruby(method_definitions_));
186
+ rb_define_method(class_,
187
+ "method_missing",
188
+ reinterpret_cast<RawMethod>(method_missing),
189
+ -1);
190
+ rb_define_method(class_,
191
+ "respond_to_missing?",
192
+ reinterpret_cast<RawMethod>(respond_to_missing_p),
193
+ -1);
194
+ return (Class &)*this;
195
+ }
21
196
 
22
197
  private:
23
- class ClassImpl;
24
- ClassImpl *impl_;
198
+ VALUE class_;
199
+ MethodTable *method_table_;
200
+ bool lazy_define_method_;
201
+ MethodDefinitions *method_definitions_;
25
202
  };
26
203
  }
@@ -13,9 +13,13 @@ namespace rb {
13
13
 
14
14
  class FunctionWithoutArgument : public Function {
15
15
  public:
16
- FunctionWithoutArgument(const MethodWithoutArguments &function);
16
+ FunctionWithoutArgument(const MethodWithoutArguments &function) :
17
+ function_(function) {
18
+ }
17
19
 
18
- VALUE call(VALUE self, int argc, VALUE *argv) override;
20
+ inline VALUE call(VALUE self, int argc, VALUE *argv) override {
21
+ return function_(self);
22
+ }
19
23
 
20
24
  private:
21
25
  MethodWithoutArguments function_;
@@ -23,9 +27,13 @@ namespace rb {
23
27
 
24
28
  class FunctionWithArguments : public Function {
25
29
  public:
26
- FunctionWithArguments(const MethodWithArguments &function);
30
+ FunctionWithArguments(const MethodWithArguments &function) :
31
+ function_(function) {
32
+ }
27
33
 
28
- VALUE call(VALUE self, int argc, VALUE *argv) override;
34
+ inline VALUE call(VALUE self, int argc, VALUE *argv) override {
35
+ return function_(self, argc, argv);
36
+ }
29
37
 
30
38
  private:
31
39
  MethodWithArguments function_;
@@ -33,9 +41,14 @@ namespace rb {
33
41
 
34
42
  class FunctionWithArgumentsCompatible : public Function {
35
43
  public:
36
- FunctionWithArgumentsCompatible(const MethodWithArgumentsCompatible &function);
37
-
38
- VALUE call(VALUE self, int argc, VALUE *argv) override;
44
+ FunctionWithArgumentsCompatible(
45
+ const MethodWithArgumentsCompatible &function) :
46
+ function_(function) {
47
+ }
48
+
49
+ inline VALUE call(VALUE self, int argc, VALUE *argv) override {
50
+ return function_(argc, argv, self);
51
+ }
39
52
 
40
53
  private:
41
54
  MethodWithArgumentsCompatible function_;
@@ -5,7 +5,7 @@
5
5
  #include <initializer_list>
6
6
 
7
7
  namespace rb {
8
- class RB_EXTPP_EXPORT Object {
8
+ class Object {
9
9
  public:
10
10
  explicit Object(VALUE rb_object=Qnil) :
11
11
  rb_object_(rb_object),
@@ -56,7 +56,10 @@ namespace rb {
56
56
  rb_gc_register_address(&rb_object_);
57
57
  }
58
58
 
59
- Object send(ID name_id);
59
+ inline Object send(ID name_id) {
60
+ VALUE rb_result = rb_funcall(rb_object_, name_id, 0);
61
+ return Object(rb_result);
62
+ }
60
63
 
61
64
  inline Object send(const char *name) {
62
65
  return send(rb_intern(name));
@@ -66,7 +69,19 @@ namespace rb {
66
69
  return send(rb_intern_str(name));
67
70
  }
68
71
 
69
- Object send(ID name_id, std::initializer_list<VALUE> args);
72
+ inline Object send(ID name_id, std::initializer_list<VALUE> args) {
73
+ auto n = args.size();
74
+ VALUE rb_args[n];
75
+ int i = 0;
76
+ for (auto arg : args) {
77
+ rb_args[i++] = arg;
78
+ }
79
+ VALUE rb_result = rb_funcallv(rb_object_,
80
+ name_id,
81
+ static_cast<int>(n),
82
+ rb_args);
83
+ return Object(rb_result);
84
+ }
70
85
 
71
86
  inline Object send(const char *name, std::initializer_list<VALUE> args) {
72
87
  return send(rb_intern(name), args);
@@ -76,9 +91,33 @@ namespace rb {
76
91
  return send(rb_intern_str(name), args);
77
92
  }
78
93
 
79
- Object send(ID name_id,
80
- std::initializer_list<VALUE> args,
81
- MethodWithoutArguments block);
94
+ inline Object send(ID name_id,
95
+ std::initializer_list<VALUE> args,
96
+ MethodWithoutArguments block) {
97
+ auto n = args.size();
98
+ VALUE rb_args[n];
99
+ int i = 0;
100
+ for (auto arg : args) {
101
+ rb_args[i++] = arg;
102
+ }
103
+ auto call_block = [](RB_BLOCK_CALL_FUNC_ARGLIST(rb_data, rb_block)) {
104
+ auto block = reinterpret_cast<rb::MethodWithoutArguments>(rb_block);
105
+ return block(rb_data);
106
+ };
107
+ #ifdef RUBY_BACKWARD_CXXANYARGS_HPP
108
+ # define CAST_CALLER(caller) caller
109
+ #else
110
+ # define CAST_CALLER(caller) reinterpret_cast<RawMethod>(+caller)
111
+ #endif
112
+ auto rb_result = rb_block_call(rb_object_,
113
+ name_id,
114
+ static_cast<int>(n),
115
+ rb_args,
116
+ CAST_CALLER(call_block),
117
+ reinterpret_cast<VALUE>(block));
118
+ #undef CAST_CALLER
119
+ return Object(rb_result);
120
+ }
82
121
 
83
122
  inline Object send(const char *name,
84
123
  std::initializer_list<VALUE> args,
@@ -3,7 +3,7 @@
3
3
  #include <ruby/type.hpp>
4
4
 
5
5
  namespace rb {
6
- class RB_EXTPP_EXPORT State {
6
+ class State {
7
7
  public:
8
8
  explicit State(int state) :
9
9
  state_(state) {
@@ -17,7 +17,14 @@ namespace rb {
17
17
  int state_;
18
18
  };
19
19
 
20
- RB_EXTPP_EXPORT VALUE protect(RawCallback callback, VALUE callback_data);
20
+ inline VALUE protect(RawCallback callback, VALUE callback_data) {
21
+ int state = 0;
22
+ auto result = rb_protect(callback, callback_data, &state);
23
+ if (state != 0) {
24
+ throw State(state);
25
+ }
26
+ return result;
27
+ }
21
28
 
22
29
  template <typename NoArgumentCallback>
23
30
  VALUE protect(const NoArgumentCallback& callback) {
data/include/ruby.hpp CHANGED
@@ -5,16 +5,6 @@
5
5
  #define RB_BEGIN_DECLS extern "C" {
6
6
  #define RB_END_DECLS }
7
7
 
8
- #ifdef _WIN32
9
- # ifdef RB_EXTPP_COMPILATION
10
- # define RB_EXTPP_EXPORT __declspec(dllexport)
11
- # else
12
- # define RB_EXTPP_EXPORT __declspec(dllimport)
13
- # endif
14
- #else
15
- # define RB_EXTPP_EXPORT __attribute__((visibility("default")))
16
- #endif
17
-
18
8
  #include <ruby/cast.hpp>
19
9
  #include <ruby/class.hpp>
20
10
  #include <ruby/object.hpp>
data/lib/extpp/setup.rb CHANGED
@@ -1,4 +0,0 @@
1
- if Object.const_defined?(:RubyInstaller)
2
- ext_dir = File.expand_path(File.join(__dir__, "..", "..", "ext", "extpp"))
3
- RubyInstaller::Runtime.add_dll_directory(ext_dir)
4
- end
data/lib/extpp/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module ExtPP
2
- VERSION = "0.0.9"
2
+ VERSION = "0.1.0"
3
3
  end
data/lib/extpp.rb CHANGED
@@ -1,5 +1,4 @@
1
1
  require "extpp/compiler"
2
- require "extpp/platform"
3
2
 
4
3
  compiler = ExtPP::Compiler.new(RbConfig.expand($CXXFLAGS))
5
4
  compiler.check
@@ -26,14 +25,3 @@ $(OBJS): $(extpp_headers)
26
25
  end
27
26
  end
28
27
  extend(header_files_dependency_injector)
29
-
30
- platform = ExtPP::Platform.new
31
-
32
- [
33
- File.join(__dir__, "..", "ext", "extpp"),
34
- __dir__,
35
- ].each do |candidate_dir|
36
- so_name = "libruby-extpp.#{platform.dynamic_library_extension}"
37
- lib_path = File.expand_path(File.join(candidate_dir, so_name))
38
- $LIBS += " #{lib_path.quote}" if File.exist?(lib_path)
39
- end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: extpp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kouhei Sutou
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-11-02 00:00:00.000000000 Z
11
+ date: 2021-10-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -58,64 +58,27 @@ description: |-
58
58
  email:
59
59
  - kou@clear-code.com
60
60
  executables: []
61
- extensions:
62
- - ext/extpp/extconf.rb
61
+ extensions: []
63
62
  extra_rdoc_files: []
64
63
  files:
65
64
  - LICENSE.txt
66
65
  - README.md
67
66
  - Rakefile
68
67
  - doc/text/news.md
69
- - ext/extpp/class.cpp
70
- - ext/extpp/extconf.rb
71
- - ext/extpp/function.cpp
72
- - ext/extpp/function.hpp
73
- - ext/extpp/object.cpp
74
- - ext/extpp/protect.cpp
75
68
  - include/ruby.hpp
76
69
  - include/ruby/cast.hpp
77
70
  - include/ruby/class.hpp
71
+ - include/ruby/function.hpp
78
72
  - include/ruby/object.hpp
79
73
  - include/ruby/protect.hpp
80
74
  - include/ruby/type.hpp
81
75
  - lib/extpp.rb
82
76
  - lib/extpp/compiler.rb
83
- - lib/extpp/platform.rb
84
77
  - lib/extpp/setup.rb
85
78
  - lib/extpp/version.rb
86
79
  - sample/hello/Rakefile
87
80
  - sample/hello/extconf.rb
88
81
  - sample/hello/hello.cpp
89
- - test/fixtures/cast/Makefile
90
- - test/fixtures/cast/cast.cpp
91
- - test/fixtures/cast/cast.o
92
- - test/fixtures/cast/cast.so
93
- - test/fixtures/cast/extconf.rb
94
- - test/fixtures/cast/mkmf.log
95
- - test/fixtures/class/Makefile
96
- - test/fixtures/class/class.cpp
97
- - test/fixtures/class/class.o
98
- - test/fixtures/class/class.so
99
- - test/fixtures/class/extconf.rb
100
- - test/fixtures/class/mkmf.log
101
- - test/fixtures/object/Makefile
102
- - test/fixtures/object/extconf.rb
103
- - test/fixtures/object/mkmf.log
104
- - test/fixtures/object/object.cpp
105
- - test/fixtures/object/object.o
106
- - test/fixtures/object/object.so
107
- - test/fixtures/protect/Makefile
108
- - test/fixtures/protect/extconf.rb
109
- - test/fixtures/protect/mkmf.log
110
- - test/fixtures/protect/protect.cpp
111
- - test/fixtures/protect/protect.o
112
- - test/fixtures/protect/protect.so
113
- - test/helper.rb
114
- - test/run-test.rb
115
- - test/test-cast.rb
116
- - test/test-class.rb
117
- - test/test-object.rb
118
- - test/test-protect.rb
119
82
  homepage: https://github.com/red-data-tools/extpp
120
83
  licenses:
121
84
  - BSD-2-Clause
@@ -135,38 +98,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
135
98
  - !ruby/object:Gem::Version
136
99
  version: '0'
137
100
  requirements: []
138
- rubygems_version: 3.2.0.rc.2
101
+ rubygems_version: 3.3.0.dev
139
102
  signing_key:
140
103
  specification_version: 4
141
104
  summary: Ext++ is a Ruby extension that provides C++ API for writing Ruby extension.
142
- test_files:
143
- - test/fixtures/cast/Makefile
144
- - test/fixtures/cast/cast.cpp
145
- - test/fixtures/cast/cast.o
146
- - test/fixtures/cast/cast.so
147
- - test/fixtures/cast/extconf.rb
148
- - test/fixtures/cast/mkmf.log
149
- - test/fixtures/class/Makefile
150
- - test/fixtures/class/class.cpp
151
- - test/fixtures/class/class.o
152
- - test/fixtures/class/class.so
153
- - test/fixtures/class/extconf.rb
154
- - test/fixtures/class/mkmf.log
155
- - test/fixtures/object/Makefile
156
- - test/fixtures/object/extconf.rb
157
- - test/fixtures/object/mkmf.log
158
- - test/fixtures/object/object.cpp
159
- - test/fixtures/object/object.o
160
- - test/fixtures/object/object.so
161
- - test/fixtures/protect/Makefile
162
- - test/fixtures/protect/extconf.rb
163
- - test/fixtures/protect/mkmf.log
164
- - test/fixtures/protect/protect.cpp
165
- - test/fixtures/protect/protect.o
166
- - test/fixtures/protect/protect.so
167
- - test/helper.rb
168
- - test/run-test.rb
169
- - test/test-cast.rb
170
- - test/test-class.rb
171
- - test/test-object.rb
172
- - test/test-protect.rb
105
+ test_files: []