File: concrete-syntax/core/expression/unary/container/cell-stream.rb

Overview
Module Structure
Class Hierarchy
Code

Overview

Module Structure

  module: <Toplevel Module>
  module: Umu#6
  module: ConcreteSyntax#8
  module: Core#10
  module: Expression#12
has properties
function: make_stream / 3 #110
  module: Unary#14
  module: Container#16
  class: CellStream#18
inherits from
  Abstract ( Umu::ConcreteSyntax::Core::Expression::Unary::Container )
has properties
attribute: opt_last_expr [R] #19
method: initialize / 4 #22
method: memorized? #37
method: to_s #42
method: pretty_print / 1 #61
method: __bb_str__ #78
method: __eb_str__ #83
method: __desugar__ / 2 #88

Code

   1  # coding: utf-8
   2  # frozen_string_literal: true
   3 
   4 
   5 
   6  module Umu
   7 
   8  module ConcreteSyntax
   9 
  10  module Core
  11 
  12  module Expression
  13 
  14  module Unary
  15 
  16  module Container
  17 
  18  class CellStream < Container::Abstract
  19      attr_reader :opt_last_expr
  20 
  21 
  22      def initialize(loc, is_memorized, exprs, opt_last_expr)
  23          ASSERT.bool         is_memorized
  24          ASSERT.kind_of      exprs,          ::Array
  25          ASSERT.opt_kind_of  opt_last_expr,  CSCE::Abstract
  26          ASSERT.assert (
  27              if exprs.empty? then opt_last_expr.nil? else true end
  28          )
  29 
  30          super(loc, exprs)
  31 
  32          @is_memorized  = is_memorized
  33          @opt_last_expr = opt_last_expr
  34      end
  35 
  36 
  37      def memorized?
  38          @is_memorized
  39      end
  40 
  41 
  42      def to_s
  43          [
  44              '&',
  45 
  46              __bb_str__,
  47 
  48              self.map(&:to_s).join(', '),
  49 
  50              if self.opt_last_expr
  51                  '|' + self.opt_last_expr.to_s
  52              else
  53                  ''
  54              end,
  55 
  56              __eb_str__
  57          ].join
  58      end
  59 
  60 
  61      def pretty_print(q)
  62          bb = '&' + __bb_str__
  63          eb = __eb_str__
  64 
  65          if self.opt_last_expr
  66              PRT.group_for_enum q, self, bb:bb, join:', '
  67              PRT.group q, bb:'|', eb:eb do
  68                  q.pp self.opt_last_expr
  69              end
  70          else
  71              PRT.group_for_enum q, self, bb:bb, eb:eb, join:', '
  72          end
  73      end
  74 
  75 
  76  private
  77 
  78      def __bb_str__
  79          self.memorized? ? '{' : '['
  80      end
  81 
  82 
  83      def __eb_str__
  84          self.memorized? ? '}' : ']'
  85      end
  86 
  87 
  88      def __desugar__(env, event)
  89          new_env = env.enter event
  90 
  91          exprs = self.map { |expr| expr.desugar new_env }
  92 
  93          opt_last_expr = if self.opt_last_expr
  94                              self.opt_last_expr.desugar new_env
  95                          else
  96                              nil
  97                          end
  98 
  99          ASCE.make_stream self.loc, exprs, opt_last_expr, self.memorized?
 100      end
 101  end
 102 
 103  end # Umu::ConcreteSyntax::Core::Expression::Unary::Container
 104 
 105  end # Umu::ConcreteSyntax::Core::Expression::Unary
 106 
 107 
 108  module_function
 109 
 110      def make_stream(loc, exprs, opt_last_expr = nil)
 111          ASSERT.kind_of      loc,            LOC::Entry
 112          ASSERT.kind_of      exprs,          ::Array
 113          ASSERT.opt_kind_of  opt_last_expr,  CSCE::Abstract
 114 
 115          Unary::Container::CellStream.new(
 116              loc, false, exprs.freeze, opt_last_expr
 117          ).freeze
 118      end
 119 
 120  end # Umu::ConcreteSyntax::Core::Expression
 121 
 122  end # Umu::ConcreteSyntax::Core
 123 
 124  end # Umu::ConcreteSyntax
 125 
 126  end # Umu