zscan 0.3 → 0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/ext/zscan.c +6 -8
  3. data/lib/zscan.rb +7 -3
  4. data/zscan.gemspec +1 -1
  5. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4ea1628b5cfb954748386729a21dffe6c6d6d25b
4
- data.tar.gz: 915abaa26d3e019bb92aa83df60401d7588feead
3
+ metadata.gz: 6a5bd6b35e34b41d8a18d878abea07f10f1cd645
4
+ data.tar.gz: 6e7b07d3f38f8914aead7fe1eab3f1d047e894cc
5
5
  SHA512:
6
- metadata.gz: 6019ff48939fd372026edf8658f4dbf0c39b29f412e9be211b25134169b01bdc30530057f64481189177b62e1f02bfee6ee8f1983b9fb155b9140cc48ce70d46
7
- data.tar.gz: 616662d24c577dadd4b6e6dc3b9e2af1b174ffcc526c336a45b8c96fcfd9682e2c30b590a88426f52eb2c410ab97a45162b13b3256b2258f69f64bc476d8bf44
6
+ metadata.gz: 0d38acf3d95a7e3d4b8094d1904566b9520fbcb9928ab94c18965bac645bca2d2f035172562b42592a812c5cc9bdb67266517fdb43527394427a84919e11cf96
7
+ data.tar.gz: 1c82a243bbc008bf5d040179fddf5f3b12d186c1ce25454661d34cc2562a0e0db4ff01966639cac610e2e05a4e33848cb540b0252944982f8a22cb00841bc2b6
data/ext/zscan.c CHANGED
@@ -11,7 +11,6 @@ typedef struct {
11
11
  size_t pos;
12
12
  size_t bytepos;
13
13
  VALUE s;
14
- struct re_registers regs;
15
14
  size_t stack_i;
16
15
  size_t stack_cap;
17
16
  Pos* stack;
@@ -26,15 +25,13 @@ static void zscan_mark(void* pp) {
26
25
 
27
26
  static void zscan_free(void* pp) {
28
27
  ZScan* p = pp;
29
- onig_region_free(&(p->regs), 0);
30
28
  free(p->stack);
31
29
  ruby_xfree(p);
32
30
  }
33
31
 
34
- extern size_t onig_region_memsize P_((const struct re_registers *regs));
35
32
  static size_t zscan_memsize(const void* pp) {
36
33
  const ZScan* p = pp;
37
- return p ? sizeof(*p) - sizeof(p->regs) + onig_region_memsize(&p->regs) : 0;
34
+ return p ? sizeof(*p) : 0;
38
35
  }
39
36
 
40
37
  static const rb_data_type_t zscan_type = {
@@ -45,7 +42,6 @@ static const rb_data_type_t zscan_type = {
45
42
  static VALUE zscan_alloc(VALUE klass) {
46
43
  ZScan* p = ALLOC(ZScan);
47
44
  MEMZERO(p, ZScan, 1);
48
- onig_region_init(&(p->regs));
49
45
  p->s = Qnil;
50
46
  p->stack_cap = 5;
51
47
  p->stack = (Pos*)malloc(sizeof(Pos) * 5);
@@ -168,12 +164,14 @@ static VALUE zscan_bmatch_p(VALUE self, VALUE pattern) {
168
164
  } else if (TYPE(pattern) == T_REGEXP) {
169
165
  regex_t *re = rb_reg_prepare_re(pattern, p->s);
170
166
  int tmpreg = re != RREGEXP(pattern)->ptr;
171
- if (!tmpreg) RREGEXP(pattern)->usecnt++;
167
+ if (!tmpreg) {
168
+ RREGEXP(pattern)->usecnt++;
169
+ }
172
170
 
173
171
  char* ptr = RSTRING_PTR(p->s);
174
172
  UChar* ptr_end = (UChar*)(ptr + RSTRING_LEN(p->s));
175
173
  UChar* ptr_match_from = (UChar*)(ptr + p->bytepos);
176
- long ret = onig_match(re, (UChar*)ptr, ptr_end, ptr_match_from, &(p->regs), ONIG_OPTION_NONE);
174
+ long ret = onig_match(re, (UChar*)ptr, ptr_end, ptr_match_from, NULL, ONIG_OPTION_NONE);
177
175
 
178
176
  if (!tmpreg) {
179
177
  RREGEXP(pattern)->usecnt--;
@@ -190,7 +188,7 @@ static VALUE zscan_bmatch_p(VALUE self, VALUE pattern) {
190
188
  if (ret == -2) {
191
189
  rb_raise(rb_eRuntimeError, "regexp buffer overflow");
192
190
  } else if (ret >= 0) {
193
- return ULONG2NUM(p->regs.end[0]);
191
+ return LONG2NUM(ret);
194
192
  }
195
193
  } else {
196
194
  rb_raise(rb_eTypeError, "expect String or Regexp");
data/lib/zscan.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  require_relative "../ext/zscan"
2
2
 
3
3
  class ZScan
4
- VERSION = '0.3'
4
+ VERSION = '0.4'
5
5
 
6
6
  def initialize s, dup=false
7
7
  _internal_init dup ? s.dup : s
@@ -58,11 +58,15 @@ if __FILE__ == $PROGRAM_NAME
58
58
  z.bytepos = 2
59
59
  assert '你', z.scan('你')
60
60
  assert '好', z.rest
61
+
61
62
  z.bytepos = 20
62
63
  assert 8, z.bytepos
63
- assert 4, z.pos
64
+
64
65
  z.skip('ab')
65
66
  assert 8, z.bytepos
66
67
  assert 4, z.pos
67
- z = nil
68
+
69
+ z = ZScan.new "a x:b+ $ \\k<x>"
70
+ z.pos = 1
71
+ assert ' ', z.scan(/\s*(\#.*$\s*)*/)
68
72
  end
data/zscan.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "zscan"
3
- s.version = "0.3"
3
+ s.version = "0.4"
4
4
  s.author = "Zete Lui"
5
5
  s.homepage = "https://github.com/luikore/zscan"
6
6
  s.platform = Gem::Platform::RUBY
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zscan
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.3'
4
+ version: '0.4'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Zete Lui