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 Delay < Abstract
17 alias expr obj
18
19
20 def initialize(loc, expr)
21 ASSERT.kind_of expr, CSCE::Abstract
22
23 super
24 end
25
26
27 def to_s
28 format "%%DELAY %s", self.expr.to_s
29 end
30
31
32 def pretty_print(q)
33 q.text '%DELAY '
34 q.pp self.expr
35 end
36
37
38 private
39
40 def __desugar__(env, event)
41 expr = self.expr.desugar env.enter(event)
42
43 ASCE.make_delay self.loc, expr
44 end
45 end
46
47 end # Umu::ConcreteSyntax::Core::Expression::Unary
48
49
50
51 module_function
52
53 def make_delay(loc, expr)
54 ASSERT.kind_of loc, LOC::Entry
55 ASSERT.kind_of expr, CSCE::Abstract
56
57 Unary::Delay.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