sereal 0.0.12 → 0.0.13

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 93b2d3dcf39684fbf9fd094b94b4d78227bc0877
4
- data.tar.gz: ce21c8d417fcf323d316e3364fdabb3f4d35def5
3
+ metadata.gz: 50eec33dee006e2986b5ef0bb2b5c8b0718dd8da
4
+ data.tar.gz: 495d916c5921970104274bb1f156f7e63551de53
5
5
  SHA512:
6
- metadata.gz: fc1d1ff34c241d8d9a31a4e3d9bf97683e0517cac457e97cb385d5656f0f07e436c029d09691736fd8909948ad2e85fcd285b7d27e6b3773e81fbbad783a5787
7
- data.tar.gz: c3e9c73be0841b2beb34958b2972701604bbd7d3d014f1fdbcdd56612aef46614d6cf8b9d474a080a78f0b52dbcdb0fb27033bfce0caf9a3c06815fda4fefc85
6
+ metadata.gz: db64209177c66c89f9d81ccd1feb2375e5b5bc2f4e09aef1b8aa2312f31d63cc129170f3ef90489797c8efe660c83410c152694b8e990f2c71d255197871ca1c
7
+ data.tar.gz: e596221d097d6187a92edfc0321287d32d28dbc67e04d3bd76298285d7a4a4a65675fc8661528dd640696194dead242a3dbdc0089956d00c93e7d863c7128aa9
@@ -14,7 +14,7 @@ static inline void s_init_tracker(sereal_t *s) {
14
14
  if (s->tracked == Qnil) {
15
15
  SD(s,"initializing tracker");
16
16
  s->tracked = rb_hash_new();
17
- rb_gc_mark(s->tracked);
17
+ rb_gc_register_address(&s->tracked);
18
18
  }
19
19
  }
20
20
 
