Methods with two outputs are expected to return an error, methods aren't visible from python
- 主要语言
- Go
- 星标
- 2.3k
- 派生
- 136
- 平均合并
- 14 分钟
- 30 天内合并 PR
- 2
描述
Hi, I'm trying to build this project, https://github.com/holiman/uint256, but I've run into multiple issues:
Suppose we have a function with multiple outputs: `func (z *Int) AddOverflow(x, y *Int) (*Int, bool)`, bind expects second argument to be an `error` and outputs the following `gopy: second result value must be of type error`.
To reproduce, minimized testcase:
```go
package uint256
import (
"math/bits"
)
type Int [4]uint64
func NewInt(val uint64) *Int {
z := &Int{}
z.SetUint64(val)
return z
}
func (z *Int) SetUint64(x uint64) *Int {
z[3], z[2], z[1], z[0] = 0, 0, 0, x
return z
}
func (z *Int) AddOverflow(x, y *Int) (*Int, bool) {
var carry uint64
z[0], carry = bits.Add64(x[0], y[0], 0)
z[1], carry = bits.Add64(x[1], y[1], carry)
z[2], carry = bits.Add64(x[2], y[2], carry)
z[3], carry = bits.Add64(x[3], y[3], carry)
return z, carry != 0
}
```
The second issue I'm having is that after compiling the project, public methods of type `Int` aren't exposed to Python, e.g. the following code won't run:
```python
from uint256_py import uint256
x, y, z = uint256.NewInt(123), uint256.NewInt(456), uint256.NewInt(0)
z.Add(x, y) # doesn't work, method isn't visible
```
I suspect this has something to do with `Int` being represented as an array `[4]uint64`.
Versions I'm using: Go 1.21.3 & Python 3.11.5
It seemed related to #315, so I've run this in docker with Go 1.19.5 & Python3.10.12 but the issue persisted.
Thank you.
贡献指南
这个仓库没有索引到贡献指南
调研方向
从 issue 中所示的最小化 Go 包以及生成的 Python import 和方法调用开始。检查 gopy 对多个返回值和基于数组的类型上的方法的处理方式;当 testcase 绑定 (*Int, bool) 结果并向 Python 暴露 Int 方法时,即表示完成。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- go, python
- 领域
- developer-experience, tooling
- Issue 类型
- 缺陷
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 活跃度
- 停滞
- 描述清晰度
- 基本清楚
- 新手友好度
- 32/100