forked from AssemblyScript/assemblyscript
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfield-initialization-errors.ts
More file actions
143 lines (131 loc) · 2.24 KB
/
field-initialization-errors.ts
File metadata and controls
143 lines (131 loc) · 2.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
// Uninitialized without ctor
class Ref {
a: ArrayBuffer; // TS2564
}
{
new Ref();
}
// Uninitialized with ctor
class Ref_Ctor {
a: ArrayBuffer; // TS2564
constructor() {
}
}
{
new Ref_Ctor();
}
// Uninitialized with inline ctor
class Ref_InlineCtor {
a: ArrayBuffer; // TS2564
@inline constructor() {
}
}
{
new Ref_InlineCtor();
}
// Uninitialized in any branch
class Ref_Ctor_Branch {
a: ArrayBuffer; // TS2564
constructor(cond: bool) {
if (cond) {
this.a = new ArrayBuffer(0);
} else {
// uninitialized
}
}
}
{
new Ref_Ctor_Branch(true);
}
// Access before initialize
class Ref_Ctor_Use_Init {
a: ArrayBuffer;
constructor() {
this.a; // TS2565
this.a = new ArrayBuffer(0);
}
}
{
new Ref_Ctor_Use_Init();
}
// Call before initialize
class Ref_Ctor_Call_Init {
a: ArrayBuffer;
constructor() {
this.foo();
this.a = new ArrayBuffer(0);
}
foo(): void {}
}
{
new Ref_Ctor_Call_Init();
}
// Property (call) before initialize
class Ref_Ctor_Prop_Init {
a: ArrayBuffer;
constructor() {
this.foo;
this.a = new ArrayBuffer(0);
}
get foo(): i32 { return 1; }
}
{
new Ref_Ctor_Prop_Init();
}
// Called with before initialize
class Ref_Ctor_Callwith_Init {
a: ArrayBuffer;
constructor() {
Ref_Ctor_Callwith_Init.foo(this);
this.a = new ArrayBuffer(0);
}
static foo(o: Ref_Ctor_Callwith_Init): void {}
}
{
new Ref_Ctor_Callwith_Init();
}
// Aliase before initialize
class Ref_Ctor_Alias_Init {
a: ArrayBuffer;
constructor() {
var b = this;
this.a = new ArrayBuffer(0);
}
}
{
new Ref_Ctor_Alias_Init();
}
// Assignment before initialize
class Ref_Ctor_Assign_Init {
a: ArrayBuffer;
constructor() {
var b: this;
b = this;
this.a = new ArrayBuffer(0);
}
}
{
new Ref_Ctor_Assign_Init();
}
// Indirectly called with before initialize
class Ref_Ctor_Icallwith_Init {
a: ArrayBuffer;
constructor() {
Ref_Ctor_Icallwith_Init_fn(this);
this.a = new ArrayBuffer(0);
}
}
var Ref_Ctor_Icallwith_Init_fn = (o: Ref_Ctor_Icallwith_Init): void => {};
{
new Ref_Ctor_Icallwith_Init();
}
// Uninitialized inherited
class Inherit_Base {
a: ArrayBuffer; // TS2564
}
class Inherit extends Inherit_Base {
}
{
new Inherit();
}
ERROR("EOF");