summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/gc.c2
-rw-r--r--src/kernel.c3
-rw-r--r--src/parse.y36
-rw-r--r--src/re.c94
-rw-r--r--src/re.h10
-rw-r--r--src/string.c6
6 files changed, 70 insertions, 81 deletions
diff --git a/src/gc.c b/src/gc.c
index b5c94c9bd..9ff9cd217 100644
--- a/src/gc.c
+++ b/src/gc.c
@@ -424,7 +424,7 @@ obj_free(mrb_state *mrb, struct RBasic *obj)
case MRB_TT_HASH:
mrb_gc_free_iv(mrb, (struct RObject*)obj);
- mrb_gc_free_ht(mrb, (struct RClass*)obj);
+ mrb_gc_free_ht(mrb, (struct RHash*)obj);
break;
case MRB_TT_STRING:
diff --git a/src/kernel.c b/src/kernel.c
index 76ef9fa69..09ac59eef 100644
--- a/src/kernel.c
+++ b/src/kernel.c
@@ -1001,9 +1001,6 @@ mrb_obj_methods(mrb_state *mrb, int argc, mrb_value *argv, mrb_value obj, mrb_me
{
retry:
if (argc == 0) {
- mrb_value args[1];
-
- args[0] = mrb_true_value();
return class_instance_method_list(mrb, argc, argv, mrb_class(mrb, obj), 0);
}
else {
diff --git a/src/parse.y b/src/parse.y
index c4a44cee3..f3ab49e6f 100644
--- a/src/parse.y
+++ b/src/parse.y
@@ -660,7 +660,7 @@ new_op_asgn(parser_state *p, node *a, mrb_sym op, node *b)
static node*
new_int(parser_state *p, const char *s, int base)
{
- return list3((node*)NODE_INT, (node*)strdup(s), (node*)base);
+ return list3((node*)NODE_INT, (node*)strdup(s), (node*)(intptr_t)base);
}
// (:float . i)
@@ -688,14 +688,14 @@ new_dstr(parser_state *p, node *a)
static node*
new_back_ref(parser_state *p, int n)
{
- return cons((node*)NODE_BACK_REF, (node*)n);
+ return cons((node*)NODE_BACK_REF, (node*)(intptr_t)n);
}
// (:nthref . n)
static node*
new_nth_ref(parser_state *p, int n)
{
- return cons((node*)NODE_NTH_REF, (node*)n);
+ return cons((node*)NODE_NTH_REF, (node*)(intptr_t)n);
}
static void
@@ -774,7 +774,7 @@ ret_args(parser_state *p, node *n)
static void
assignable(parser_state *p, node *lhs)
{
- switch ((int)lhs->car) {
+ switch ((int)(intptr_t)lhs->car) {
case NODE_LVAR:
local_add(p, (mrb_sym)lhs->cdr);
break;
@@ -788,7 +788,7 @@ var_reference(parser_state *p, node *lhs)
{
node *n;
- switch ((int)lhs->car) {
+ switch ((int)(intptr_t)lhs->car) {
case NODE_LVAR:
if (!local_var_p(p, (mrb_sym)lhs->cdr)) {
n = new_fcall(p, (mrb_sym)lhs->cdr, 0);
@@ -1989,7 +1989,7 @@ primary : literal
}
term
{
- $<node>$ = cons(local_switch(p), (node*)p->in_single);
+ $<node>$ = cons(local_switch(p), (node*)(intptr_t)p->in_single);
p->in_single = 0;
}
bodystmt
@@ -1998,7 +1998,7 @@ primary : literal
$$ = new_sclass(p, $3, $7);
local_resume(p, $<node>6->car);
p->in_def = $<num>4;
- p->in_single = (int)$<node>6->cdr;
+ p->in_single = (int)(intptr_t)$<node>6->cdr;
}
| keyword_module cpath
{
@@ -2972,12 +2972,12 @@ yywarning_s(parser_state *p, const char *fmt, const char *s)
static void
backref_error(parser_state *p, node *n)
{
- switch ((int)n->car) {
+ switch ((int)(intptr_t)n->car) {
case NODE_NTH_REF:
- yyerror_i(p, "can't set variable $%d", (int)n->cdr);
+ yyerror_i(p, "can't set variable $%d", (int)(intptr_t)n->cdr);
break;
case NODE_BACK_REF:
- yyerror_i(p, "can't set variable $%c", (int)n->cdr);
+ yyerror_i(p, "can't set variable $%c", (int)(intptr_t)n->cdr);
break;
}
}
@@ -2993,7 +2993,7 @@ nextc(parser_state *p)
if (p->pb) {
node *tmp;
- c = (int)p->pb->car;
+ c = (int)(intptr_t)p->pb->car;
tmp = p->pb;
p->pb = p->pb->cdr;
cons_free(tmp);
@@ -3030,7 +3030,7 @@ pushback(parser_state *p, int c)
{
if (c < 0) return;
p->column--;
- p->pb = cons((node*)c, p->pb);
+ p->pb = cons((node*)(intptr_t)c, p->pb);
}
static void
@@ -3055,7 +3055,7 @@ peek_n(parser_state *p, int c, int n)
while (n--) {
c0 = nextc(p);
if (c0 < 0) return FALSE;
- list = push(list, (node*)c0);
+ list = push(list, (node*)(intptr_t)c0);
}
if (p->pb) {
p->pb = push(p->pb, (node*)list);
@@ -4812,7 +4812,7 @@ parser_dump(mrb_state *mrb, node *tree, int offset)
if (!tree) return;
again:
dump_prefix(offset);
- n = (int)tree->car;
+ n = (int)(intptr_t)tree->car;
tree = tree->cdr;
switch (n) {
case NODE_BEGIN:
@@ -5051,7 +5051,7 @@ parser_dump(mrb_state *mrb, node *tree, int offset)
dump_prefix(offset+1);
printf("method='%s' (%d)\n",
mrb_sym2name(mrb, (mrb_sym)tree->cdr->car),
- (int)tree->cdr->car);
+ (int)(intptr_t)tree->cdr->car);
tree = tree->cdr->cdr->car;
if (tree) {
dump_prefix(offset+1);
@@ -5164,7 +5164,7 @@ parser_dump(mrb_state *mrb, node *tree, int offset)
parser_dump(mrb, tree->car, offset+2);
tree = tree->cdr;
dump_prefix(offset+1);
- printf("op='%s' (%d)\n", mrb_sym2name(mrb, (mrb_sym)tree->car), (int)tree->car);
+ printf("op='%s' (%d)\n", mrb_sym2name(mrb, (mrb_sym)tree->car), (int)(intptr_t)tree->car);
tree = tree->cdr;
parser_dump(mrb, tree->car, offset+1);
break;
@@ -5255,7 +5255,7 @@ parser_dump(mrb_state *mrb, node *tree, int offset)
break;
case NODE_INT:
- printf("NODE_INT %s base %d\n", (char*)tree->car, (int)tree->cdr->car);
+ printf("NODE_INT %s base %d\n", (char*)tree->car, (int)(intptr_t)tree->cdr->car);
break;
case NODE_FLOAT:
@@ -5268,7 +5268,7 @@ parser_dump(mrb_state *mrb, node *tree, int offset)
break;
case NODE_STR:
- printf("NODE_STR \"%s\" len %d\n", (char*)tree->car, (int)tree->cdr);
+ printf("NODE_STR \"%s\" len %d\n", (char*)tree->car, (int)(intptr_t)tree->cdr);
break;
case NODE_DSTR:
diff --git a/src/re.c b/src/re.c
index d7d9914ec..d2a57196f 100644
--- a/src/re.c
+++ b/src/re.c
@@ -90,7 +90,7 @@ mrb_reg_s_new_instance(mrb_state *mrb, /*int argc, mrb_value *argv, */mrb_value
struct RRegexp *re;
re = mrb_obj_alloc(mrb, MRB_TT_REGEX, mrb->regex_class);
re->ptr = 0;
- re->src = mrb_nil_value();
+ re->src = 0;
re->usecnt = 0;
return mrb_funcall_argv(mrb, mrb_obj_value(re), "initialize", argc, argv);
}
@@ -237,7 +237,7 @@ static void
match_check(mrb_state *mrb, mrb_value match)
{
struct RMatch *m = mrb_match_ptr(match);
- if (!m->str.tt) {
+ if (!m->str) {
mrb_raise(mrb, E_TYPE_ERROR, "uninitialized Match");
}
}
@@ -262,7 +262,7 @@ mrb_reg_nth_match(mrb_state *mrb, mrb_int nth, mrb_value match)
if (start == -1) return mrb_nil_value();
end = m->rmatch->regs.end[nth];
len = end - start;
- str = mrb_str_substr(mrb, m->str, start, len);
+ str = mrb_str_substr(mrb, mrb_obj_value(m->str), start, len);
return str;
}
@@ -281,7 +281,7 @@ match_backref_number(mrb_state *mrb, mrb_value match, mrb_value backref)
int num;
struct re_registers *regs = RMATCH_REGS(match);
- mrb_value regexp = RMATCH(match)->regexp;
+ struct RRegexp *regexp = RMATCH(match)->regexp;
match_check(mrb, match);
switch(mrb_type(backref)) {
@@ -297,7 +297,7 @@ match_backref_number(mrb_state *mrb, mrb_value match, mrb_value backref)
name = mrb_string_value_cstr(mrb, &backref);
break;
}
- num = onig_name_to_backref_number(mrb_regex_ptr(regexp)->ptr,
+ num = onig_name_to_backref_number(regexp->ptr,
(const unsigned char*)name,
(const unsigned char*)name + strlen(name),
regs);
@@ -361,10 +361,7 @@ mrb_reg_check(mrb_state *mrb, mrb_value re)
if (!(RREGEXP(re)->ptr)) {
mrb_raise(mrb, E_TYPE_ERROR, "uninitialized Regexp");
}
- if (RREGEXP_SRC(re).tt == 0) {
- mrb_raise(mrb, E_TYPE_ERROR, "uninitialized Regexp");
- }
- if (!RREGEXP_SRC_PTR(re)) {
+ if (RREGEXP(re)->src == 0) {
mrb_raise(mrb, E_TYPE_ERROR, "uninitialized Regexp");
}
}
@@ -488,7 +485,7 @@ mrb_reg_prepare_re(mrb_state *mrb, mrb_value re, mrb_value str)
pattern = RREGEXP_SRC_PTR(re);
unescaped = mrb_reg_preprocess(mrb,
- pattern, pattern + RREGEXP_SRC_LEN(re), enc,
+ pattern, pattern + RREGEXP(re)->src->len, enc,
&fixed_enc, err);
if (mrb_nil_p(unescaped)) {
@@ -581,8 +578,8 @@ mrb_reg_search(mrb_state *mrb, mrb_value re, mrb_value str, mrb_int pos, mrb_int
onig_region_free(regs, 0);
}
- RMATCH(match)->str = str_new4(mrb, str.tt, str);
- RMATCH(match)->regexp = re;
+ RMATCH(match)->str = mrb_str_ptr(str);
+ RMATCH(match)->regexp = mrb_regex_ptr(re);
RMATCH(match)->rmatch->char_offset_updated = 0;
mrb_backref_set(mrb, match);
@@ -811,9 +808,7 @@ read_escaped_byte(const char **pp, const char *end, onig_errmsg_buffer err)
int code;
int meta_prefix = 0, ctrl_prefix = 0;
size_t len;
- int retbyte;
- retbyte = -1;
if (p == end || *p++ != '\\') {
//errcpy(err, "too short escaped multibyte character");
printf("too short escaped multibyte character");
@@ -1211,10 +1206,8 @@ mrb_reg_initialize(mrb_state *mrb, mrb_value obj, const char *s, long len, mrb_e
options & ARG_REG_OPTION_MASK, err,
sourcefile, sourceline);
if (!re->ptr) return -1;
- re->src = mrb_enc_str_new(mrb, s, len, enc);
+ re->src = mrb_str_ptr(mrb_enc_str_new(mrb, s, len, enc));
- /*OBJ_FREEZE(re->src);
- RB_GC_GUARD(unescaped);*/
return 0;
}
@@ -1360,6 +1353,15 @@ mrb_reg_init_copy(mrb_state *mrb, mrb_value re/*, mrb_value copy*/)
}
static int
+reg_equal(mrb_state *mrb, struct RRegexp *re1, struct RRegexp *re2)
+{
+ if (re1->ptr->options != re2->ptr->options) return FALSE;
+ if (!mrb_equal(mrb, mrb_obj_value(re1->src), mrb_obj_value(re2->src)))
+ return FALSE;
+ return TRUE;
+}
+
+static int
mrb_reg_equal(mrb_state *mrb, mrb_value re1, mrb_value re2)
{
if (mrb_obj_equal(mrb, re1, re2)) return TRUE;
@@ -1367,14 +1369,7 @@ mrb_reg_equal(mrb_state *mrb, mrb_value re1, mrb_value re2)
if (mrb_type(re2) != MRB_TT_REGEX) return FALSE;
mrb_reg_check(mrb, re1);
mrb_reg_check(mrb, re2);
- /*if (FL_TEST(re1, KCODE_FIXED) != FL_TEST(re2, KCODE_FIXED)) return Qfalse; */
- if (RREGEXP(re1)->ptr->options != RREGEXP(re2)->ptr->options) return FALSE;
- if (RREGEXP_SRC_LEN(re1) != RREGEXP_SRC_LEN(re2)) return FALSE;
- /*if (ENCODING_GET(re1) != ENCODING_GET(re2)) return mrb_false_value();*/
- if (memcmp(RREGEXP_SRC_PTR(re1), RREGEXP_SRC_PTR(re2), RREGEXP_SRC_LEN(re1)) == 0) {
- return TRUE;
- }
- return FALSE;
+ return reg_equal(mrb, RREGEXP(re1), RREGEXP(re2));
}
/* 15.2.15.7.3 */
@@ -1636,11 +1631,11 @@ mrb_reg_source(mrb_state *mrb, mrb_value re)
}
static int
-name_to_backref_number(mrb_state *mrb, struct re_registers *regs, mrb_value regexp, const char* name, const char* name_end)
+name_to_backref_number(mrb_state *mrb, struct re_registers *regs, struct RRegexp*regexp, const char* name, const char* name_end)
{
int num;
- num = onig_name_to_backref_number(RREGEXP(regexp)->ptr,
+ num = onig_name_to_backref_number(regexp->ptr,
(const unsigned char* )name, (const unsigned char* )name_end, regs);
if (num >= 1) {
return num;
@@ -1674,9 +1669,9 @@ match_alloc(mrb_state *mrb)
// NEWOBJ(match, struct RMatch);
// OBJSETUP(match, klass, T_MATCH);
- m->str = mrb_nil_value();
+ m->str = 0;
m->rmatch = 0;
- m->regexp = mrb_nil_value();
+ m->regexp = 0;
m->rmatch = mrb_malloc(mrb, sizeof(struct rmatch));//ALLOC(struct rmatch);
memset(m->rmatch, 0, sizeof(struct rmatch));
@@ -1718,13 +1713,12 @@ mrb_match_aref(mrb_state *mrb, /*int argc, mrb_value *argv,*/ mrb_value match)
{
mrb_value argv[16];
int argc;
- mrb_value idx, rest;
+ mrb_value idx;
match_check(mrb, match);
//mrb_scan_args(argc, argv, "11", &idx, &rest);
mrb_get_args(mrb, "*", &argv, &argc);
idx = argv[0];
- rest = argv[1];
if (argc<2) {
if (mrb_type(idx) == MRB_TT_FIXNUM) {
if (mrb_fixnum(idx) >= 0) {
@@ -1777,7 +1771,7 @@ update_char_offset(mrb_state *mrb, mrb_value match)
struct re_registers *regs;
int i, num_regs, num_pos;
long c;
- char *s, *p, *q, *e;
+ char *s, *p, *q;
mrb_encoding *enc;
pair_t *pairs;
@@ -1793,7 +1787,7 @@ update_char_offset(mrb_state *mrb, mrb_value match)
rm->char_offset_num_allocated = num_regs;
}
- enc = mrb_enc_get(mrb, RMATCH(match)->str);
+ enc = mrb_enc_get(mrb, mrb_obj_value(RMATCH(match)->str));
if (mrb_enc_mbmaxlen(enc) == 1) {
for (i = 0; i < num_regs; i++) {
rm->char_offset[i].beg = BEG(i);
@@ -1815,8 +1809,7 @@ update_char_offset(mrb_state *mrb, mrb_value match)
}
qsort(pairs, num_pos, sizeof(pair_t), pair_byte_cmp);
- s = p = RSTRING_PTR(RMATCH(match)->str);
- e = s + RSTRING_LEN(RMATCH(match)->str);
+ s = p = RMATCH(match)->str->buf;
c = 0;
for (i = 0; i < num_pos; i++) {
q = s + pairs[i].byte_pos;
@@ -1889,7 +1882,7 @@ match_array(mrb_state *mrb, mrb_value match, int start)
{
struct re_registers *regs;
mrb_value ary;
- mrb_value target;
+ struct RString *target;
int i;
match_check(mrb, match);
@@ -1902,7 +1895,7 @@ match_array(mrb_state *mrb, mrb_value match, int start)
mrb_ary_push(mrb, ary, mrb_nil_value());
}
else {
- mrb_value str = mrb_str_subseq(mrb, target, regs->beg[i], regs->end[i]-regs->beg[i]);
+ mrb_value str = mrb_str_subseq(mrb, mrb_obj_value(target), regs->beg[i], regs->end[i]-regs->beg[i]);
mrb_ary_push(mrb, ary, str);
}
}
@@ -2087,7 +2080,7 @@ mrb_match_offset(mrb_state *mrb, mrb_value match/*, mrb_value n*/)
mrb_value
mrb_reg_match_post(mrb_state *mrb, mrb_value match)
{
- mrb_value str;
+ struct RString *str;
long pos;
struct re_registers *regs;
@@ -2097,9 +2090,7 @@ mrb_reg_match_post(mrb_state *mrb, mrb_value match)
if (BEG(0) == -1) return mrb_nil_value();
str = RMATCH(match)->str;
pos = END(0);
- str = mrb_str_subseq(mrb, str, pos, RSTRING_LEN(str) - pos);
-
- return str;
+ return mrb_str_subseq(mrb, mrb_obj_value(str), pos, str->len - pos);
}
/* 15.2.16.3.9 */
@@ -2124,7 +2115,7 @@ mrb_reg_match_pre(mrb_state *mrb, mrb_value match)
match_check(mrb, match);
regs = RMATCH_REGS(match);
if (BEG(0) == -1) return mrb_nil_value();
- str = mrb_str_subseq(mrb, RMATCH(match)->str, 0, BEG(0));
+ str = mrb_str_subseq(mrb, mrb_obj_value(RMATCH(match)->str), 0, BEG(0));
return str;
}
@@ -2144,7 +2135,7 @@ static mrb_value
mrb_match_string(mrb_state *mrb, mrb_value match)
{
match_check(mrb, match);
- return RMATCH(match)->str; /* str is frozen */
+ return mrb_obj_value(RMATCH(match)->str);
}
/* 15.2.16.3.12 */
@@ -2441,7 +2432,7 @@ again:
static mrb_value
mrb_reg_inspect(mrb_state *mrb, mrb_value re)
{
- if (!RREGEXP(re)->ptr || mrb_nil_p(RREGEXP_SRC(re)) || !RREGEXP_SRC_PTR(re)) {
+ if (!RREGEXP(re)->ptr || !RREGEXP_SRC(re) || !RREGEXP_SRC_PTR(re)) {
return mrb_any_to_s(mrb, re);
}
return mrb_reg_desc(mrb, RREGEXP_SRC_PTR(re), RREGEXP_SRC_LEN(re), re);
@@ -2457,7 +2448,7 @@ mrb_reg_s_alloc(mrb_state *mrb, mrb_value dummy)
re = mrb_obj_alloc(mrb, MRB_TT_REGEX, mrb->regex_class);
re->ptr = 0;
- re->src.tt = 0;
+ re->src = 0;
re->usecnt = 0;
return mrb_obj_value(re);
@@ -2526,9 +2517,9 @@ mrb_match_inspect(mrb_state *mrb, mrb_value match)
struct re_registers *regs = RMATCH_REGS(match);
int num_regs = regs->num_regs;
struct backref_name_tag *names;
- mrb_value regexp = RMATCH(match)->regexp;
+ struct RRegexp *regexp = RMATCH(match)->regexp;
- if (regexp.value.p == 0) {
+ if (!regexp) {
return mrb_sprintf(mrb, "#<%s:%p>", cname, (void*)&match);
}
@@ -2537,7 +2528,7 @@ mrb_match_inspect(mrb_state *mrb, mrb_value match)
names = mrb_malloc(mrb, sizeof(struct backref_name_tag)*num_regs);
memset(names, 0, sizeof(struct backref_name_tag)*num_regs);
- onig_foreach_name(RREGEXP(regexp)->ptr,
+ onig_foreach_name(regexp->ptr,
match_inspect_name_iter, names);
str = mrb_str_new_cstr(mrb, "#<");//mrb_str_buf_new2("#<");
@@ -2587,8 +2578,9 @@ mrb_match_equal(mrb_state *mrb, mrb_value match1)
mrb_get_args(mrb, "o", &match2);
if (mrb_obj_equal(mrb, match1, match2)) return mrb_true_value();
if (mrb_type(match2) != MRB_TT_MATCH) return mrb_false_value();
- if (!mrb_str_equal(mrb, RMATCH(match1)->str, RMATCH(match2)->str)) return mrb_false_value();
- if (!mrb_reg_equal(mrb, RMATCH(match1)->regexp, RMATCH(match2)->regexp)) return mrb_false_value();
+ if (!mrb_str_equal(mrb, mrb_obj_value(RMATCH(match1)->str), mrb_obj_value(RMATCH(match2)->str)))
+ return mrb_false_value();
+ if (!reg_equal(mrb, RMATCH(match1)->regexp, RMATCH(match2)->regexp)) return mrb_false_value();
regs1 = RMATCH_REGS(match1);
regs2 = RMATCH_REGS(match2);
if (regs1->num_regs != regs2->num_regs) return mrb_false_value();
@@ -2767,7 +2759,7 @@ mrb_reg_regsub(mrb_state *mrb, mrb_value str, mrb_value src, struct re_registers
name_end += c == -1 ? mbclen(name_end, e, str_enc) : clen;
}
if (name_end < e) {
- no = name_to_backref_number(mrb, regs, regexp, name, name_end);
+ no = name_to_backref_number(mrb, regs, RREGEXP(regexp), name, name_end);
p = s = name_end + clen;
break;
}
diff --git a/src/re.h b/src/re.h
index 686120569..238b4e408 100644
--- a/src/re.h
+++ b/src/re.h
@@ -37,23 +37,23 @@ struct rmatch {
//};
struct RMatch {
MRUBY_OBJECT_HEADER;
- mrb_value str;
+ struct RString *str;
struct rmatch *rmatch;
- mrb_value regexp; /* RRegexp */
+ struct RRegexp *regexp;
};
struct RRegexp {
MRUBY_OBJECT_HEADER;
struct re_pattern_buffer *ptr;
- mrb_value src;
+ struct RString *src;
unsigned long usecnt;
};
#define mrb_regex_ptr(r) ((struct RRegexp*)((r).value.p))
#define RREGEXP(r) ((struct RRegexp*)((r).value.p))
#define RREGEXP_SRC(r) (RREGEXP(r)->src)
-#define RREGEXP_SRC_PTR(r) (((struct RString*)(RREGEXP_SRC(r).value.p))->buf)
-#define RREGEXP_SRC_LEN(r) RSTRING_LEN(RREGEXP(r)->src)
+#define RREGEXP_SRC_PTR(r) (RREGEXP_SRC(r)->buf)
+#define RREGEXP_SRC_LEN(r) (RREGEXP_SRC(r)->len)
int re_adjust_startpos(struct re_pattern_buffer *bufp, const char *string, int size, int startpos, int range);
typedef struct re_pattern_buffer Regexp;
diff --git a/src/string.c b/src/string.c
index e2987db57..466c3dee9 100644
--- a/src/string.c
+++ b/src/string.c
@@ -479,11 +479,11 @@ mrb_enc_cr_str_exact_copy(mrb_state *mrb, mrb_value dest, mrb_value src)
#endif //INCLUDE_ENCODING
mrb_value
-str_new4(mrb_state *mrb, enum mrb_vtype ttype, mrb_value str)
+str_new4(mrb_state *mrb, mrb_value str)
{
mrb_value str2;
- str2 = mrb_obj_value(mrb_obj_alloc(mrb, ttype, mrb->string_class));//str_alloc(klass);
+ str2 = mrb_obj_value(mrb_obj_alloc(mrb, MRB_TT_STRING, mrb->string_class));
RSTRING(str2)->len = RSTRING_LEN(str);
RSTRING(str2)->buf = RSTRING_PTR(str);
@@ -2225,7 +2225,7 @@ mrb_str_new_frozen(mrb_state *mrb, mrb_value orig)
}
}
else {
- str = str_new4(mrb, orig.tt, orig);
+ str = str_new4(mrb, orig);
}
return str;
}