extpp 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,4 @@
1
+ require "mkmf"
2
+ require "extpp"
3
+
4
+ create_makefile("protect")
@@ -0,0 +1,140 @@
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
+
@@ -0,0 +1,70 @@
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
+ }
@@ -39,4 +39,8 @@ class CastTest < Test::Unit::TestCase
39
39
  def test_string
40
40
  assert_equal("Hello", @caster.cast_string("Hello"))
41
41
  end
42
+
43
+ def test_std_string
44
+ assert_equal("Hello", @caster.cast_std_string("Hello"))
45
+ end
42
46
  end
@@ -0,0 +1,54 @@
1
+ class ProtectTest < Test::Unit::TestCase
2
+ extend Helper::Fixture
3
+
4
+ class << self
5
+ def startup
6
+ return unless self == ProtectTest
7
+ lib_dir = File.join(__dir__, "..", "lib")
8
+ Dir.chdir(fixture_path("protect")) do
9
+ system(RbConfig.ruby, "-w", "-I", lib_dir, "extconf.rb")
10
+ system("make")
11
+ end
12
+ require fixture_path("protect", "protect")
13
+ end
14
+ end
15
+
16
+ class Listener
17
+ attr_reader :events
18
+ def initialize
19
+ @events = []
20
+ end
21
+
22
+ def notify(event)
23
+ @events << event
24
+ end
25
+ end
26
+
27
+ def setup
28
+ @protect_methods = ProtectMethods.new
29
+ end
30
+
31
+ def assert_protect(method_name)
32
+ listener = Listener.new
33
+ assert_raise(RuntimeError.new("message")) do
34
+ @protect_methods.__send__(method_name, listener) do
35
+ raise "message"
36
+ end
37
+ end
38
+ assert_equal([
39
+ "outer: constructed",
40
+ "inner: constructed",
41
+ "inner: destructed",
42
+ "outer: caught",
43
+ ],
44
+ listener.events)
45
+ end
46
+
47
+ def test_raw
48
+ assert_protect(:protect_raw)
49
+ end
50
+
51
+ def test_closure
52
+ assert_protect(:protect_closure)
53
+ end
54
+ 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.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kouhei Sutou
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-02-18 00:00:00.000000000 Z
11
+ date: 2019-02-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -38,48 +38,6 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: yard
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: kramdown
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: packnga
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '0'
83
41
  - !ruby/object:Gem::Dependency
84
42
  name: test-unit
85
43
  requirement: !ruby/object:Gem::Requirement
@@ -113,10 +71,12 @@ files:
113
71
  - ext/extpp/function.cpp
114
72
  - ext/extpp/function.hpp
115
73
  - ext/extpp/object.cpp
74
+ - ext/extpp/protect.cpp
116
75
  - include/ruby.hpp
117
76
  - include/ruby/cast.hpp
118
77
  - include/ruby/class.hpp
119
78
  - include/ruby/object.hpp
79
+ - include/ruby/protect.hpp
120
80
  - include/ruby/type.hpp
121
81
  - lib/extpp.rb
122
82
  - lib/extpp/compiler.rb
@@ -143,11 +103,18 @@ files:
143
103
  - test/fixtures/object/object.cpp
144
104
  - test/fixtures/object/object.o
145
105
  - test/fixtures/object/object.so
106
+ - test/fixtures/protect/Makefile
107
+ - test/fixtures/protect/extconf.rb
108
+ - test/fixtures/protect/mkmf.log
109
+ - test/fixtures/protect/protect.cpp
110
+ - test/fixtures/protect/protect.o
111
+ - test/fixtures/protect/protect.so
146
112
  - test/helper.rb
147
113
  - test/run-test.rb
148
114
  - test/test-cast.rb
149
115
  - test/test-class.rb
150
116
  - test/test-object.rb
117
+ - test/test-protect.rb
151
118
  homepage: https://github.com/red-data-tools/extpp
152
119
  licenses:
153
120
  - BSD-2-Clause
@@ -168,12 +135,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
168
135
  version: '0'
169
136
  requirements: []
170
137
  rubyforge_project:
171
- rubygems_version: 2.5.2.2
138
+ rubygems_version: 2.7.6
172
139
  signing_key:
173
140
  specification_version: 4
174
141
  summary: Ext++ is a Ruby extension that provides C++ API for writing Ruby extension.
175
142
  test_files:
176
143
  - test/test-object.rb
144
+ - test/test-protect.rb
177
145
  - test/test-class.rb
178
146
  - test/fixtures/class/class.so
179
147
  - test/fixtures/class/mkmf.log
@@ -181,6 +149,12 @@ test_files:
181
149
  - test/fixtures/class/class.o
182
150
  - test/fixtures/class/Makefile
183
151
  - test/fixtures/class/extconf.rb
152
+ - test/fixtures/protect/mkmf.log
153
+ - test/fixtures/protect/protect.so
154
+ - test/fixtures/protect/protect.cpp
155
+ - test/fixtures/protect/Makefile
156
+ - test/fixtures/protect/protect.o
157
+ - test/fixtures/protect/extconf.rb
184
158
  - test/fixtures/cast/mkmf.log
185
159
  - test/fixtures/cast/cast.cpp
186
160
  - test/fixtures/cast/cast.so