File tree 1 file changed +17
-8
lines changed
1 file changed +17
-8
lines changed Original file line number Diff line number Diff line change @@ -4,6 +4,7 @@ package ast
4
4
5
5
import (
6
6
"sync/atomic"
7
+ "unsafe"
7
8
8
9
"github.com/microsoft/typescript-go/internal/core"
9
10
)
@@ -13,22 +14,30 @@ import (
13
14
// interface valued properties either store a true nil or a reference to a non-nil struct.
14
15
15
16
type Node struct {
16
- Kind Kind
17
- Flags NodeFlags
18
- Loc core.TextRange
19
- id atomic.Uint32
20
- Parent * Node
21
- _data nodeData
17
+ Kind Kind
18
+ Flags NodeFlags
19
+ Loc core.TextRange
20
+ id atomic.Uint32
21
+ Parent * Node
22
+ dataType unsafe.Pointer
23
+ }
24
+
25
+ type interfaceValue struct {
26
+ typ unsafe.Pointer
27
+ value unsafe.Pointer
22
28
}
23
29
24
30
func (n * Node ) data () nodeData {
25
- return n ._data
31
+ var data nodeData
32
+ (* interfaceValue )(unsafe .Pointer (& data )).typ = n .dataType
33
+ (* interfaceValue )(unsafe .Pointer (& data )).value = unsafe .Pointer (n )
34
+ return data
26
35
}
27
36
28
37
func newNode (kind Kind , data nodeData ) * Node {
29
38
n := data .AsNode ()
30
39
n .Loc = core .UndefinedTextRange ()
31
40
n .Kind = kind
32
- n ._data = data
41
+ n .dataType = ( * interfaceValue )( unsafe . Pointer ( & data )). typ
33
42
return n
34
43
}
You can’t perform that action at this time.
0 commit comments