File: concrete-syntax/core/expression/unary/prefix.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_prefix / 3 #67
  module: Unary#14
  class: Prefix#16
inherits from
  Abstract ( Umu::ConcreteSyntax::Core::Expression::Unary )
has properties
alias: sym obj #17
attribute: rhs_expr [R] #18
method: initialize / 3 #21
method: to_s #31
method: __desugar__ / 2 #38

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 Prefix < Unary::Abstract
  17      alias       sym obj
  18      attr_reader :rhs_expr
  19 
  20 
  21      def initialize(loc, sym, rhs_expr)
  22          ASSERT.kind_of sym,         ::Symbol
  23          ASSERT.kind_of rhs_expr,    CSCE::Abstract
  24 
  25          super(loc, sym)
  26 
  27          @rhs_expr = rhs_expr
  28      end
  29 
  30 
  31      def to_s
  32          format "(%s %s)", self.sym, self.rhs_expr.to_s
  33      end
  34 
  35 
  36  private
  37 
  38      def __desugar__(env, event)
  39          ASCE.make_lambda(
  40              self.loc,
  41 
  42              [
  43                  ASCE.make_parameter(
  44                      self.loc,
  45                      ASCE.make_identifier(self.loc, :'%x')
  46                  )
  47              ],
  48 
  49              ASCE.make_apply(
  50                  self.loc,
  51                  ASCE.make_identifier(self.loc, self.sym),
  52                  ASCE.make_identifier(self.loc, :'%x'),
  53                  [self.rhs_expr.desugar(env.enter(event))]
  54              ),
  55 
  56              self.sym
  57          )
  58      end
  59  end
  60 
  61  end # Umu::ConcreteSyntax::Core::Expression::Unary
  62 
  63 
  64 
  65  module_function
  66 
  67      def make_prefix(loc, sym, rhs_expr)
  68          ASSERT.kind_of loc,         LOC::Entry
  69          ASSERT.kind_of sym,         ::Symbol
  70          ASSERT.kind_of rhs_expr,    CSCE::Abstract
  71 
  72          Unary::Prefix.new(loc, sym, rhs_expr).freeze
  73      end
  74 
  75  end # Umu::ConcreteSyntax::Core::Expression
  76 
  77  end # Umu::ConcreteSyntax::Core
  78 
  79  end # Umu::ConcreteSyntax
  80 
  81  end # Umu