summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorYukihiro Matsumoto <[email protected]>2012-06-13 23:53:57 +0900
committerYukihiro Matsumoto <[email protected]>2012-06-13 23:53:57 +0900
commit6bf63707812e17314a89eaff2bcb539fae6a09e4 (patch)
tree9b91947bdbb2c68171c2cd76cad6739387e1e364 /src
parentb3d83a79ea4b3817401f4f17c82763bf7b26dd74 (diff)
downloadmruby-6bf63707812e17314a89eaff2bcb539fae6a09e4.tar.gz
mruby-6bf63707812e17314a89eaff2bcb539fae6a09e4.zip
new mrb_get_args specifier "n" to retrieve a symbol (stands for "name")
Diffstat (limited to 'src')
-rw-r--r--src/class.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/class.c b/src/class.c
index 914785120..fe0a2b530 100644
--- a/src/class.c
+++ b/src/class.c
@@ -370,6 +370,7 @@ to_hash(mrb_state *mrb, mrb_value val)
a: Array [mrb_value*,int]
f: Float [mrb_float]
i: Integer [mrb_int]
+ n: Symbol [mrb_sym]
&: Block [mrb_value]
*: rest argument [mrb_value*,int]
|: optional
@@ -560,6 +561,25 @@ mrb_get_args(mrb_state *mrb, const char *format, ...)
}
}
break;
+ case 'n':
+ {
+ mrb_sym *symp;
+
+ symp = va_arg(ap, mrb_sym*);
+ if (i < argc) {
+ mrb_value ss;
+
+ ss = *sp++;
+ if (mrb_type(ss) == MRB_TT_SYMBOL) {
+ *symp = mrb_symbol(ss);
+ }
+ else {
+ *symp = mrb_intern_str(mrb, to_str(mrb, ss));
+ }
+ i++;
+ }
+ }
+ break;
case '&':
{