Skip to content

Commit 32acb9e

Browse files
authored
Merge pull request #17 from rcheung2015/use_presym
use mRuby preallocated symbols
2 parents 9ccd429 + 7e11885 commit 32acb9e

File tree

1 file changed

+32
-26
lines changed

1 file changed

+32
-26
lines changed

src/stringio.c

Lines changed: 32 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,19 @@ original is https://github.com/ruby/ruby/blob/trunk/ext/stringio/stringio.c
1212
#include "mruby/class.h"
1313
#include "mruby/object.h"
1414

15+
#if MRUBY_RELEASE_NO >= 30000
16+
#include "mruby/presym.h"
17+
#else
18+
#define MRB_IVSYM(s) mrb_intern_lit(mrb, "@"#s)
19+
#endif
20+
1521
#define FMODE_READABLE 0x0001
1622
#define FMODE_WRITABLE 0x0002
1723
#define FMODE_READWRITE (FMODE_READABLE|FMODE_WRITABLE)
1824
#define FMODE_BINMODE 0x0004
1925
#define FMODE_APPEND 0x0040
2026

21-
#define stringio_iv_get(name) mrb_iv_get(mrb, self, mrb_intern_lit(mrb, name))
27+
#define stringio_iv_get(name) mrb_iv_get(mrb, self, MRB_IVSYM(name))
2228
#define E_IOERROR (mrb_class_get(mrb, "IOError"))
2329
#define StringIO(self) get_strio(mrb, self)
2430

@@ -68,7 +74,7 @@ get_strio(mrb_state *mrb, mrb_value self)
6874
static void
6975
check_modifiable(mrb_state *mrb, mrb_value self)
7076
{
71-
mrb_value string = stringio_iv_get("@string");
77+
mrb_value string = stringio_iv_get(string);
7278
if (MRB_FROZEN_P(mrb_str_ptr(string))) {
7379
mrb_raise(mrb, E_IOERROR, "not modifiable string");
7480
}
@@ -161,7 +167,7 @@ modestr_fmode(mrb_state *mrb, const char *modestr)
161167
static mrb_value
162168
strio_substr(mrb_state *mrb, mrb_value self, long pos, long len)
163169
{
164-
mrb_value str = stringio_iv_get("@string");
170+
mrb_value str = stringio_iv_get(string);
165171
long rlen = RSTRING_LEN(str) - pos;
166172

167173
if (len > rlen) len = rlen;
@@ -174,7 +180,7 @@ static void
174180
strio_extend(mrb_state *mrb, mrb_value self, long pos, long len)
175181
{
176182
long olen;
177-
mrb_value string = stringio_iv_get("@string");
183+
mrb_value string = stringio_iv_get(string);
178184

179185
olen = RSTRING_LEN(string);
180186
if (pos + len > olen) {
@@ -223,15 +229,15 @@ strio_init(mrb_state *mrb, mrb_value self, mrb_int argc, mrb_value *argv)
223229
ptr = (struct StringIO*)DATA_PTR(self);
224230
if (ptr) {
225231
/* reopen */
226-
mrb_funcall(mrb, mrb_iv_get(mrb, self, mrb_intern_lit(mrb, "@string")), "replace", 1, string);
232+
mrb_funcall(mrb, mrb_iv_get(mrb, self, MRB_IVSYM(string)), "replace", 1, string);
227233
} else {
228234
/* initialize */
229235
ptr = stringio_alloc(mrb);
230-
mrb_iv_set(mrb, self, mrb_intern_lit(mrb, "@string"), string);
236+
mrb_iv_set(mrb, self, MRB_IVSYM(string), string);
231237
}
232238
ptr->lineno = 0;
233239
ptr->pos = 0;
234-
mrb_iv_set(mrb, self, mrb_intern_lit(mrb, "@flags"), mrb_fixnum_value(flags));
240+
mrb_iv_set(mrb, self, MRB_IVSYM(flags), mrb_fixnum_value(flags));
235241
mrb_data_init(self, ptr, &mrb_stringio_type);
236242
}
237243

@@ -265,11 +271,11 @@ stringio_copy(mrb_state *mrb, mrb_value copy, mrb_value orig)
265271
}
266272
mrb_data_init(copy, ptr, &mrb_stringio_type);
267273

268-
string = mrb_iv_get(mrb, orig, mrb_intern_lit(mrb, "@string"));
269-
mrb_iv_set(mrb, copy, mrb_intern_lit(mrb, "@string"), string);
274+
string = mrb_iv_get(mrb, orig, MRB_IVSYM(string));
275+
mrb_iv_set(mrb, copy, MRB_IVSYM(string), string);
270276

271-
flags = mrb_iv_get(mrb, orig, mrb_intern_lit(mrb, "@flags"));
272-
mrb_iv_set(mrb, copy, mrb_intern_lit(mrb, "@flags"), flags);
277+
flags = mrb_iv_get(mrb, orig, MRB_IVSYM(flags));
278+
mrb_iv_set(mrb, copy, MRB_IVSYM(flags), flags);
273279

274280
++ptr->count;
275281
return copy;
@@ -337,7 +343,7 @@ stringio_closed_p(mrb_state *mrb, mrb_value self)
337343
mrb_int flags;
338344

339345
StringIO(self);
340-
flags = mrb_fixnum(stringio_iv_get("@flags"));
346+
flags = mrb_fixnum(stringio_iv_get(flags));
341347
return ((flags & FMODE_READWRITE) == 0) ? mrb_true_value() : mrb_false_value();
342348
}
343349

@@ -347,11 +353,11 @@ stringio_close(mrb_state *mrb, mrb_value self)
347353
mrb_int flags;
348354

349355
StringIO(self);
350-
flags = mrb_fixnum(stringio_iv_get("@flags"));
356+
flags = mrb_fixnum(stringio_iv_get(flags));
351357
if ((flags & FMODE_READWRITE) == 0)
352358
mrb_raise(mrb, E_IOERROR, "closed stream");
353359
flags &= ~FMODE_READWRITE;
354-
mrb_iv_set(mrb, self, mrb_intern_lit(mrb, "@flags"), mrb_fixnum_value(flags));
360+
mrb_iv_set(mrb, self, MRB_IVSYM(flags), mrb_fixnum_value(flags));
355361
return mrb_nil_value();
356362
}
357363

