Codebase list libfunction-parameters-perl / 67fc1dd
be C89 again (also avoid other compiler warnings) Lukas Mai 11 years ago
1 changed file(s) with 24 addition(s) and 23 deletion(s). Raw diff Collapse all Expand all
267267
268268 static void my_sv_cat_c(pTHX_ SV *sv, U32 c) {
269269 char ds[UTF8_MAXBYTES + 1], *d;
270 d = uvchr_to_utf8(ds, c);
270 d = (char *)uvchr_to_utf8((U8 *)ds, c);
271271 if (d - ds > 1) {
272272 sv_utf8_upgrade(sv);
273273 }
944944 *init_sentinel = NULL;
945945 param_spec->named_optional.used++;
946946 } else {
947 Param *p;
948
947949 if (param_spec->positional_optional.used) {
948950 croak("In %"SVf": can't combine optional positional (%"SVf") and required named (%"SVf") parameters", SVfARG(declarator), SVfARG(param_spec->positional_optional.data[0].param.name), SVfARG(name));
949951 }
950952
951 Param *p = pv_extend(&param_spec->named_required);
953 p = pv_extend(&param_spec->named_required);
952954 p->name = name;
953955 p->padoff = padoff;
954956 param_spec->named_required.used++;
11091111 /* check number of arguments */
11101112 if (spec->flags & FLAG_CHECK_NARGS) {
11111113 int amin, amax;
1112 size_t named;
11131114
11141115 amin = args_min(aTHX_ param_spec, spec);
11151116 if (amin > 0) {
1116 OP *chk, *cond, *err, *croak;
1117 OP *chk, *cond, *err, *xcroak;
11171118
11181119 err = mkconstsv(aTHX_ newSVpvf("Not enough arguments for %"SVf" (expected %d, got ", SVfARG(declarator), amin));
11191120 err = newBINOP(
11271128 mkconstpvs(")")
11281129 );
11291130
1130 croak = newCVREF(OPf_WANT_SCALAR,
1131 newGVOP(OP_GV, 0, gv_fetchpvs("Carp::croak", 0, SVt_PVCV)));
1131 xcroak = newCVREF(OPf_WANT_SCALAR,
1132 newGVOP(OP_GV, 0, gv_fetchpvs("Carp::croak", 0, SVt_PVCV)));
11321133 err = newUNOP(OP_ENTERSUB, OPf_STACKED,
1133 op_append_elem(OP_LIST, err, croak));
1134 op_append_elem(OP_LIST, err, xcroak));
11341135
11351136 cond = newBINOP(OP_LT, 0,
11361137 newAVREF(newGVOP(OP_GV, 0, PL_defgv)),
11421143
11431144 amax = args_max(param_spec);
11441145 if (amax >= 0) {
1145 OP *chk, *cond, *err, *croak;
1146 OP *chk, *cond, *err, *xcroak;
11461147
11471148 err = mkconstsv(aTHX_ newSVpvf("Too many arguments for %"SVf" (expected %d, got ", SVfARG(declarator), amax));
11481149 err = newBINOP(
11561157 mkconstpvs(")")
11571158 );
11581159
1159 croak = newCVREF(
1160 xcroak = newCVREF(
11601161 OPf_WANT_SCALAR,
11611162 newGVOP(OP_GV, 0, gv_fetchpvs("Carp::croak", 0, SVt_PVCV))
11621163 );
11631164 err = newUNOP(OP_ENTERSUB, OPf_STACKED,
1164 op_append_elem(OP_LIST, err, croak));
1165 op_append_elem(OP_LIST, err, xcroak));
11651166
11661167 cond = newBINOP(
11671168 OP_GT, 0,
11741175 }
11751176
11761177 if (param_spec && (count_named_params(param_spec) || (param_spec->slurpy.name && SvPV_nolen(param_spec->slurpy.name)[0] == '%'))) {
1177 OP *chk, *cond, *err, *croak;
1178 OP *chk, *cond, *err, *xcroak;
11781179 const UV fixed = count_positional_params(param_spec) + !!param_spec->invocant.name;
11791180
11801181 err = mkconstsv(aTHX_ newSVpvf("Odd number of paired arguments for %"SVf"", SVfARG(declarator)));
11811182
1182 croak = newCVREF(
1183 xcroak = newCVREF(
11831184 OPf_WANT_SCALAR,
11841185 newGVOP(OP_GV, 0, gv_fetchpvs("Carp::croak", 0, SVt_PVCV))
11851186 );
11861187 err = newUNOP(OP_ENTERSUB, OPf_STACKED,
1187 op_append_elem(OP_LIST, err, croak));
1188 op_append_elem(OP_LIST, err, xcroak));
11881189
11891190 cond = newBINOP(OP_GT, 0,
11901191 newAVREF(newGVOP(OP_GV, 0, PL_defgv)),
13821383 cond = mkhvelem(aTHX_ param_spec->rest_hash, mkconstpv(aTHX_ p + 1, n - 1));
13831384
13841385 if (spec->flags & FLAG_CHECK_NARGS) {
1385 OP *croak, *msg;
1386 OP *xcroak, *msg;
13861387
13871388 var = mkhvelem(aTHX_ param_spec->rest_hash, mkconstpv(aTHX_ p + 1, n - 1));
13881389 var = newUNOP(OP_DELETE, 0, var);
13891390
13901391 msg = mkconstsv(aTHX_ newSVpvf("In %"SVf": missing named parameter: %.*s", SVfARG(declarator), (int)(n - 1), p + 1));
1391 croak = newCVREF(
1392 xcroak = newCVREF(
13921393 OPf_WANT_SCALAR,
13931394 newGVOP(OP_GV, 0, gv_fetchpvs("Carp::croak", 0, SVt_PVCV))
13941395 );
1395 croak = newUNOP(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, msg, croak));
1396 xcroak = newUNOP(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, msg, xcroak));
13961397
13971398 cond = newUNOP(OP_EXISTS, 0, cond);
13981399
1399 cond = newCONDOP(0, cond, var, croak);
1400 cond = newCONDOP(0, cond, var, xcroak);
14001401 }
14011402
14021403 var = my_var(
14371438 if (!param_spec->slurpy.name) {
14381439 if (spec->flags & FLAG_CHECK_NARGS) {
14391440 /* croak if %{rest} */
1440 OP *croak, *cond, *keys, *msg;
1441 OP *xcroak, *cond, *keys, *msg;
14411442
14421443 keys = newUNOP(OP_KEYS, 0, my_var_g(aTHX_ OP_PADHV, 0, param_spec->rest_hash));
14431444 keys = newLISTOP(OP_SORT, 0, newOP(OP_PUSHMARK, 0), keys);
14591460 msg = mkconstsv(aTHX_ newSVpvf("In %"SVf": no such named parameter: ", SVfARG(declarator)));
14601461 msg = newBINOP(OP_CONCAT, 0, msg, keys);
14611462
1462 croak = newCVREF(
1463 xcroak = newCVREF(
14631464 OPf_WANT_SCALAR,
14641465 newGVOP(OP_GV, 0, gv_fetchpvs("Carp::croak", 0, SVt_PVCV))
14651466 );
1466 croak = newUNOP(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, msg, croak));
1467 xcroak = newUNOP(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, msg, xcroak));
14671468
14681469 cond = newUNOP(OP_KEYS, 0, my_var_g(aTHX_ OP_PADHV, 0, param_spec->rest_hash));
1469 croak = newCONDOP(0, cond, croak, NULL);
1470
1471 *prelude_sentinel = op_append_list(OP_LINESEQ, *prelude_sentinel, newSTATEOP(0, NULL, croak));
1470 xcroak = newCONDOP(0, cond, xcroak, NULL);
1471
1472 *prelude_sentinel = op_append_list(OP_LINESEQ, *prelude_sentinel, newSTATEOP(0, NULL, xcroak));
14721473 } else {
14731474 OP *clear;
14741475