Artifact Content
Not logged in

Artifact 59dc790b72d21ee032d1d114b1aeed5a8975ff46


     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 macro-like layer that basically generates syntax tree
    23  
    24  bool isMacroishLayer( Layer lay )
    25  {
    26  	return lay==MacroLayer || lay==RawMacroLayer;
    27  }
    28  
    29  unittest
    30  {
    31  	assert( !isMacroishLayer(SystemLayer) );
    32  	assert( !isMacroishLayer(ValueLayer) );
    33  	assert( isMacroishLayer(MacroLayer) );
    34  	assert( isMacroishLayer(RawMacroLayer) );
    35  }
    36  
    37  /// True if in the specified layer @lay(...) has no effect and merely produces a syntax tree
    38  
    39  bool isNoLayerChangeLayer( Layer lay )
    40  {
    41  	return lay==RawMacroLayer;
    42  }
    43  
    44  unittest
    45  {
    46  	assert( !isNoLayerChangeLayer(SystemLayer) );
    47  	assert( !isNoLayerChangeLayer(ValueLayer) );
    48  	assert( !isNoLayerChangeLayer(MacroLayer) );
    49  	assert( isNoLayerChangeLayer(RawMacroLayer) );
    50  }