@@ -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)
6874static void
6975check_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)
161167static mrb_value
162168strio_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
174180strio_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
457463stringio_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
477483stringio_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)
610616static mrb_value
611617stringio_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)
620626static mrb_value
621627stringio_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