Skip to content
← Back

src/semantic/dotnet/ghul_namespace_creator.ghul

1
namespace Semantic.DotNet is
2
use TYPE = System.Type;
3
4
use System.Reflection.Assembly;
5
6
use IO.Std;
7
8
use Collections.MAP;
9
use Collections.SET;
10
use Collections.LIST;
11
use Collections.Iterable;
12
13
use Logging.TIMERS;
14
15
class GHUL_NAMESPACE_CREATOR(
16
_timers: TIMERS,
17
_ghul_symbol_table: Semantic.SYMBOL_TABLE,
18
_namespaces: NAMESPACES,
19
_type_details_lookup: TYPE_DETAILS_LOOKUP
20
) is
21
_is_enabled: bool;
22
_is_started: bool;
23
24
init(..) is
25
_is_enabled = true;
26
si
27
28
disable() is
29
_is_enabled = false;
30
si
31
32
create_namespaces() is
33
if !_is_enabled then
34
return;
35
fi
36
37
let current mut = LIST[string]();
38
39
let namespaces = LIST[string]();
40
41
for ns in _type_details_lookup.ghul_namespaces do
42
namespaces.add(ns);
43
od
44
45
namespaces.sort();
46
47
for a in namespaces do
48
let to_create = LIST(a.split(['.']));
49
50
while current.count > to_create.count do
51
_namespaces.leave_namespace(null, null);
52
_ghul_symbol_table.leave_scope();
53
current.remove_at(current.count - 1);
54
od
55
56
let index mut = 0;
57
58
while index < current.count /\ current[index] =~ to_create[index] do
59
index = index + 1;
60
od
61
62
while current.count > index do
63
_namespaces.leave_namespace(null, null);
64
_ghul_symbol_table.leave_scope();
65
current.remove_at(current.count - 1);
66
od
67
68
for i in index..to_create.count do
69
let ns = _namespaces.declare_and_enter_namespace(Source.LOCATION.internal, to_create[i], null, false);
70
_ghul_symbol_table.enter_scope(ns);
71
od
72
73
current = to_create;
74
od
75
76
while current.count > 0 do
77
_namespaces.leave_namespace(null, null);
78
_ghul_symbol_table.leave_scope();
79
current.remove_at(current.count - 1);
80
od
81
si
82
si
83
si