Artifact Content
Not logged in

Artifact 70a85e9a66eddacd698f7a5f37a74d1c3a006dac


     1  /**
     2   * Authors: k.inaba
     3   * License: NYSL 0.9982 http://www.kmonos.net/nysl/
     4   *
     5   * Definition of constants related to the layers.
     6   */
     7  module polemy.layer;
     8  import polemy._common;
     9  
    10  /// Type for the layer ID
    11  
    12  alias string Layer;
    13  
    14  enum : Layer
    15  {
    16  	SystemLayer   = "(system)",   /// Predefined layer for internal data
    17  	ValueLayer    = "@value",     /// Predefined layer for normal run
    18  	MacroLayer    = "@macro",     /// Predefined layer for macro run (@lay() changes layer)
    19  	RawMacroLayer = "(rawmacro)", /// Predefined layer for macro run (@lay() becomes AST)
    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") );
    36  }
    37  
    38  /// True if it is macro-like layer that basically generates syntax tree
    39  
    40  bool isASTLayer( Layer lay )
    41  {
    42  	return lay==MacroLayer || lay==RawMacroLayer;
    43  }
    44  
    45  unittest
    46  {
    47  	assert( !isASTLayer(SystemLayer) );
    48  	assert( !isASTLayer(ValueLayer) );
    49  	assert( isASTLayer(MacroLayer) );
    50  	assert( isASTLayer(RawMacroLayer) );
    51  }
    52  
    53  /// True if in the specified layer @lay(...) has no effect and merely produces a syntax tree
    54  
    55  bool isNoLayerChangeLayer( Layer lay )
    56  {
    57  	return lay==RawMacroLayer;
    58  }
    59  
    60  unittest
    61  {
    62  	assert( !isNoLayerChangeLayer(SystemLayer) );
    63  	assert( !isNoLayerChangeLayer(ValueLayer) );
    64  	assert( !isNoLayerChangeLayer(MacroLayer) );
    65  	assert( isNoLayerChangeLayer(RawMacroLayer) );
    66  }
    67  
    68  /// True if do macro expanstion
    69  
    70  bool isMacroLayer( Layer lay )
    71  {
    72  	return lay==MacroLayer || lay==RawMacroLayer;
    73  }
    74  
    75  unittest
    76  {
    77  	assert( !isMacroLayer(SystemLayer) );
    78  	assert( !isMacroLayer(ValueLayer) );
    79  	assert( isMacroLayer(MacroLayer) );
    80  	assert( isMacroLayer(RawMacroLayer) );
    81  }