package wazevo

import (
	
	
	

	
	
)

func buildHostModuleOpaque( *wasm.Module,  []experimental.FunctionListener) moduleContextOpaque {
	 := len(.CodeSection)*16 + 32
	 := newAlignedOpaque()

	binary.LittleEndian.PutUint64([0:], uint64(uintptr(unsafe.Pointer())))

	if len() > 0 {
		//nolint:staticcheck
		 := (*reflect.SliceHeader)(unsafe.Pointer(&))
		binary.LittleEndian.PutUint64([8:], uint64(.Data))
		binary.LittleEndian.PutUint64([16:], uint64(.Len))
		binary.LittleEndian.PutUint64([24:], uint64(.Cap))
	}

	 := 32
	for  := range .CodeSection {
		 := .CodeSection[].GoFunc
		writeIface(, [:])
		 += 16
	}
	return 
}

func hostModuleFromOpaque( uintptr) *wasm.Module {
	var  []byte
	//nolint:staticcheck
	 := (*reflect.SliceHeader)(unsafe.Pointer(&))
	.Data = 
	.Len = 32
	.Cap = 32
	return *(**wasm.Module)(unsafe.Pointer(&[0]))
}

func hostModuleListenersSliceFromOpaque( uintptr) []experimental.FunctionListener {
	var  []byte
	//nolint:staticcheck
	 := (*reflect.SliceHeader)(unsafe.Pointer(&))
	.Data = 
	.Len = 32
	.Cap = 32

	 := binary.LittleEndian.Uint64([8:])
	 := binary.LittleEndian.Uint64([16:])
	 := binary.LittleEndian.Uint64([24:])
	var  []experimental.FunctionListener
	//nolint:staticcheck
	 = (*reflect.SliceHeader)(unsafe.Pointer(&))
	.Data = uintptr()
	.Len = int()
	.Cap = int()
	return 
}

func hostModuleGoFuncFromOpaque[ any]( int,  uintptr)  {
	 := uintptr(*16) + 32
	 :=  + 

	var  []byte
	//nolint:staticcheck
	 := (*reflect.SliceHeader)(unsafe.Pointer(&))
	.Data = 
	.Len = 16
	.Cap = 16
	return readIface().()
}

func writeIface( interface{},  []byte) {
	 := *(*[2]uint64)(unsafe.Pointer(&))
	binary.LittleEndian.PutUint64(, [0])
	binary.LittleEndian.PutUint64([8:], [1])
}

func readIface( []byte) interface{} {
	 := binary.LittleEndian.Uint64()
	 := binary.LittleEndian.Uint64([8:])
	return *(*interface{})(unsafe.Pointer(&[2]uint64{, }))
}