#-Operator, Pointer und validate

Der Value-Operator liefert eine Referenz auf den Speicher, auf den der Pointer zeigt. Das ist die Standardimplementation für einen Pointer-Typ.

d is 3,1415;
dp is ptr(d); // => double ptr; - dp ist gesetzt
 
dp# : 4711.;  //ok, da dp garantiert gesetzt ist.
funcClear is code( dp is double ptr var )  // ptr is variabel
{
  dp = null;
};
 
funcPrint is code( dp is double ptr )      // double ist nicht variabel
{
  valdate dp;
    print dp#$;
};
 
funcPrint is code( d is double )      // double ist nicht variabel
{
  print d$;
};
 
 
func is code( dp is double ptr )
{
  // dp ist eventuell null;
 
  dp# : 4711.;
 
  validate dp
  {
    dp# : 4711;      // ok
    funcPrint( dp ); // ok, ptr ist nicht variable
    funcPrint( dp# ); // ok, dp is validated
 
    funcClear( dp );  // ok, aber...
    // --- ab hier kann dp nicht mehr als validate garantiert werden
    funcPrint( dp );  // ok, es wird ein Pointer übergeben, damit muss funcPrint klarkommen.
    funcPrint( dp# ); // nicht ok, denn wir können dp nicht mehr garantieren. -> error
  }
  else
  {
    print "dp ist kein gültiger Pointer";
  }
}