func (c *compiler) defineFreeFunction(fn llvm.Value) { entry := llvm.AddBasicBlock(fn, "entry") c.builder.SetInsertPointAtEnd(entry) ptr := fn.FirstParam() ptrtyp := llvm.PointerType(llvm.Int8Type(), 0) c.builder.CreateFree(c.builder.CreateIntToPtr(ptr, ptrtyp, "")) c.builder.CreateRetVoid() }
func (c *compiler) defineMallocFunction(fn llvm.Value) { entry := llvm.AddBasicBlock(fn, "entry") c.builder.SetInsertPointAtEnd(entry) size := fn.FirstParam() ptr := c.builder.CreateArrayMalloc(llvm.Int8Type(), size, "") // XXX memset to zero, or leave that to Go runtime code? fn_type := fn.Type().ElementType() result := c.builder.CreatePtrToInt(ptr, fn_type.ReturnType(), "") c.builder.CreateRet(result) }