Skip to content

Commit 646af06

Browse files
committed
move xform badflag detection and output-setting to make_trans_mutual - #517
1 parent d279bb7 commit 646af06

File tree

1 file changed

+16
-17
lines changed

1 file changed

+16
-17
lines changed

lib/PDL/Core/pdlapi.c

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -750,7 +750,18 @@ pdl_error pdl_make_trans_mutual(pdl_trans *trans)
750750
for (i=vtable->nparents; i<vtable->npdls; i++) pdls[i] = pdls[i+nchildren];
751751
PDLDEBUG_f(printf("make_trans_mutual after copy converted ");pdl_dump_trans_fixspace(trans,0));
752752
PDL_TR_CHKMAGIC(trans);
753-
char disable_back = 0;
753+
char disable_back = 0, inputs_bad = 0;
754+
for (i=0; i<npdls; i++) {
755+
pdl *pdl = pdls[i];
756+
if ((vtable->par_flags[i] & (PDL_PARAM_ISOUT|PDL_PARAM_ISTEMP)) ||
757+
!(pdl->state & PDL_BADVAL)) continue;
758+
inputs_bad = trans->bvalflag = 1;
759+
break;
760+
}
761+
if (trans->bvalflag && (vtable->flags & PDL_TRANS_BADIGNORE)) {
762+
pdl_pdl_warn("WARNING: %s does not handle bad values", vtable->name);
763+
trans->bvalflag = 0; /* but still return true */
764+
}
754765
PDL_err = pdl_trans_flow_null_checks(trans, &disable_back);
755766
if (PDL_err.error) {
756767
PDL_ACCUMERROR(PDL_err, pdl_trans_finaldestroy(trans));
@@ -786,6 +797,9 @@ pdl_error pdl_make_trans_mutual(pdl_trans *trans)
786797
if (PDL_BITFIELD_ISSET(wasnull, i))
787798
child->state = (child->state & ~PDL_NOMYDIMS) | PDL_MYDIMS_TRANS;
788799
}
800+
if (inputs_bad)
801+
for (i=nparents; i<npdls; i++)
802+
pdls[i]->state |= PDL_BADVAL;
789803
if (!dataflow) {
790804
PDL_ACCUMERROR(PDL_err, pdl__ensure_trans(trans, PDL_PARENTDIMSCHANGED, 0, 0));
791805
if (PDL_err.error)
@@ -1312,22 +1326,7 @@ pdl_error pdl_type_coerce(pdl_trans *trans) {
13121326
}
13131327

13141328
char pdl_trans_badflag_from_inputs(pdl_trans *trans) {
1315-
PDL_Indx i;
1316-
pdl_transvtable *vtable = trans->vtable;
1317-
pdl **pdls = trans->pdls;
1318-
char retval = 0;
1319-
for (i=0; i<vtable->npdls; i++) {
1320-
pdl *pdl = pdls[i];
1321-
if ((vtable->par_flags[i] & (PDL_PARAM_ISOUT|PDL_PARAM_ISTEMP)) ||
1322-
!(pdl->state & PDL_BADVAL)) continue;
1323-
trans->bvalflag = retval = 1;
1324-
break;
1325-
}
1326-
if (retval && (vtable->flags & PDL_TRANS_BADIGNORE)) {
1327-
pdl_pdl_warn("WARNING: %s does not handle bad values", vtable->name);
1328-
trans->bvalflag = 0; /* but still return true */
1329-
}
1330-
return retval;
1329+
return 0; /* CORE21 get rid */
13311330
}
13321331

13331332
pdl_error pdl_trans_check_pdls(pdl_trans *trans) {

0 commit comments

Comments
 (0)