From 42991fe092150260d893e7e558f25b5d5c3d84ab Mon Sep 17 00:00:00 2001 From: mimaki Date: Thu, 27 Jun 2013 20:18:48 +0900 Subject: fix unnecessary exception in mrb_get_args with "z" format. --- src/class.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/class.c') diff --git a/src/class.c b/src/class.c index f94f9a933..6eb70dce6 100644 --- a/src/class.c +++ b/src/class.c @@ -487,7 +487,7 @@ mrb_get_args(mrb_state *mrb, const char *format, ...) if (i < argc) { ss = to_str(mrb, *sp++); s = mrb_str_ptr(ss); - if (strlen(s->ptr) != s->len) { + if (strlen(s->ptr) < s->len) { mrb_raise(mrb, E_ARGUMENT_ERROR, "String contains NUL"); } *ps = s->ptr; -- cgit v1.2.3 From 3f823a0ceeadcba48a332b5d89f867b23c2d332b Mon Sep 17 00:00:00 2001 From: h2so5 Date: Mon, 1 Jul 2013 11:42:38 +0900 Subject: Add mrb_class_get_under() --- include/mruby.h | 1 + src/class.c | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) (limited to 'src/class.c') diff --git a/include/mruby.h b/include/mruby.h index 568ed4876..b602ba8c9 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -178,6 +178,7 @@ struct RClass * mrb_class_new(mrb_state *mrb, struct RClass *super); struct RClass * mrb_module_new(mrb_state *mrb); int mrb_class_defined(mrb_state *mrb, const char *name); struct RClass * mrb_class_get(mrb_state *mrb, const char *name); +struct RClass * mrb_class_get_under(mrb_state *mrb, struct RClass *outer, const char *name); mrb_value mrb_obj_dup(mrb_state *mrb, mrb_value obj); mrb_value mrb_check_to_integer(mrb_state *mrb, mrb_value val, const char *method); diff --git a/src/class.c b/src/class.c index 6eb70dce6..e33ab0153 100644 --- a/src/class.c +++ b/src/class.c @@ -227,7 +227,13 @@ class_from_sym(mrb_state *mrb, struct RClass *klass, mrb_sym id) struct RClass * mrb_class_get(mrb_state *mrb, const char *name) { - return class_from_sym(mrb, mrb->object_class, mrb_intern(mrb, name)); + return mrb_class_get_under(mrb, mrb->object_class, name); +} + +struct RClass * +mrb_class_get_under(mrb_state *mrb, struct RClass *outer, const char *name) +{ + return class_from_sym(mrb, outer, mrb_intern(mrb, name)); } /*! -- cgit v1.2.3 From 799dd0b777191e539da3300145a914c6c15bed42 Mon Sep 17 00:00:00 2001 From: Jun Hiroe Date: Wed, 3 Jul 2013 00:13:57 +0900 Subject: Refactor mrb_define_class() method in class.c.c --- src/class.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'src/class.c') diff --git a/src/class.c b/src/class.c index e33ab0153..237109936 100644 --- a/src/class.c +++ b/src/class.c @@ -159,9 +159,7 @@ mrb_define_class_id(mrb_state *mrb, mrb_sym name, struct RClass *super) struct RClass* mrb_define_class(mrb_state *mrb, const char *name, struct RClass *super) { - struct RClass *c; - c = mrb_define_class_id(mrb, mrb_intern(mrb, name), super); - return c; + return mrb_define_class_id(mrb, mrb_intern(mrb, name), super); } struct RClass* -- cgit v1.2.3 From db678329c00bd6cf08402c07e1f85f0752e9722e Mon Sep 17 00:00:00 2001 From: Jun Hiroe Date: Wed, 3 Jul 2013 20:52:48 +0900 Subject: Add comments in mrb_get_args() func. --- src/class.c | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) (limited to 'src/class.c') diff --git a/src/class.c b/src/class.c index 237109936..0d71886d3 100644 --- a/src/class.c +++ b/src/class.c @@ -375,20 +375,22 @@ to_hash(mrb_state *mrb, mrb_value val) format specifiers: - o: Object [mrb_value] - S: String [mrb_value] - A: Array [mrb_value] - H: Hash [mrb_value] - s: String [char*,int] - z: String [char*] - a: Array [mrb_value*,mrb_int] - f: Float [mrb_float] - i: Integer [mrb_int] - b: Boolean [mrb_bool] - n: Symbol [mrb_sym] - &: Block [mrb_value] - *: rest argument [mrb_value*,int] - |: optional + string mruby type C type note + ---------------------------------------------------------------------------------------------- + o: Object [mrb_value] + S: String [mrb_value] + A: Array [mrb_value] + H: Hash [mrb_value] + s: String [char*,int] Receive two arguments. + z: String [char*] NUL terminated string. + a: Array [mrb_value*,mrb_int] Receive two arguments. + f: Float [mrb_float] + i: Integer [mrb_int] + b: Boolean [mrb_bool] + n: Symbol [mrb_sym] + &: Block [mrb_value] + *: rest argument [mrb_value*,int] Receive the rest of the arguments as an array. + |: optional Next argument of '|' and later are optional. */ int mrb_get_args(mrb_state *mrb, const char *format, ...) -- cgit v1.2.3