rucy 0.1.12 → 0.1.13
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.doc/ext/rucy/class.cpp +10 -73
- data/README.md +2 -2
- data/Rakefile +10 -15
- data/VERSION +1 -1
- data/ext/rucy/class.cpp +17 -84
- data/ext/rucy/class.h +0 -10
- data/ext/rucy/extconf.rb +2 -3
- data/include/rucy/debug.h +22 -0
- data/include/rucy/extension.h.erb +85 -172
- data/include/rucy/value.h.erb +30 -15
- data/include/rucy.h +4 -1
- data/lib/rucy/module.rb +4 -19
- data/lib/rucy/rake.rb +62 -0
- data/rucy.gemspec +4 -6
- data/src/value.cpp.erb +36 -41
- data/test/test_class.rb +2 -34
- metadata +20 -47
data/src/value.cpp.erb
CHANGED
@@ -5,6 +5,7 @@
|
|
5
5
|
#include <assert.h>
|
6
6
|
#include "rucy/function.h"
|
7
7
|
#include "rucy/exception.h"
|
8
|
+
#include "rucy/debug.h"
|
8
9
|
|
9
10
|
|
10
11
|
namespace Rucy
|
@@ -101,6 +102,12 @@ namespace Rucy
|
|
101
102
|
return RB_FLOAT_TYPE_P(val) || is_kind_of(rb_cFloat);
|
102
103
|
}
|
103
104
|
|
105
|
+
bool
|
106
|
+
Value::is_num () const
|
107
|
+
{
|
108
|
+
return is_i() || is_f();
|
109
|
+
}
|
110
|
+
|
104
111
|
bool
|
105
112
|
Value::is_s () const
|
106
113
|
{
|
@@ -325,13 +332,13 @@ namespace Rucy
|
|
325
332
|
}
|
326
333
|
|
327
334
|
Value&
|
328
|
-
Value::operator [] (
|
335
|
+
Value::operator [] (size_t i)
|
329
336
|
{
|
330
337
|
return as_array()[i];
|
331
338
|
}
|
332
339
|
|
333
340
|
const Value&
|
334
|
-
Value::operator [] (
|
341
|
+
Value::operator [] (size_t i) const
|
335
342
|
{
|
336
343
|
return const_cast<Value*>(this)->operator[](i);
|
337
344
|
}
|
@@ -339,7 +346,7 @@ namespace Rucy
|
|
339
346
|
const char*
|
340
347
|
Value::c_str () const
|
341
348
|
{
|
342
|
-
return
|
349
|
+
return as_s(true);
|
343
350
|
}
|
344
351
|
|
345
352
|
static int
|
@@ -367,6 +374,12 @@ namespace Rucy
|
|
367
374
|
return get_length(*this, size);
|
368
375
|
}
|
369
376
|
|
377
|
+
bool
|
378
|
+
Value::empty () const
|
379
|
+
{
|
380
|
+
return size() <= 0;
|
381
|
+
}
|
382
|
+
|
370
383
|
|
371
384
|
GlobalValue::GlobalValue ()
|
372
385
|
{
|
@@ -433,7 +446,7 @@ namespace Rucy
|
|
433
446
|
init(gc_);
|
434
447
|
}
|
435
448
|
|
436
|
-
GlobalValue::GlobalValue (const
|
449
|
+
GlobalValue::GlobalValue (const This& obj, bool gc_)
|
437
450
|
: Super(obj)
|
438
451
|
{
|
439
452
|
init(gc_);
|
@@ -443,50 +456,41 @@ namespace Rucy
|
|
443
456
|
GlobalValue::operator = (const Value& v)
|
444
457
|
{
|
445
458
|
Super::operator=(v);
|
446
|
-
|
459
|
+
return *this;
|
460
|
+
}
|
461
|
+
|
462
|
+
GlobalValue&
|
463
|
+
GlobalValue::operator = (const This& obj)
|
464
|
+
{
|
465
|
+
Super::operator=(obj);
|
447
466
|
return *this;
|
448
467
|
}
|
449
468
|
|
450
469
|
GlobalValue::~GlobalValue ()
|
451
470
|
{
|
452
|
-
|
471
|
+
if (gc_disable_count > 0)
|
472
|
+
rb_gc_unregister_address(&val);
|
453
473
|
}
|
454
474
|
|
455
475
|
void
|
456
|
-
GlobalValue::
|
476
|
+
GlobalValue::enable_gc () const
|
457
477
|
{
|
458
|
-
gc_disable_count
|
459
|
-
|
478
|
+
if (--gc_disable_count == 0)
|
479
|
+
rb_gc_unregister_address(const_cast<RubyValue*>(&val));
|
460
480
|
}
|
461
481
|
|
462
482
|
void
|
463
|
-
GlobalValue::
|
483
|
+
GlobalValue::disable_gc () const
|
464
484
|
{
|
465
|
-
gc_disable_count
|
466
|
-
|
467
|
-
if (!gc_) gc(false);
|
485
|
+
if (++gc_disable_count == 1)
|
486
|
+
rb_gc_register_address(const_cast<RubyValue*>(&val));
|
468
487
|
}
|
469
488
|
|
470
489
|
void
|
471
|
-
GlobalValue::
|
490
|
+
GlobalValue::init (bool gc_)
|
472
491
|
{
|
473
|
-
|
474
|
-
|
475
|
-
if (IMMEDIATE_P(val))
|
476
|
-
{
|
477
|
-
if (gc_guarded) rb_gc_unregister_address((RubyValue*) &val);
|
478
|
-
gc_guarded = false;
|
479
|
-
}
|
480
|
-
else if (gc_disable_count > 0)
|
481
|
-
{
|
482
|
-
if (!gc_guarded) rb_gc_register_address((RubyValue*) &val);
|
483
|
-
gc_guarded = true;
|
484
|
-
}
|
485
|
-
else
|
486
|
-
{
|
487
|
-
if (gc_guarded) rb_gc_unregister_address((RubyValue*) &val);
|
488
|
-
gc_guarded = false;
|
489
|
-
}
|
492
|
+
gc_disable_count = 0;
|
493
|
+
if (!gc_) disable_gc();
|
490
494
|
}
|
491
495
|
|
492
496
|
|
@@ -591,16 +595,7 @@ namespace Rucy
|
|
591
595
|
{
|
592
596
|
return Value(size, array);
|
593
597
|
}
|
594
|
-
|
595
|
-
Value
|
596
|
-
value (void* ptr)
|
597
|
-
{
|
598
|
-
if (ptr)
|
599
|
-
argument_error(__FILE__, __LINE__, "Rucy::value(void*) can take only (void*) NULL.");
|
600
|
-
|
601
|
-
return nil();
|
602
|
-
}
|
603
|
-
% (1..10).each do |n|
|
598
|
+
% (1..16).each do |n|
|
604
599
|
|
605
600
|
Value
|
606
601
|
array (<%= params(n, ', ') {|i| "Value v#{i}"} %>)
|
data/test/test_class.rb
CHANGED
@@ -14,10 +14,6 @@ class Temp < Rucy::Tester::Sub
|
|
14
14
|
"Temp::name_overridable"
|
15
15
|
end
|
16
16
|
|
17
|
-
def name_overridable_faster ()
|
18
|
-
"Temp::name_overridable_faster"
|
19
|
-
end
|
20
|
-
|
21
17
|
end# Temp
|
22
18
|
|
23
19
|
|
@@ -94,7 +90,7 @@ class TestClass < Test::Unit::TestCase
|
|
94
90
|
assert_equal "Base::name", base_raw.call_name
|
95
91
|
assert_equal "Sub::name", sub .call_name
|
96
92
|
assert_equal "Sub::name", sub_raw .call_name
|
97
|
-
assert_equal "Sub::name", temp .call_name
|
93
|
+
assert_equal "Sub::name", temp .call_name# "Sub" instead of "Temp"!
|
98
94
|
end
|
99
95
|
|
100
96
|
def test_call_name_overridable ()
|
@@ -105,37 +101,9 @@ class TestClass < Test::Unit::TestCase
|
|
105
101
|
assert_equal "Temp::name_overridable", temp .call_name_overridable
|
106
102
|
end
|
107
103
|
|
108
|
-
class X < Sub; end
|
109
|
-
|
110
|
-
def test_is_overridden ()
|
111
|
-
m = :name_overridable_faster
|
112
|
-
def is_overridden (o) o.is_name_overridable_faster_overridden; end
|
113
|
-
|
114
|
-
assert_equal true, is_overridden(temp)
|
115
|
-
|
116
|
-
o = X.new
|
117
|
-
assert_equal false, is_overridden(o)
|
118
|
-
def o.name_overridable_faster () end
|
119
|
-
assert_equal true, is_overridden(o)
|
120
|
-
|
121
|
-
o = X.new
|
122
|
-
assert_equal false, is_overridden(o)
|
123
|
-
eval "class X; def #{m}; end; end"
|
124
|
-
assert_equal true, is_overridden(o)
|
125
|
-
eval "class X; remove_method :#{m}; end"
|
126
|
-
assert_equal false, is_overridden(o)
|
127
|
-
|
128
|
-
o = X.new
|
129
|
-
assert_equal false, is_overridden(o)
|
130
|
-
X.send(:define_method, m) {}
|
131
|
-
assert_equal true, is_overridden(o)
|
132
|
-
X.send :remove_method, m
|
133
|
-
assert_equal false, is_overridden(o)
|
134
|
-
end
|
135
|
-
|
136
104
|
def test_gc ()
|
137
105
|
def simple_objs (name, n = 10) ([nil] * n).map {SimpleObj.new name} end
|
138
|
-
def gc (
|
106
|
+
def gc () GC.start end
|
139
107
|
rt = Rucy::Tester
|
140
108
|
|
141
109
|
gc
|
metadata
CHANGED
@@ -1,71 +1,49 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rucy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.13
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
7
|
+
- xordog
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-11-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: rake
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ">="
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '0'
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: xot
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
30
16
|
requirements:
|
31
|
-
- - "
|
17
|
+
- - "~>"
|
32
18
|
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
19
|
+
version: '0.1'
|
34
20
|
type: :runtime
|
35
21
|
prerelease: false
|
36
22
|
version_requirements: !ruby/object:Gem::Requirement
|
37
23
|
requirements:
|
38
|
-
- - "
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '0'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: gemcutter
|
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
|
-
- - ">="
|
24
|
+
- - "~>"
|
53
25
|
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
26
|
+
version: '0.1'
|
55
27
|
description: This library helps you to develop Ruby Extension by C++.
|
56
|
-
email:
|
28
|
+
email: xordog@gmail.com
|
57
29
|
executables:
|
58
30
|
- rucy2rdoc
|
59
31
|
extensions:
|
60
32
|
- Rakefile
|
61
33
|
extra_rdoc_files:
|
34
|
+
- ".doc/ext/rucy/struct.cpp"
|
35
|
+
- ".doc/ext/rucy/tester.cpp"
|
36
|
+
- ".doc/ext/rucy/exception.cpp"
|
37
|
+
- ".doc/ext/rucy/function.cpp"
|
38
|
+
- ".doc/ext/rucy/value.cpp"
|
39
|
+
- ".doc/ext/rucy/class.cpp"
|
40
|
+
files:
|
62
41
|
- ".doc/ext/rucy/class.cpp"
|
63
42
|
- ".doc/ext/rucy/exception.cpp"
|
64
43
|
- ".doc/ext/rucy/function.cpp"
|
65
44
|
- ".doc/ext/rucy/struct.cpp"
|
66
45
|
- ".doc/ext/rucy/tester.cpp"
|
67
46
|
- ".doc/ext/rucy/value.cpp"
|
68
|
-
files:
|
69
47
|
- README.md
|
70
48
|
- Rakefile
|
71
49
|
- VERSION
|
@@ -81,6 +59,7 @@ files:
|
|
81
59
|
- ext/rucy/value.cpp
|
82
60
|
- include/rucy.h
|
83
61
|
- include/rucy/class.h
|
62
|
+
- include/rucy/debug.h
|
84
63
|
- include/rucy/exception.h
|
85
64
|
- include/rucy/extension.h.erb
|
86
65
|
- include/rucy/function.h.erb
|
@@ -91,6 +70,7 @@ files:
|
|
91
70
|
- include/rucy/value.h.erb
|
92
71
|
- lib/rucy.rb
|
93
72
|
- lib/rucy/module.rb
|
73
|
+
- lib/rucy/rake.rb
|
94
74
|
- rucy.gemspec
|
95
75
|
- src/class.cpp
|
96
76
|
- src/exception.cpp
|
@@ -107,12 +87,6 @@ files:
|
|
107
87
|
- test/test_function.rb
|
108
88
|
- test/test_struct.rb
|
109
89
|
- test/test_value.rb
|
110
|
-
- ".doc/ext/rucy/class.cpp"
|
111
|
-
- ".doc/ext/rucy/exception.cpp"
|
112
|
-
- ".doc/ext/rucy/function.cpp"
|
113
|
-
- ".doc/ext/rucy/struct.cpp"
|
114
|
-
- ".doc/ext/rucy/tester.cpp"
|
115
|
-
- ".doc/ext/rucy/value.cpp"
|
116
90
|
homepage: https://github.com/xord/rucy
|
117
91
|
licenses: []
|
118
92
|
metadata: {}
|
@@ -122,17 +96,16 @@ require_paths:
|
|
122
96
|
- lib
|
123
97
|
required_ruby_version: !ruby/object:Gem::Requirement
|
124
98
|
requirements:
|
125
|
-
- - "
|
99
|
+
- - "~>"
|
126
100
|
- !ruby/object:Gem::Version
|
127
|
-
version:
|
101
|
+
version: '2'
|
128
102
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
129
103
|
requirements:
|
130
104
|
- - ">="
|
131
105
|
- !ruby/object:Gem::Version
|
132
106
|
version: '0'
|
133
107
|
requirements: []
|
134
|
-
|
135
|
-
rubygems_version: 2.0.3
|
108
|
+
rubygems_version: 3.0.3
|
136
109
|
signing_key:
|
137
110
|
specification_version: 4
|
138
111
|
summary: A Ruby C++ Extension Helper Library.
|