rucy 0.1.8 → 0.1.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.doc/ext/rucy/class.cpp +4 -1
- data/VERSION +1 -1
- data/ext/rucy/class.cpp +4 -1
- data/include/rucy/extension.h.erb +46 -12
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 646a114233903a170a9c11e5f4af5f5b8f9c1d1d
|
4
|
+
data.tar.gz: 533042ab4b6c59c239e5f7a2497c76370c76fdd0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1f739aa545afbde9cb4bc5bcc67158f381d098e4de0dbb61dfd9e0d2598363e8965de6617046c6687150c79f8b87eacdb5b76051f5993f3af28e612dcbf72ce2
|
7
|
+
data.tar.gz: eaf1449f0f84d087b9cc722737ac2534b9e2083c3b0711132be58f55d895079e6dd9a6f5bb703f5c216b55c774619f82873ab837e698473afecf6cb9bf520555
|
data/.doc/ext/rucy/class.cpp
CHANGED
@@ -41,7 +41,10 @@ class RubyBase : public ClassWrapper<T>
|
|
41
41
|
virtual const char* name_overridable () const
|
42
42
|
{
|
43
43
|
RUCY_SYM(name_overridable);
|
44
|
-
|
44
|
+
if (RUCY_IS_OVERRIDABLE())
|
45
|
+
return this->value.call(name_overridable).c_str();
|
46
|
+
else
|
47
|
+
return Super::name_overridable();
|
45
48
|
}
|
46
49
|
|
47
50
|
virtual const char* name_overridable_faster () const
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.9
|
data/ext/rucy/class.cpp
CHANGED
@@ -41,7 +41,10 @@ class RubyBase : public ClassWrapper<T>
|
|
41
41
|
virtual const char* name_overridable () const
|
42
42
|
{
|
43
43
|
RUCY_SYM(name_overridable);
|
44
|
-
|
44
|
+
if (RUCY_IS_OVERRIDABLE())
|
45
|
+
return this->value.call(name_overridable).c_str();
|
46
|
+
else
|
47
|
+
return Super::name_overridable();
|
45
48
|
}
|
46
49
|
|
47
50
|
virtual const char* name_overridable_faster () const
|
@@ -86,10 +86,10 @@
|
|
86
86
|
value (native_class* obj, Value klass) \
|
87
87
|
{ \
|
88
88
|
if (!obj) return nil(); \
|
89
|
-
|
90
|
-
if (!
|
91
|
-
if (
|
92
|
-
return
|
89
|
+
Value* pval = (Value*) obj->rucy_value(); \
|
90
|
+
if (!pval) return new_ref(klass, obj); \
|
91
|
+
if (pval->is_nil()) *pval = new_wrapper(klass, obj); \
|
92
|
+
return *pval; \
|
93
93
|
} \
|
94
94
|
}
|
95
95
|
|
@@ -128,10 +128,9 @@
|
|
128
128
|
RUCY_DEFINE_WRAPPER_VALUE_FROM_TO(native_class)
|
129
129
|
|
130
130
|
|
131
|
-
#define RUCY_OVERRIDE_BEGIN(
|
132
|
-
typedef
|
133
|
-
|
134
|
-
enum { OVERRIDE_ID_FIRST = RucyWrapper::OVERRIDE_ID_LAST - 1,
|
131
|
+
#define RUCY_OVERRIDE_BEGIN(super_class) \
|
132
|
+
typedef super_class Super; \
|
133
|
+
enum { OVERRIDE_ID_FIRST = super_class::OVERRIDE_ID_LAST - 1,
|
135
134
|
|
136
135
|
#define RUCY_OVERRIDE_END \
|
137
136
|
OVERRIDE_ID_LAST };
|
@@ -139,6 +138,9 @@
|
|
139
138
|
#define RUCY_OVERRIDE_ID(name) \
|
140
139
|
OID_##name,
|
141
140
|
|
141
|
+
#define RUCY_IS_OVERRIDABLE() \
|
142
|
+
this->is_overridable()
|
143
|
+
|
142
144
|
#define RUCY_IS_OVERRIDDEN(name) \
|
143
145
|
this->is_overridden(name, OID_##name)
|
144
146
|
|
@@ -255,7 +257,7 @@
|
|
255
257
|
while(0)
|
256
258
|
|
257
259
|
#define RUCY_WRAPPER_CALL(native_class, obj, fun) \
|
258
|
-
((obj)->
|
260
|
+
((obj)->rucy_disable_override() ? (obj)->fun : (obj)->fun)
|
259
261
|
|
260
262
|
|
261
263
|
namespace Rucy
|
@@ -287,7 +289,7 @@ namespace Rucy
|
|
287
289
|
GlobalValue value;
|
288
290
|
|
289
291
|
ClassWrapper ()
|
290
|
-
: value(nil(), true)
|
292
|
+
: value(nil(), true), overridable(true)
|
291
293
|
{
|
292
294
|
}
|
293
295
|
|
@@ -318,11 +320,28 @@ namespace Rucy
|
|
318
320
|
override_flags.reset();
|
319
321
|
}
|
320
322
|
|
323
|
+
virtual bool is_overridable () const
|
324
|
+
{
|
325
|
+
if (!overridable)
|
326
|
+
{
|
327
|
+
overridable = true;
|
328
|
+
return false;
|
329
|
+
}
|
330
|
+
|
331
|
+
return true;
|
332
|
+
}
|
333
|
+
|
321
334
|
virtual bool is_overridden (const Symbol& name, uint id) const
|
322
335
|
{
|
323
336
|
if (id <= OVERRIDE_ID_UNKNOWN)
|
324
337
|
return false;
|
325
338
|
|
339
|
+
if (!overridable)
|
340
|
+
{
|
341
|
+
overridable = true;
|
342
|
+
return false;
|
343
|
+
}
|
344
|
+
|
326
345
|
bool checked = false, overridden = false;
|
327
346
|
get_override_flag(&checked, &overridden, id);
|
328
347
|
if (checked) return overridden;
|
@@ -334,8 +353,14 @@ namespace Rucy
|
|
334
353
|
return overridden;
|
335
354
|
}
|
336
355
|
|
337
|
-
virtual
|
356
|
+
virtual void* rucy_value () const
|
338
357
|
{
|
358
|
+
return (void*) &value;
|
359
|
+
}
|
360
|
+
|
361
|
+
virtual bool rucy_disable_override () const
|
362
|
+
{
|
363
|
+
overridable = false;
|
339
364
|
return true;
|
340
365
|
}
|
341
366
|
|
@@ -366,11 +391,20 @@ namespace Rucy
|
|
366
391
|
|
367
392
|
mutable boost::dynamic_bitset<> override_flags;
|
368
393
|
|
394
|
+
mutable bool overridable;
|
395
|
+
|
369
396
|
bool check_overridden (const Symbol& name) const
|
370
397
|
{
|
371
398
|
RUCY_SYM(method);
|
372
399
|
RUCY_SYM(owner);
|
373
|
-
|
400
|
+
RUCY_SYM(instance_methods);
|
401
|
+
RUCY_SYM_Q(include);
|
402
|
+
RUCY_SYM(clear_override_flags);
|
403
|
+
return !value
|
404
|
+
.call(method, name.value())
|
405
|
+
.call(owner)
|
406
|
+
.call(instance_methods, false)
|
407
|
+
.call(include, clear_override_flags.value());
|
374
408
|
}
|
375
409
|
|
376
410
|
void get_override_flag (bool* checked, bool* overridden, uint id) const
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
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.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- snori
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-11-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|