robpike / ivy

ivy, an APL-like calculator
Other
1.32k stars 103 forks source link

pfor doesn't catch panics #103

Closed rogpeppe closed 2 years ago

rogpeppe commented 2 years ago

@rsc The parallel execution introduced by #84 doesn't seem to guard against the possibility of legitimate exceptions such as division by zero.

For example:

% ivy
1 / 200 6 rho 0
panic: division by zero

goroutine 46 [running]:
robpike.io/ivy/value.Errorf(...)
    /home/rogpeppe/src/go/src/github.com/rsc/ivy/value/value.go:49
robpike.io/ivy/value.init.0.func13({0x57cd88?, 0x543509?}, {0x57cce8?, 0xc000126400?}, {0x57cce8?, 0xc000126440?})
    /home/rogpeppe/src/go/src/github.com/rsc/ivy/value/binary.go:277 +0xab
robpike.io/ivy/value.(*binaryOp).EvalBinary(0xc0001242a0, {0x57cab8, 0xc000125260}, {0x57cd88, 0x632148}, {0x57cd88, 0x632140})
    /home/rogpeppe/src/go/src/github.com/rsc/ivy/value/eval.go:112 +0x2a8
robpike.io/ivy/exec.(*Context).EvalBinary(0xc000125260, {0x57cd88, 0x632148}, {0x543509, 0x1}, {0x57cd88, 0x632140})
    /home/rogpeppe/src/go/src/github.com/rsc/ivy/exec/context.go:172 +0x189
robpike.io/ivy/value.binaryMatrixOp.func1(0x0?, 0x4b0)
    /home/rogpeppe/src/go/src/github.com/rsc/ivy/value/eval.go:597 +0xfb
robpike.io/ivy/value.pfor.func1()
    /home/rogpeppe/src/go/src/github.com/rsc/ivy/value/eval.go:188 +0x67
created by robpike.io/ivy/value.pfor
    /home/rogpeppe/src/go/src/github.com/rsc/ivy/value/eval.go:186 +0x107
rsc commented 2 years ago

Fixed in #104, thanks.