...
1
2
3
4
5
6
7 package typesinternal
8
9 import (
10 "go/token"
11 "go/types"
12 "reflect"
13 "unsafe"
14 )
15
16 func SetUsesCgo(conf *types.Config) bool {
17 v := reflect.ValueOf(conf).Elem()
18
19 f := v.FieldByName("go115UsesCgo")
20 if !f.IsValid() {
21 f = v.FieldByName("UsesCgo")
22 if !f.IsValid() {
23 return false
24 }
25 }
26
27 addr := unsafe.Pointer(f.UnsafeAddr())
28 *(*bool)(addr) = true
29
30 return true
31 }
32
33
34
35
36
37
38 func ReadGo116ErrorData(err types.Error) (code ErrorCode, start, end token.Pos, ok bool) {
39 var data [3]int
40
41 v := reflect.ValueOf(err)
42 for i, name := range []string{"go116code", "go116start", "go116end"} {
43 f := v.FieldByName(name)
44 if !f.IsValid() {
45 return 0, 0, 0, false
46 }
47 data[i] = int(f.Int())
48 }
49 return ErrorCode(data[0]), token.Pos(data[1]), token.Pos(data[2]), true
50 }
51
View as plain text