@@ -363,8 +369,8 @@ stringio_read(mrb_state *mrb, mrb_value self)
363369
struct StringIO *ptr = StringIO(self);
364370
mrb_value rlen = mrb_nil_value();
365371
mrb_value rstr = mrb_nil_value();
366-
mrb_value string = stringio_iv_get("@string");
367-
mrb_int flags = mrb_fixnum(stringio_iv_get("@flags"));
372+
mrb_value string = stringio_iv_get(string);
373+
mrb_int flags = mrb_fixnum(stringio_iv_get(flags));
368374

369375
if ((flags & FMODE_READABLE) != FMODE_READABLE)
370376
mrb_raise(mrb, E_IOERROR, "not opened for reading");
@@ -424,8 +430,8 @@ stringio_write(mrb_state *mrb, mrb_value self)
424430
struct StringIO *ptr = StringIO(self);
425431
mrb_int len, olen;
426432
mrb_value str = mrb_nil_value();
427-
mrb_value string = stringio_iv_get("@string");
428-
mrb_int flags = mrb_fixnum(stringio_iv_get("@flags"));
433+
mrb_value string = stringio_iv_get(string);
434+
mrb_int flags = mrb_fixnum(stringio_iv_get(flags));
429435

430436
if ((flags & FMODE_WRITABLE) != FMODE_WRITABLE)
431437
mrb_raise(mrb, E_IOERROR, "not opened for writing");
@@ -457,9 +463,9 @@ static mrb_value
457463
stringio_getc(mrb_state *mrb, mrb_value self)
458464
{
459465
struct StringIO *ptr = StringIO(self);
460-
mrb_value string = stringio_iv_get("@string");
466+
mrb_value string = stringio_iv_get(string);
461467
mrb_value ret;
462-
mrb_int flags = mrb_fixnum(stringio_iv_get("@flags"));
468+
mrb_int flags = mrb_fixnum(stringio_iv_get(flags));
463469

464470
if ((flags & FMODE_READABLE) == 0)
465471
mrb_raise(mrb, E_IOERROR, "not opened for reading");
@@ -477,8 +483,8 @@ static mrb_value
477483
stringio_gets(mrb_state *mrb, mrb_value self)
478484
{
479485
struct StringIO *ptr = StringIO(self);
480-
mrb_value string = stringio_iv_get("@string");
481-
mrb_int flags = mrb_fixnum(stringio_iv_get("@flags"));
486+
mrb_value string = stringio_iv_get(string);
487+
mrb_int flags = mrb_fixnum(stringio_iv_get(flags));
482488
mrb_int argc;
483489
mrb_value *argv;
484490
mrb_value mrb_rs = mrb_str_new_lit(mrb, "\n");
@@ -581,8 +587,8 @@ stringio_seek(mrb_state *mrb, mrb_value self)
581587
struct StringIO *ptr = StringIO(self);
582588
mrb_value whence = mrb_nil_value();
583589
mrb_int offset = 0;
584-
mrb_value string = stringio_iv_get("@string");
585-
mrb_int flags = mrb_fixnum(stringio_iv_get("@flags"));
590+
mrb_value string = stringio_iv_get(string);
591+
mrb_int flags = mrb_fixnum(stringio_iv_get(flags));
586592

587593
mrb_get_args(mrb, "i|o", &offset, &whence);
588594
if ((flags & FMODE_READWRITE) == 0) {
@@ -610,7 +616,7 @@ stringio_seek(mrb_state *mrb, mrb_value self)
610616
static mrb_value
611617
stringio_size(mrb_state *mrb, mrb_value self)
612618
{
613-
mrb_value string = stringio_iv_get("@string");
619+
mrb_value string = stringio_iv_get(string);
614620
if (mrb_nil_p(string)) {
615621
mrb_raise(mrb, E_IOERROR, "not opened");
616622
}
@@ -620,7 +626,7 @@ stringio_size(mrb_state *mrb, mrb_value self)
620626
static mrb_value
621627
stringio_eof_p(mrb_state *mrb, mrb_value self)
622628
{
623-
mrb_value string = stringio_iv_get("@string");
629+
mrb_value string = stringio_iv_get(string);
624630
struct StringIO *ptr = StringIO(self);
625631
return (RSTRING_LEN(string) <= ptr->pos) ? mrb_true_value() : mrb_false_value();
626632
}

0 commit comments

Comments
 (0)