File: concrete-syntax/core/expression/unary/container/list.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_list / 3 #86
  module: Unary#14
  module: Container#16
  class: List#18
inherits from
  Abstract ( Umu::ConcreteSyntax::Core::Expression::Unary::Container )
has properties
attribute: opt_last_expr [R] #19
method: initialize / 3 #22
method: to_s #35
method: pretty_print / 1 #48
method: __desugar__ / 2 #62

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 List < Container::Abstract
  19      attr_reader :opt_last_expr
  20 
  21 
  22      def initialize(loc, exprs, opt_last_expr)
  23          ASSERT.kind_of      exprs,          ::Array
  24          ASSERT.opt_kind_of  opt_last_expr,  CSCE::Abstract
  25          ASSERT.assert (
  26              if exprs.empty? then opt_last_expr.nil? else true end
  27          )
  28 
  29          super(loc, exprs)
  30 
  31          @opt_last_expr = opt_last_expr
  32      end
  33 
  34 
  35      def to_s
  36          format("[%s%s]",
  37              self.map(&:to_s).join(', '),
  38 
  39              if self.opt_last_expr
  40                  '|' + self.opt_last_expr.to_s
  41              else
  42                  ''
  43              end
  44          )
  45      end
  46 
  47 
  48      def pretty_print(q)
  49          if self.opt_last_expr
  50              PRT.group_for_enum q, self, bb:'[', join:', '
  51              PRT.group q, bb:'|', eb:']' do
  52                  q.pp self.opt_last_expr
  53              end
  54          else
  55              PRT.group_for_enum q, self, bb:'[', eb:']', join:', '
  56          end
  57      end
  58 
  59 
  60  private
  61 
  62      def __desugar__(env, event)
  63          new_env = env.enter event
  64 
  65          ASCE.make_list(
  66              self.loc,
  67 
  68              self.map { |elem| elem.desugar(new_env) },
  69 
  70              if self.opt_last_expr
  71                  self.opt_last_expr.desugar(new_env)
  72              else
  73                  nil
  74              end
  75          )
  76      end
  77  end
  78 
  79  end # Umu::ConcreteSyntax::Core::Expression::Unary::Container
  80 
  81  end # Umu::ConcreteSyntax::Core::Expression::Unary
  82 
  83 
  84  module_function
  85 
  86      def make_list(loc, exprs, opt_last_expr = nil)
  87          ASSERT.kind_of      loc,            LOC::Entry
  88          ASSERT.kind_of      exprs,          ::Array
  89          ASSERT.opt_kind_of  opt_last_expr,  CSCE::Abstract
  90 
  91          Unary::Container::List.new(loc, exprs.freeze, opt_last_expr).freeze
  92      end
  93 
  94  end # Umu::ConcreteSyntax::Core::Expression
  95 
  96  end # Umu::ConcreteSyntax::Core
  97 
  98  end # Umu::ConcreteSyntax
  99 
 100  end # Umu