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