File: concrete-syntax/core/declaration/assert.rb

Overview
Module Structure
Class Hierarchy
Code

Overview

Module Structure

  module: <Toplevel Module>
  module: Umu#6
  module: ConcreteSyntax#8
  module: Core#10
  module: Declaration#12
has properties
function: make_assert / 3 #86
  class: Assert#14
inherits from
  Abstract ( Umu::ConcreteSyntax::Core::Declaration )
has properties
attribute: test_expr [R] #15
attribute: else_expr [R] #15
method: initialize / 3 #18
method: to_s #29
method: pretty_print / 1 #37
method: exported_vars #46
method: __desugar__ / 2 #53

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 Declaration
  13 
  14  class Assert < Declaration::Abstract
  15      attr_reader :test_expr, :else_expr
  16 
  17 
  18      def initialize(loc, test_expr, else_expr)
  19          ASSERT.kind_of test_expr,   CSCE::Abstract
  20          ASSERT.kind_of else_expr,   CSCE::Abstract
  21 
  22          super(loc)
  23 
  24          @test_expr  = test_expr
  25          @else_expr  = else_expr
  26      end
  27 
  28 
  29      def to_s
  30          format("%%ASSERT %s -> %s",
  31                  self.test_expr.to_s,
  32                  self.else_expr.to_s
  33          )
  34      end
  35 
  36 
  37      def pretty_print(q)
  38          q.text '%ASSERT '
  39          q.pp self.test_expr
  40          PRT.group q, bb:' -> ' do
  41              q.pp self.else_expr
  42          end
  43      end
  44 
  45 
  46      def exported_vars
  47          [].freeze
  48      end
  49 
  50 
  51  private
  52 
  53      def __desugar__(env, event)
  54          new_env = env.enter event
  55 
  56          ASCD.make_value(
  57              self.loc,
  58 
  59              WILDCARD,
  60 
  61              ASCE.make_if(
  62                  self.loc,
  63 
  64                  [
  65                      ASCE.make_rule(
  66                          self.test_expr.loc,
  67                          self.test_expr.desugar(new_env),
  68                          ASCE.make_unit(self.test_expr.loc)
  69                      )
  70                  ],
  71 
  72                  ASCE.make_raise(
  73                      self.else_expr.loc,
  74                      X::AssertionFailure,
  75                      self.else_expr.desugar(new_env)
  76                  )
  77              )
  78          )
  79      end
  80  end
  81 
  82 
  83 
  84  module_function
  85 
  86      def make_assert(loc, test_expr, else_expr)
  87          ASSERT.kind_of loc,         LOC::Entry
  88          ASSERT.kind_of test_expr,   CSCE::Abstract
  89          ASSERT.kind_of else_expr,   CSCE::Abstract
  90 
  91          Assert.new(loc, test_expr, else_expr).freeze
  92      end
  93 
  94  end # Umu::ConcreteSyntax::Core::Declaration
  95 
  96  end # Umu::ConcreteSyntax::Core
  97 
  98  end # Umu::ConcreteSyntax
  99 
 100  end # Umu