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  }