www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - minimal evaluation

reply Qian Xu <quian.xu stud.tu-ilmenau.de> writes:
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
Apr 06 2009
next sibling parent Qian Xu <quian.xu stud.tu-ilmenau.de> writes:
 
 if (isNull(foo) ||
     isNull(foo.getBar) ||
     isNull(foo.getBar.getBar2)
 {
   return false;
 }
Update: If minimal evaluation is not always enabled, and foo.getBar is NULL. I will get a segfault when evaluating foo.getBar.getBar2.
Apr 06 2009
prev sibling parent reply torhu <no spam.invalid> writes:
On 06.04.2009 13:30, 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
If you mean short-circuit evalutation, I'm pretty sure that's always what the compiler does.
Apr 06 2009
parent Qian Xu <quian.xu stud.tu-ilmenau.de> writes:
torhu wrote:

 
 If you mean short-circuit evalutation, I'm pretty sure that's always
 what the compiler does.
Thanks. Somebody posted this link: http://digitalmars.com/d/1.0/expression.html#OrOrExpression
Apr 06 2009