1 # coding: utf-8
2 # frozen_string_literal: true
3
4
5 module Umu
6
7 module ConcreteSyntax
8
9 module Module
10
11 module Pattern
12
13 class Variable < Abstract
14 attr_reader :var_sym
15
16
17 def initialize(loc, var_sym)
18 ASSERT.kind_of var_sym, ::Symbol
19
20 super(loc)
21
22 @var_sym = var_sym
23 end
24
25
26 def to_s
27 self.var_sym.to_s
28 end
29
30
31 def exported_vars
32 [CSCP.make_variable(self.loc, self.var_sym)].freeze
33 end
34
35
36 private
37
38 def __desugar_value__(expr, _env, _event)
39 ASSERT.kind_of expr, ASCE::Abstract
40
41 ASCD.make_value self.loc, self.var_sym, expr
42 end
43 end
44
45
46 module_function
47
48 def make_variable(loc, var_sym)
49 ASSERT.kind_of loc, LOC::Entry
50 ASSERT.kind_of var_sym, ::Symbol
51
52 Variable.new(loc, var_sym).freeze
53 end
54
55 end # Umu::ConcreteSyntax::Module::Pattern
56
57 end # Umu::ConcreteSyntax::Module
58
59 end # Umu::ConcreteSyntax
60
61 end # Umu