github.com/llvm-mirror/llgo@v0.0.0-20190322182713-bf6f0a60fce1/test/execution/interfaces/error.go (about) 1 // RUN: llgo -o %t %s 2 // RUN: %t 2>&1 | FileCheck %s 3 4 // CHECK: !!!! 123 5 // CHECK-NEXT: errno 123 6 7 package main 8 9 var errors = [...]string{} 10 11 func itoa(val int) string { // do it here rather than with fmt to avoid dependency 12 if val < 0 { 13 return "-" + itoa(-val) 14 } 15 var buf [32]byte // big enough for int64 16 i := len(buf) - 1 17 for val >= 10 { 18 buf[i] = byte(val%10 + '0') 19 i-- 20 val /= 10 21 } 22 buf[i] = byte(val + '0') 23 return string(buf[i:]) 24 } 25 26 type Errno uintptr 27 28 func (e Errno) Error() string { 29 println("!!!!", uintptr(e)) 30 if 0 <= int(e) && int(e) < len(errors) { 31 s := errors[e] 32 if s != "" { 33 return s 34 } 35 } 36 return "errno " + itoa(int(e)) 37 } 38 39 func main() { 40 e := Errno(123) 41 i := (interface{})(e) 42 println(i.(error).Error()) 43 }