Qian Xu wrote: > Hi All, > > Is minimal evaluation always enabled in D? > > I want to write a function IsNull(), so that I can check the precondition as > follows: > > if (isNull(foo) || > isNull(foo.getBar) || > isNull(foo.getBar.getBar2) > { > return false; > } > // normal code goes here > > If an argument is null, the IsNull() will return false. Internally it will > be logged to console as well. > > But I am not sure, if dmd-compiler generates code without minimal evaluation > in some cases. If minimal evaluation is not always enabled. I cannot do > precodition check in my way. > > --Qian
I can't find anything in the language spec that mandates it, but I do believe the compiler supports boolean short-circuiting (that's what I've always seen it called.) There was a bug report a long time ago that this didn't happen for CTFE, and it was fixed as a bug, so I assume short-circuiting is the intended behaviour. Perhaps this should go in the spec; it's certainly something I expect from any half-sane language. -- Daniel