rb_scan_args_set: make it slightly readable
This is a pure refactoring that improves understanding of what is going on. Not a big win though.
This commit is contained in:
parent
140d4e4a5f
commit
43725c6091
@ -269,6 +269,7 @@ rb_scan_args_set(int kw_flag, int argc, const VALUE *argv,
|
|||||||
#define rb_scan_args_next_param() vars[vari++]
|
#define rb_scan_args_next_param() vars[vari++]
|
||||||
const int n_mand = n_lead + n_trail;
|
const int n_mand = n_lead + n_trail;
|
||||||
|
|
||||||
|
/* capture an option hash - phase 1: pop from the argv */
|
||||||
if (f_hash && argc > 0) {
|
if (f_hash && argc > 0) {
|
||||||
VALUE last = argv[argc - 1];
|
VALUE last = argv[argc - 1];
|
||||||
if (rb_scan_args_keyword_p(kw_flag, last)) {
|
if (rb_scan_args_keyword_p(kw_flag, last)) {
|
||||||
@ -282,13 +283,14 @@ rb_scan_args_set(int kw_flag, int argc, const VALUE *argv,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* capture leading mandatory arguments */
|
/* capture leading mandatory arguments */
|
||||||
for (i = n_lead; i-- > 0; ) {
|
for (i = 0; i < n_lead; i++) {
|
||||||
var = rb_scan_args_next_param();
|
var = rb_scan_args_next_param();
|
||||||
if (var) *var = argv[argi];
|
if (var) *var = argv[argi];
|
||||||
argi++;
|
argi++;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* capture optional arguments */
|
/* capture optional arguments */
|
||||||
for (i = n_opt; i-- > 0; ) {
|
for (i = 0; i < n_opt; i++) {
|
||||||
var = rb_scan_args_next_param();
|
var = rb_scan_args_next_param();
|
||||||
if (argi < argc - n_trail) {
|
if (argi < argc - n_trail) {
|
||||||
if (var) *var = argv[argi];
|
if (var) *var = argv[argi];
|
||||||
@ -298,6 +300,7 @@ rb_scan_args_set(int kw_flag, int argc, const VALUE *argv,
|
|||||||
if (var) *var = Qnil;
|
if (var) *var = Qnil;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* capture variable length arguments */
|
/* capture variable length arguments */
|
||||||
if (f_var) {
|
if (f_var) {
|
||||||
int n_var = argc - argi - n_trail;
|
int n_var = argc - argi - n_trail;
|
||||||
@ -311,17 +314,20 @@ rb_scan_args_set(int kw_flag, int argc, const VALUE *argv,
|
|||||||
if (var) *var = rb_ary_new();
|
if (var) *var = rb_ary_new();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* capture trailing mandatory arguments */
|
/* capture trailing mandatory arguments */
|
||||||
for (i = n_trail; i-- > 0; ) {
|
for (i = 0; i < n_trail; i++) {
|
||||||
var = rb_scan_args_next_param();
|
var = rb_scan_args_next_param();
|
||||||
if (var) *var = argv[argi];
|
if (var) *var = argv[argi];
|
||||||
argi++;
|
argi++;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* capture an option hash - phase 2: assignment */
|
/* capture an option hash - phase 2: assignment */
|
||||||
if (f_hash) {
|
if (f_hash) {
|
||||||
var = rb_scan_args_next_param();
|
var = rb_scan_args_next_param();
|
||||||
if (var) *var = hash;
|
if (var) *var = hash;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* capture iterator block */
|
/* capture iterator block */
|
||||||
if (f_block) {
|
if (f_block) {
|
||||||
var = rb_scan_args_next_param();
|
var = rb_scan_args_next_param();
|
||||||
@ -333,12 +339,12 @@ rb_scan_args_set(int kw_flag, int argc, const VALUE *argv,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (argi < argc) {
|
if (argi == argc) {
|
||||||
argc_error:
|
return argc;
|
||||||
rb_error_arity(argc, n_mand, f_var ? UNLIMITED_ARGUMENTS : n_mand + n_opt);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return argc;
|
argc_error:
|
||||||
|
rb_error_arity(argc, n_mand, f_var ? UNLIMITED_ARGUMENTS : n_mand + n_opt);
|
||||||
#undef rb_scan_args_next_param
|
#undef rb_scan_args_next_param
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user