File: concrete-syntax/core/expression/unary/message.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_functionalized_message / 3 #87
  module: Unary#14
  class: Message#16
inherits from
  Abstract ( Umu::ConcreteSyntax::Core::Expression::Unary )
has properties
alias: message_ident obj #17
attribute: opt_recv_class_ident [R] #18
method: initialize / 3 #21
method: to_s #31
method: __desugar__ / 2 #46

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  class Message < Abstract
  17      alias       message_ident obj
  18      attr_reader :opt_recv_class_ident
  19 
  20 
  21      def initialize(loc, message_ident, opt_recv_class_ident)
  22          ASSERT.kind_of      message_ident,          CSCEU::Identifier::Short
  23          ASSERT.opt_kind_of  opt_recv_class_ident,   CSCEU::Identifier::Short
  24 
  25          super(loc, message_ident)
  26 
  27          @opt_recv_class_ident = opt_recv_class_ident
  28      end
  29 
  30 
  31      def to_s
  32          format("&(%s%s)",
  33                  if self.opt_recv_class_ident
  34                      format "%s : ", self.opt_recv_class_ident
  35                  else
  36                      ''
  37                  end,
  38 
  39                  self.message_ident
  40          )
  41      end
  42 
  43 
  44  private
  45 
  46      def __desugar__(_env, _event)
  47          ASCE.make_lambda(
  48              self.loc,
  49 
  50              [
  51                  ASCE.make_parameter(
  52                      self.loc,
  53                      ASCE.make_identifier(self.loc, :'%x')
  54                  )
  55              ],
  56 
  57              ASCE.make_send(
  58                  loc,
  59 
  60                  ASCE.make_identifier(self.loc, :'%x'),
  61 
  62                  ASCE.make_message(
  63                      self.message_ident.loc,
  64                      self.message_ident.sym
  65                  ),
  66 
  67                  [],
  68 
  69                  if self.opt_recv_class_ident
  70                      self.opt_recv_class_ident.sym
  71                  else
  72                      nil
  73                  end
  74              ),
  75 
  76              self.message_ident.sym
  77          )
  78      end
  79  end
  80 
  81  end # Umu::ConcreteSyntax::Core::Expression::Unary
  82 
  83 
  84 
  85  module_function
  86 
  87      def make_functionalized_message(
  88          loc, message_ident, opt_recv_class_ident = nil
  89      )
  90          ASSERT.kind_of      loc,                    LOC::Entry
  91          ASSERT.kind_of      message_ident,          CSCEU::Identifier::Short
  92          ASSERT.opt_kind_of  opt_recv_class_ident,   CSCEU::Identifier::Short
  93 
  94          Unary::Message.new(loc, message_ident, opt_recv_class_ident).freeze
  95      end
  96 
  97  end # Umu::ConcreteSyntax::Core::Expression
  98 
  99  end # Umu::ConcreteSyntax::Core
 100 
 101  end # Umu::ConcreteSyntax
 102 
 103  end # Umu