Differences From Artifact [01c119756ed23ca5]:
- File        
polemy/value.d
- 2010-11-09 14:59:36 - part of checkin [7465fcdd7f] on branch trunk - layered function invocation (user: kinaba) [annotate]
 
 
To Artifact [fe3f0c39a200a0bc]:
- File        
polemy/value.d
- 2010-11-13 12:16:47 - part of checkin [5afe8e3f26] on branch trunk - Memoization on non "@v" layer. Now simplest metalevel computation works!! Also, added -l option. (user: kinaba) [annotate]
 
 
    41     41   {
    42     42    Value delegate(immutable LexPosition pos, string lay, Value[]) data;
    43     43   
    44     44    mixin SimpleConstructor;
    45     45    alias data call;
    46     46    override string toString() const { return sprintf!"(function:%s:%s)"(data.ptr,data.funcptr); }
    47     47   }
           48  +
           49  +class UndValue : Value
           50  +{
           51  + mixin SimpleClass;
           52  + override string toString() const { return "<undefined>"; }
           53  +}
    48     54   
    49     55   /// Layer ID
    50     56   
    51     57   alias string Layer;
    52     58   
    53     59   /// Context (variable environment)
    54     60   /// Simlar to prototype chain of ECMAScript etc.
................................................................................
    66     72     if( setIfExist(i, lay, v) )
    67     73      return;
    68     74     data[i][lay] = v;
    69     75    }
    70     76   
    71     77    Value get(string i, Layer lay, in LexPosition pos=null)
    72     78    {
    73         -  if( i in data )
           79  +  if( i in data ) {
           80  +   if( lay !in data[i] )
           81  +    throw genex!RuntimeException(pos, sprintf!"variable %s is not set in layer %s"(i,lay));
    74     82      return data[i][lay];
           83  +  }
    75     84     if( prototype is null )
    76     85      throw new RuntimeException(pos, sprintf!"variable %s not found"(i));
    77         -  return prototype.get(i, lay);
           86  +  return prototype.get(i, lay, pos);
    78     87    }
    79     88   
    80     89   private:
    81     90    Table                prototype;
    82     91    Kind                 kind;
    83     92    Value[Layer][string] data;
    84     93