diff options
| author | Hiroshi Mimaki <[email protected]> | 2020-08-06 17:38:20 +0900 |
|---|---|---|
| committer | Hiroshi Mimaki <[email protected]> | 2020-08-06 17:38:20 +0900 |
| commit | 7f8d38bbbe89dadab9d296c76f094c56aabca9f4 (patch) | |
| tree | 10c79fb00ab3378a34abba9b4ce1d01a1b7cefd6 /src/class.c | |
| parent | 1a9bdfcde5fd7c91e756747ba0565f29385115a7 (diff) | |
| parent | 11cc7bed96551fcceca5cabc1527fd944835a1a0 (diff) | |
| download | mruby-7f8d38bbbe89dadab9d296c76f094c56aabca9f4.tar.gz mruby-7f8d38bbbe89dadab9d296c76f094c56aabca9f4.zip | |
Merge master.
Diffstat (limited to 'src/class.c')
| -rw-r--r-- | src/class.c | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/src/class.c b/src/class.c index 1a36c1333..fc8a38ff9 100644 --- a/src/class.c +++ b/src/class.c @@ -587,6 +587,7 @@ void mrb_hash_check_kdict(mrb_state *mrb, mrb_value self); s: String [char*,mrb_int] Receive two arguments; s! gives (NULL,0) for nil z: String [char*] NUL terminated string; z! gives NULL for nil a: Array [mrb_value*,mrb_int] Receive two arguments; a! gives (NULL,0) for nil + c: Class/Module [strcut RClass*] f: Fixnum/Float [mrb_float] i: Fixnum/Float [mrb_int] b: boolean [mrb_bool] @@ -713,6 +714,22 @@ mrb_get_args(mrb_state *mrb, const char *format, ...) } } break; + case 'c': + { + struct RClass **p; + + p = va_arg(ap, struct RClass**); + if (i < argc) { + mrb_value ss; + + ss = argv[i++]; + if (!class_ptr_p(ss)) { + mrb_raisef(mrb, E_TYPE_ERROR, "%v is not class/module", ss); + } + *p = mrb_class_ptr(ss); + } + } + break; case 'S': { mrb_value *p; @@ -1151,22 +1168,22 @@ mrb_prepend_module(mrb_state *mrb, struct RClass *c, struct RClass *m) static mrb_value mrb_mod_prepend_features(mrb_state *mrb, mrb_value mod) { - mrb_value klass; + struct RClass *c; mrb_check_type(mrb, mod, MRB_TT_MODULE); - mrb_get_args(mrb, "C", &klass); - mrb_prepend_module(mrb, mrb_class_ptr(klass), mrb_class_ptr(mod)); + mrb_get_args(mrb, "c", &c); + mrb_prepend_module(mrb, c, mrb_class_ptr(mod)); return mod; } static mrb_value mrb_mod_append_features(mrb_state *mrb, mrb_value mod) { - mrb_value klass; + struct RClass *c; mrb_check_type(mrb, mod, MRB_TT_MODULE); - mrb_get_args(mrb, "C", &klass); - mrb_include_module(mrb, mrb_class_ptr(klass), mrb_class_ptr(mod)); + mrb_get_args(mrb, "c", &c); + mrb_include_module(mrb, c, mrb_class_ptr(mod)); return mod; } |
