Index: include/parrot/pobj.h =================================================================== --- include/parrot/pobj.h (版本 42843) +++ include/parrot/pobj.h (工作副本) @@ -100,9 +100,6 @@ #define PMC_data(pmc) (pmc)->data #define PMC_data_typed(pmc, type) (type)(pmc)->data -/* do not allow PMC_data2 as lvalue */ -#define PMC_data0(pmc) (1 ? (pmc)->data : 0) -#define PMC_data0_typed(pmc) (type)(1 ? (pmc)->data : 0) #define PMC_metadata(pmc) ((pmc)->_metadata) #define PMC_sync(pmc) ((pmc)->_synchronize) Index: src/call/args.c =================================================================== --- src/call/args.c (版本 42843) +++ src/call/args.c (工作副本) @@ -939,7 +939,6 @@ { ASSERT_ARGS(fill_params) PMC *named_used_list = PMCNULL; - PMC *arg_sig; INTVAL *raw_params; INTVAL param_count = VTABLE_elements(interp, raw_sig); INTVAL param_index = 0; @@ -963,8 +962,6 @@ return; } - positional_args = VTABLE_elements(interp, call_object); - GETATTR_CallSignature_arg_flags(interp, call_object, arg_sig); GETATTR_FixedIntegerArray_int_array(interp, raw_sig, raw_params); /* EXPERIMENTAL! This block adds provisional :call_sig param support on the @@ -988,6 +985,7 @@ /* First iterate over positional args and positional parameters. */ arg_index = 0; param_index = 0; + positional_args = VTABLE_elements(interp, call_object); while (1) { INTVAL param_flags; @@ -1169,6 +1167,10 @@ } if (arg_index < positional_args) { + PMC *arg_sig; + + GETATTR_CallSignature_arg_flags(interp, call_object, arg_sig); + /* We've used up all the positional parameters, but have extra * positional args left over. */ if (VTABLE_get_integer_keyed_int(interp, arg_sig, arg_index) & PARROT_ARG_NAME) {