File: concrete-syntax/core/expression/unary/container/sequence.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_sequential / 2 #81
  module: Unary#14
  module: Container#16
  class: Sequential#18
inherits from
  Abstract ( Umu::ConcreteSyntax::Core::Expression::Unary::Container )
has properties
method: initialize / 2 #19
method: to_s #26
method: pretty_print / 1 #31
method: __desugar__ / 2 #42

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 Sequential < Abstract
  19      def initialize(loc, exprs)
  20          ASSERT.kind_of  exprs, ::Array
  21 
  22          super
  23      end
  24 
  25 
  26      def to_s
  27          format "%%DO (%s)", self.map { |expr| '!' + expr.to_s }.join(' ')
  28      end
  29 
  30 
  31      def pretty_print(q)
  32          PRT.group_for_enum q, self, bb:'%DO (', eb:')', join:' ' do
  33          |expr|
  34              q.text '!'
  35              expr.pretty_print q
  36          end
  37      end
  38 
  39 
  40  private
  41 
  42      def __desugar__(env, event)
  43          new_env = env.enter event
  44 
  45          expr = case self.exprs.size
  46                  when 0
  47                      ASCE.make_unit self.loc
  48                  when 1
  49                      self.exprs[0].desugar new_env
  50                  else
  51                      *not_last_exprs, last_expr = self.exprs
  52 
  53                      decls = ASCD.make_seq_of_declaration(
  54                          self.loc,
  55 
  56                          not_last_exprs.map { |expr|
  57                              ASSERT.kind_of expr, CSCE::Abstract
  58 
  59                              ASCD.make_value(
  60                                   expr.loc, WILDCARD, expr.desugar(new_env)
  61                              )
  62                          }
  63                      )
  64 
  65                      ASCE.make_let(
  66                           self.loc, decls, last_expr.desugar(new_env)
  67                      )
  68                  end
  69 
  70          ASSERT.kind_of expr, ASCE::Abstract
  71      end
  72  end
  73 
  74  end # Umu::ConcreteSyntax::Core::Expression::Unary::Container
  75 
  76  end # Umu::ConcreteSyntax::Core::Expression::Unary
  77 
  78 
  79  module_function
  80 
  81      def make_sequential (loc, exprs)
  82          ASSERT.kind_of loc,     LOC::Entry
  83          ASSERT.kind_of exprs,   ::Array
  84 
  85          Unary::Container::Sequential.new(loc, exprs.freeze).freeze
  86      end
  87 
  88 
  89  end # Umu::ConcreteSyntax::Core::Expression
  90 
  91  end # Umu::ConcreteSyntax::Core
  92 
  93  end # Umu::ConcreteSyntax
  94 
  95  end # Umu