- if (f.getNumFormalArgs()== 0) cascade(val);
- f.call(new TrapArgs(this, val));
+ if (f.getNumFormalArgs() == 0) cascade(val);
+ TrapArgs ta = new TrapArgs(this, val);
+ Object ret = f.call(ta);
+ if (ret != Boolean.FALSE && !ta.cascadeHappened) cascade(val);