From afe20ffe9220e7d200cf732d957f9b22efac4d26 Mon Sep 17 00:00:00 2001 From: xushiwei Date: Sat, 25 May 2024 22:52:48 +0800 Subject: [PATCH] runtime: Func, Method, Imethod --- _demo/interf/foo/foo.go | 9 ++++++ _demo/interf/interf.go | 35 ++++++++++++++++++++ internal/abi/llgo_autogen.lla | Bin 5736 -> 5835 bytes internal/abi/type.go | 23 ++++++++++--- internal/runtime/llgo_autogen.lla | Bin 9703 -> 10446 bytes internal/runtime/type.go | 3 -- internal/runtime/z_type.go | 52 ++++++++++++++++++++++++++++++ 7 files changed, 115 insertions(+), 7 deletions(-) create mode 100644 _demo/interf/foo/foo.go create mode 100644 _demo/interf/interf.go diff --git a/_demo/interf/foo/foo.go b/_demo/interf/foo/foo.go new file mode 100644 index 00000000..e385a31d --- /dev/null +++ b/_demo/interf/foo/foo.go @@ -0,0 +1,9 @@ +package foo + +func Bar() any { + return struct{ V int }{1} +} + +func F() any { + return struct{ v int }{1} +} diff --git a/_demo/interf/interf.go b/_demo/interf/interf.go new file mode 100644 index 00000000..457e9e41 --- /dev/null +++ b/_demo/interf/interf.go @@ -0,0 +1,35 @@ +package main + +import ( + "github.com/goplus/llgo/_demo/interf/foo" +) + +func Foo() any { + return struct{ v int }{1} +} + +func main() { + v := Foo() + if x, ok := v.(struct{ v int }); ok { + println(x.v) + } else { + println("Foo: not ok") + } + bar := foo.Bar() + if x, ok := bar.(struct{ V int }); ok { + println(x.V) + } else { + println("Bar: not ok") + } + if x, ok := foo.F().(struct{ v int }); ok { + println(x.v) + } else { + println("F: not ok") + } +} + +/* Expected output: +1 +1 +F: not ok +*/ diff --git a/internal/abi/llgo_autogen.lla b/internal/abi/llgo_autogen.lla index f2db6c47c870406a08b3db4d414614c40ae4f95c..0d23b976a79850e7f469d1bac1af16222eca398f 100644 GIT binary patch literal 5835 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 literal 5736 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 F@Lv?<5fuOc diff --git a/internal/abi/type.go b/internal/abi/type.go index e7ecaf8f..b43621a9 100644 --- a/internal/abi/type.go +++ b/internal/abi/type.go @@ -193,6 +193,21 @@ type FuncType struct { OutCount uint16 // top bit is set if last input parameter is ... } +// In returns the number of input parameters of a function type. +func (p *FuncType) In() int { + return int(p.InCount) +} + +// Out returns the number of output results of a function type. +func (p *FuncType) Out() int { + return int(p.OutCount &^ (1 << 15)) +} + +// Variadic reports whether the function type is variadic. +func (p *FuncType) Variadic() bool { + return p.OutCount&(1<<15) != 0 +} + type StructField struct { Name Name // name is always non-empty Typ *Type // type of field @@ -219,10 +234,10 @@ type Text = unsafe.Pointer // TODO(xsw): to be confirmed // Method on non-interface type type Method struct { - Name_ Name // name of method - Mtyp_ *Type // method type (without receiver) - Ifn_ Text // fn used in interface call (one-word receiver) - Tfn_ Text // fn used for normal method call + Name_ Name // name of method + Mtyp_ *FuncType // method type (without receiver) + Ifn_ Text // fn used in interface call (one-word receiver) + Tfn_ Text // fn used for normal method call } // UncommonType is present only for defined types or types with methods diff --git a/internal/runtime/llgo_autogen.lla b/internal/runtime/llgo_autogen.lla index 0de68c733155dbb4114f6665c33c1f2cacdc84ef..e2f90b846916d15002039bdd162880539e78866f 100644 GIT binary patch literal 10446 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