stack icon indicating copy to clipboard operation
stack copied to clipboard

Deprecated function Call.PC() breaks tinygo compatibility?

Open dkegel-fastly opened this issue 4 years ago • 3 comments

Following a rabbit hole of dependencies that starts at https://github.com/tinygo-org/tinygo/issues/2153, I noticed that

$ git clone https://github.com/go-stack/stack
$ cd stack
$ go test

succeeds, but

$ tinygo test

fails with

stack.go:164:17: c.frame.PC undefined (type runtime.Frame has no field or method PC)

That's

162 // Deprecated: Use Call.Frame instead.
163 func (c Call) PC() uintptr {
164         return c.frame.PC
165 }

So for what it's worth, the deprecated function Call.PC() is causing tinygo build failure. Commenting it out lets tinygo test pass.

dkegel-fastly avatar Nov 12 '21 03:11 dkegel-fastly

Indeed. Tinygo's runtime.Frame type is not fully compatible with Go's runtime.Frame type. It is missing several fields.

The best solution here is to move func (c Call) PC() uintptr into a separate file that specifies a !tinygo build tag.

Would you like to submit a PR for that?

ChrisHines avatar Nov 12 '21 16:11 ChrisHines

I must have been smoking something. Fixing that one problem uncovers another one now:

stack_test.go:580:6: fn.FileLine undefined (type *runtime.Func has no field or method FileLine)

so maybe it's best to leave sleeping dogs lie for a bit, until the need for a fix is stronger.

dkegel-fastly avatar Nov 13 '21 23:11 dkegel-fastly

Sure. Tinygo's runtime package is quite a bit smaller than Go's, so any code that depends on runtime is likely to have issues like this.

ChrisHines avatar Nov 14 '21 03:11 ChrisHines