summaryrefslogtreecommitdiffhomepage
path: root/src/class.c
diff options
context:
space:
mode:
authorTomoyuki Sahara <[email protected]>2013-08-26 23:20:22 +0900
committerTomoyuki Sahara <[email protected]>2013-08-26 23:20:22 +0900
commitf77dc2e6cb2c2ea21c6cca96f88d06acfbf30d17 (patch)
treebc0f3ab1cdb846fa004f6a19fc706492895a5a7d /src/class.c
parent0e8efd4a218f3d235f88054f0d9d11f8bfdcfd33 (diff)
parent91b878e5dfa671b63c26019962736dda1a58f9fc (diff)
downloadmruby-f77dc2e6cb2c2ea21c6cca96f88d06acfbf30d17.tar.gz
mruby-f77dc2e6cb2c2ea21c6cca96f88d06acfbf30d17.zip
Merge branch 'mruby' into pr-typeerror-string-start-end-with
Conflicts: mrbgems/mruby-string-ext/src/string.c mrbgems/mruby-string-ext/test/string.rb
Diffstat (limited to 'src/class.c')
-rw-r--r--src/class.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/class.c b/src/class.c
index b5c561d06..1870b94ba 100644
--- a/src/class.c
+++ b/src/class.c
@@ -489,14 +489,19 @@ mrb_get_args(mrb_state *mrb, const char *format, ...)
mrb_value ss;
struct RString *s;
char **ps;
+ mrb_int len;
ps = va_arg(ap, char**);
if (i < argc) {
ss = to_str(mrb, *sp++);
s = mrb_str_ptr(ss);
- if ((mrb_int)strlen(s->ptr) < s->len) {
+ len = (mrb_int)strlen(s->ptr);
+ if (len < s->len) {
mrb_raise(mrb, E_ARGUMENT_ERROR, "String contains NUL");
}
+ else if (len > s->len) {
+ mrb_str_modify(mrb, s);
+ }
*ps = s->ptr;
i++;
}
@@ -1886,7 +1891,6 @@ mrb_init_class(mrb_state *mrb)
mrb_define_method(mrb, bob, "method_missing", mrb_bob_missing, MRB_ARGS_ANY()); /* 15.3.1.3.30 */
mrb_define_class_method(mrb, cls, "new", mrb_class_new_class, MRB_ARGS_ANY());
- mrb_define_method(mrb, cls, "alloc", mrb_instance_alloc, MRB_ARGS_NONE());
mrb_define_method(mrb, cls, "superclass", mrb_class_superclass, MRB_ARGS_NONE()); /* 15.2.3.3.4 */
mrb_define_method(mrb, cls, "new", mrb_instance_new, MRB_ARGS_ANY()); /* 15.2.3.3.3 */
mrb_define_method(mrb, cls, "inherited", mrb_bob_init, MRB_ARGS_REQ(1));