github.com/Konstantin8105/c4go@v0.0.0-20240505174241-768bb1c65a51/tests/code_quality/ap.go.expected (about) 1 // 2 // Package - transpiled by c4go 3 // 4 // If you have found any issues, please raise an issue at: 5 // https://github.com/Konstantin8105/c4go/ 6 // 7 8 package code_quality 9 10 import "reflect" 11 import "runtime" 12 import "unsafe" 13 import "github.com/Konstantin8105/c4go/noarch" 14 15 // a - transpiled function from C4GO/tests/code_quality/ap.c:4 16 func a(v1 []int32) { 17 // input argument - C-pointer 18 noarch.Printf([]byte("a: %d\n\x00"), v1[0]) 19 } 20 21 // b - transpiled function from C4GO/tests/code_quality/ap.c:7 22 func b(v1 []int32, size int32) { 23 // input argument - C-array 24 for size -= 1; size >= 0; size-- { 25 noarch.Printf([]byte("b: %d %d\n\x00"), size, v1[size]) 26 } 27 } 28 29 // get - transpiled function from C4GO/tests/code_quality/ap.c:14 30 func get() int32 { 31 return 0 32 } 33 34 // main - transpiled function from C4GO/tests/code_quality/ap.c:19 35 func main() { 36 // value 37 var i1 int32 = 42 38 a(c4goUnsafeConvert_int32(&i1)) 39 b(c4goUnsafeConvert_int32(&i1), 1) 40 // C-array 41 var i2 []int32 = []int32{11, 22} 42 a(i2) 43 b(i2, 2) 44 // C-pointer from value 45 var i3 []int32 = c4goUnsafeConvert_int32(&i1) 46 a(i3) 47 b(i3, 1) 48 // C-pointer from array 49 var i4 []int32 = i2 50 a(i4) 51 b(i4, 2) 52 // C-pointer from array 53 var i5 []int32 = i2[1:] 54 a(i5) 55 b(i5, 1) 56 // pointer arithmetic 57 var i6 []int32 = i5[0+1:] 58 a(i6) 59 b(i6, 1) 60 // pointer arithmetic 61 var val int32 = 2 - 2 62 var i7 []int32 = c4goPointerArithInt32Slice(c4goPointerArithInt32Slice(c4goPointerArithInt32Slice(i5, int(1+(1-1)+val+0*(100-2))), int(0)), int(-(0 * 0))) 63 a(i7) 64 b(i7, 1) 65 // pointer arithmetic 66 var i8 []int32 = i5[0+1+0:] 67 a(i8) 68 b(i8, 1) 69 // pointer arithmetic 70 var i9 []int32 = []int32{i3[0], i3[0+1]} 71 a(i9) 72 b(i9, 1) 73 // pointer arithmetic 74 var i10 []int32 = i5[1+0+0+5*get()+get()+(12+3)*get():] 75 a(i10) 76 b(i10, 1) 77 // pointer arithmetic 78 var i11 []int32 = c4goPointerArithInt32Slice(i5[1+0+0+5*get()+get():], int(-((12 + 3) * get()))) 79 a(i11) 80 b(i11, 1) 81 return 82 } 83 84 // c4goUnsafeConvert_int32 : created by c4go 85 func c4goUnsafeConvert_int32(c4go_name *int32) []int32 { 86 return (*[1000000]int32)(unsafe.Pointer(c4go_name))[:] 87 } 88 89 // c4goPointerArithInt32Slice - function of pointer arithmetic. generated by c4go 90 func c4goPointerArithInt32Slice(slice []int32, position int) []int32 { 91 if position < 0 { 92 // invert sign 93 position = -position 94 95 // Example from: go101.org/article/unsafe.html 96 // repair size of slice 97 var hdr reflect.SliceHeader 98 sliceLen := len(slice) 99 hdr.Data = uintptr(unsafe.Pointer(&slice[0])) - (uintptr(position))*unsafe.Sizeof(slice[0]) 100 runtime.KeepAlive(&slice[0]) // needed! 101 hdr.Len = sliceLen + int(position) 102 hdr.Cap = hdr.Len 103 slice = *((*[]int32)(unsafe.Pointer(&hdr))) 104 return slice 105 } 106 // position >= 0: 107 return slice[position:] 108 }