@@ -27,7 +27,7 @@ static inline void s_reset_tracker(sereal_t *s) {
27
27
  static inline void s_init_copy(sereal_t *s) {
28
28
  if (s->copy == Qnil) {
29
29
  s->copy = rb_hash_new();
30
- rb_gc_mark(s->copy);
30
+ rb_gc_register_address(&s->tracked);
31
31
  }
32
32
  }
33
33
 
@@ -35,6 +35,12 @@ static inline void s_destroy(sereal_t *s) {
35
35
  if (!s)
36
36
  return;
37
37
  s_reset_tracker(s);
38
+ if (s->tracked != Qnil)
39
+ rb_gc_unregister_address(&s->tracked);
40
+
41
+ if (s->copy != Qnil)
42
+ rb_gc_unregister_address(&s->copy);
43
+
38
44
  s_free_data_if_not_mine(s);
39
45
  free(s);
40
46
  }
@@ -245,7 +245,7 @@ static VALUE s_read_object_freeze(sereal_t *s, u8 tag) {
245
245
  MUST_BE_SOMETHING(s_klass,T_STRING);
246
246
 
247
247
  // hash it?
248
- VALUE klass = rb_const_get(rb_cObject, rb_intern(RSTRING_PTR(s_klass)));
248
+ VALUE klass = rb_path_to_class(s_klass);
249
249
  if (!rb_obj_respond_to(klass,THAW,0))
250
250
  s_raise(s,rb_eTypeError,"class: %s does not respond to THAW",
251
251
  rb_obj_classname(s_klass));
@@ -27,13 +27,16 @@
27
27
  #define W_SIZE T_FALSE
28
28
  #elif T_NIL > W_SIZE
29
29
  #define W_SIZE T_NIL
30
+ #elif T_DATA > W_SIZE
31
+ #define W_SIZE T_DATA
30
32
  #endif
31
33
  #define COMPLEX(object) \
32
34
  (TYPE(object) == T_ARRAY || \
33
35
  TYPE(object) == T_HASH || \
34
36
  TYPE(object) == T_SYMBOL || \
35
37
  TYPE(object) == T_OBJECT || \
36
- TYPE(object) == T_STRING)
38
+ TYPE(object) == T_STRING || \
39
+ TYPE(object) == T_DATA)
37
40
 
38
41
  /* function pointer array */
39
42
  void (*WRITER[W_SIZE])(sereal_t *,VALUE);
@@ -74,6 +77,7 @@ void s_init_writers(void) {
74
77
  WRITER[T_TRUE] = s_append_true;
75
78
  WRITER[T_FALSE] = s_append_false;
76
79
  WRITER[T_NIL] = s_append_nil;
80
+ WRITER[T_DATA] = s_append_object;
77
81
  }
78
82
 
79
83
  static void s_default_writer(sereal_t *s, VALUE object) {
@@ -180,14 +184,14 @@ static VALUE s_copy_or_keep_in_mind(sereal_t *s, VALUE object) {
180
184
  */
181
185
  static void s_append_object(sereal_t *s, VALUE object) {
182
186
  if (s->flags & __THAW && rb_obj_respond_to(object,FREEZE,0)) {
183
- VALUE klass = rb_class_name(CLASS_OF(object));
187
+ VALUE klass = rb_class_path(CLASS_OF(object));
184
188
  VALUE copy = s_copy_or_keep_in_mind(s,klass);
185
189
  if (copy != Qnil) {
186
190
  s_append_u8(s,SRL_HDR_OBJECTV_FREEZE);
187
191
  s_append_copy(s,copy);
188
192
  } else {
189
193
  s_append_u8(s,SRL_HDR_OBJECT_FREEZE);
190
- s_append_rb_string(s,rb_class_name(CLASS_OF(object)));
194
+ s_append_rb_string(s,klass);
191
195
  }
192
196
  VALUE frozen = rb_funcall(object,FREEZE,1,ID2SYM(SEREAL));
193
197
  if (TYPE(frozen) != T_ARRAY)
@@ -289,15 +293,13 @@ static void rb_object_to_sereal(sereal_t *s, VALUE object) {
289
293
  if (COMPLEX(object)) {
290
294
  VALUE stored;
291
295
  if (s->tracked != Qnil) {
292
- if (s->tracked != Qnil) {
293
- VALUE id = rb_obj_id(object);
294
- stored = rb_hash_lookup(s->tracked,id);
295
- if (stored != Qnil) {
296
- s_append_refp(s,stored);
297
- goto out;
298
- }
299
- rb_hash_aset(s->tracked,id,INT2FIX(pos));
296
+ VALUE id = rb_obj_id(object);
297
+ stored = rb_hash_lookup(s->tracked,id);
298
+ if (stored != Qnil) {
299
+ s_append_refp(s,stored);
300
+ goto out;
300
301
  }
302
+ rb_hash_aset(s->tracked,id,INT2FIX(pos));
301
303
  }
302
304
  stored = s_copy_or_keep_in_mind(s,object);
303
305
  if (stored != Qnil) {
@@ -270,7 +270,8 @@ void Init_sereal() {
270
270
  * object: String: john { p: 14, s: 14, l: 2, h: 6 } sereal_to_rb_object()
271
271
  * object: Array: ["john", "john"] { p: 14, s: 14, l: 1, h: 6 } sereal_to_rb_object()
272
272
  *
273
- */
273
+ */
274
+ rb_define_const(Sereal, "DEBUG",INT2NUM(__DEBUG));
274
275
  rb_define_const(Sereal, "DEBUG",INT2NUM(__DEBUG));
275
276
 
276
277
  s_init_writers();
@@ -114,7 +114,7 @@ extern VALUE SerealPerlObject;
114
114
  #define __NOT_MINE 16
115
115
  #define __STREAM 32
116
116
  #define __THAW 64
117
- #define __COPY 64
117
+ #define __COPY 128
118
118
  #define __ARGUMENT_FLAGS (__DEBUG|__THAW|__REF|__COPY)
119
119
 
120
120
  #define __MIN_SIZE 6
metadata CHANGED
@@ -1,27 +1,27 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sereal
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.12
4
+ version: 0.0.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Borislav Nikolov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-21 00:00:00.000000000 Z
11
+ date: 2014-03-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake-compiler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  description: Sereal encoder/decoder (https://github.com/Sereal/Sereal)
@@ -33,44 +33,44 @@ extensions:
33
33
  extra_rdoc_files:
34
34
  - ext/sereal/sereal.c
35
35
  files:
36
+ - bin/rsrl
37
+ - ext/sereal/buffer.h
36
38
  - ext/sereal/decode.c
39
+ - ext/sereal/decode.h
37
40
  - ext/sereal/encode.c
38
- - ext/sereal/snappy/csnappy_compress.c
39
- - ext/sereal/snappy/csnappy_decompress.c
41
+ - ext/sereal/encode.h
42
+ - ext/sereal/extconf.rb
43
+ - ext/sereal/proto.h
40
44
  - ext/sereal/sereal.c
41
45
  - ext/sereal/sereal.h
42
- - ext/sereal/buffer.h
43
- - ext/sereal/snappy/csnappy_internal.h
44
46
  - ext/sereal/snappy/csnappy.h
45
- - ext/sereal/snappy/csnappy_internal_userspace.h
46
47
  - ext/sereal/snappy/csnappy_compat.h
47
- - ext/sereal/decode.h
48
- - ext/sereal/proto.h
49
- - ext/sereal/encode.h
50
- - ext/sereal/extconf.rb
51
- - bin/rsrl
48
+ - ext/sereal/snappy/csnappy_compress.c
49
+ - ext/sereal/snappy/csnappy_decompress.c
50
+ - ext/sereal/snappy/csnappy_internal.h
51
+ - ext/sereal/snappy/csnappy_internal_userspace.h
52
52
  homepage: https://github.com/Sereal/Sereal
53
53
  licenses: []
54
54
  metadata: {}
55
55
  post_install_message:
56
56
  rdoc_options:
57
- - --exclude
58
- - .*\.so
57
+ - "--exclude"
58
+ - ".*\\.so"
59
59
  require_paths:
60
60
  - lib
61
61
  required_ruby_version: !ruby/object:Gem::Requirement
62
62
  requirements:
63
- - - '>='
63
+ - - ">="
64
64
  - !ruby/object:Gem::Version
65
65
  version: '0'
66
66
  required_rubygems_version: !ruby/object:Gem::Requirement
67
67
  requirements:
68
- - - '>='
68
+ - - ">="
69
69
  - !ruby/object:Gem::Version
70
70
  version: '0'
71
71
  requirements: []
72
72
  rubyforge_project:
73
- rubygems_version: 2.0.14
73
+ rubygems_version: 2.2.0
74
74
  signing_key:
75
75
  specification_version: 4
76
76
  summary: Sereal encoder/decoder