File: concrete-syntax/core/expression/suspended-stream.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_suspended_stream / 2 #53
  class: SuspendedStream#14
inherits from
  Abstract ( Umu::ConcreteSyntax::Core::Expression )
has properties
attribute: expr [R] #15
method: initialize / 2 #17
method: to_s #26
method: pretty_print / 1 #31
method: __desugar__ / 2 #40

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  class SuspendedStream < Expression::Abstract
  15      attr_reader :expr
  16 
  17      def initialize(loc, expr)
  18          ASSERT.kind_of expr, CSCE::Abstract
  19 
  20          super(loc)
  21 
  22          @expr = expr
  23      end
  24 
  25 
  26      def to_s
  27          format "&{ %s }", self.expr.to_s
  28      end
  29 
  30 
  31      def pretty_print(q)
  32          PRT.group q, bb:'&{', eb:'}', sep:' ' do
  33              q.pp self.expr
  34          end
  35      end
  36 
  37 
  38  private
  39 
  40      def __desugar__(env, event)
  41          new_env = env.enter event
  42 
  43          ASCE.make_suspended_stream(
  44              self.loc,
  45              self.expr.desugar(new_env)
  46          )
  47      end
  48  end
  49 
  50 
  51  module_function
  52 
  53      def make_suspended_stream(loc, expr)
  54          ASSERT.kind_of loc,     LOC::Entry
  55          ASSERT.kind_of expr,    CSCE::Abstract
  56 
  57          SuspendedStream.new(loc, expr).freeze
  58      end
  59 
  60  end # Umu::ConcreteSyntax::Core::Expression
  61 
  62  end # Umu::ConcreteSyntax::Core
  63 
  64  end # Umu::ConcreteSyntax
  65 
  66  end # Umu