set_optargs_table @ compile.c
あれれ、コンパイルのところで見落としてました。メソッドのデフォルト引数は、こういう風にコンパイルされるみたいです。
/* * set optional argument table * def foo(a, b=expr1, c=expr2) * => * b: * expr1 * c: * expr2 */
該当コードはiseq_compile→NODE_ARGS→set_argumentsあたり。このラベルを位置情報に変換するのがset_optargs_table関数。ループ回して変換するだけです。
static int set_optargs_table(yarv_iseq_t *iseq) { int i; if (iseq->arg_opts != 0) { for (i = 0; i < iseq->arg_opts; i++) { iseq->arg_opt_tbl[i] = label_get_position((LABEL *)iseq->arg_opt_tbl[i]); } } return COMPILE_OK; }