Differences From Artifact [ec0e00bb40d202e7]:
- File        
polemy/layer.d
- 2010-11-24 03:30:56 - part of checkin [20be503cae] on branch trunk - set up referece manual (user: kinaba) [annotate]
 
To Artifact [70a85e9a66eddacd]:
- File        
polemy/layer.d
- 2010-11-24 11:20:42 - part of checkin [153a14cec0] on branch trunk - if-then-else without {}s. some cosmetic changes (user: kinaba) [annotate]
 
    13     13   
    14     14   enum : Layer
    15     15   {
    16     16    SystemLayer   = "(system)",   /// Predefined layer for internal data
    17     17    ValueLayer    = "@value",     /// Predefined layer for normal run
    18     18    MacroLayer    = "@macro",     /// Predefined layer for macro run (@lay() changes layer)
    19     19    RawMacroLayer = "(rawmacro)", /// Predefined layer for macro run (@lay() becomes AST)
    20         - AstLayer      = "(ast)",      /// Predefined layer for macro run (never invoke macro)
           20  +}
           21  +
           22  +/// True if it is a user-defined layer
           23  +
           24  +bool isUserDefinedLayer( Layer lay )
           25  +{
           26  + return lay!=SystemLayer && lay!=ValueLayer && lay!=MacroLayer && lay!=RawMacroLayer;
           27  +}
           28  +
           29  +unittest
           30  +{
           31  + assert( !isUserDefinedLayer(SystemLayer) );
           32  + assert( !isUserDefinedLayer(ValueLayer) );
           33  + assert( !isUserDefinedLayer(MacroLayer) );
           34  + assert( !isUserDefinedLayer(RawMacroLayer) );
           35  + assert( isUserDefinedLayer("@foo") );
    21     36   }
    22     37   
    23     38   /// True if it is macro-like layer that basically generates syntax tree
    24     39   
    25     40   bool isASTLayer( Layer lay )
    26     41   {
    27         - return lay==MacroLayer || lay==RawMacroLayer || lay==AstLayer;
           42  + return lay==MacroLayer || lay==RawMacroLayer;
    28     43   }
    29     44   
    30     45   unittest
    31     46   {
    32     47    assert( !isASTLayer(SystemLayer) );
    33     48    assert( !isASTLayer(ValueLayer) );
    34     49    assert( isASTLayer(MacroLayer) );
    35     50    assert( isASTLayer(RawMacroLayer) );
    36         - assert( isASTLayer(AstLayer) );
    37     51   }
    38     52   
    39     53   /// True if in the specified layer @lay(...) has no effect and merely produces a syntax tree
    40     54   
    41     55   bool isNoLayerChangeLayer( Layer lay )
    42     56   {
    43         - return lay==RawMacroLayer || lay==AstLayer;
           57  + return lay==RawMacroLayer;
    44     58   }
    45     59   
    46     60   unittest
    47     61   {
    48     62    assert( !isNoLayerChangeLayer(SystemLayer) );
    49     63    assert( !isNoLayerChangeLayer(ValueLayer) );
    50     64    assert( !isNoLayerChangeLayer(MacroLayer) );
    51     65    assert( isNoLayerChangeLayer(RawMacroLayer) );
    52         - assert( isNoLayerChangeLayer(AstLayer) );
    53     66   }
    54     67   
    55     68   /// True if do macro expanstion
    56     69   
    57     70   bool isMacroLayer( Layer lay )
    58     71   {
    59     72    return lay==MacroLayer || lay==RawMacroLayer;
................................................................................
    61     74   
    62     75   unittest
    63     76   {
    64     77    assert( !isMacroLayer(SystemLayer) );
    65     78    assert( !isMacroLayer(ValueLayer) );
    66     79    assert( isMacroLayer(MacroLayer) );
    67     80    assert( isMacroLayer(RawMacroLayer) );
    68         - assert( !isMacroLayer(AstLayer) );
    69     81   }