From ae58deb5da1fa2ae5e461783ce592a9b962da778 Mon Sep 17 00:00:00 2001 From: Marc Vertes Date: Mon, 20 Nov 2023 19:28:31 +0100 Subject: parser: add pointer support (work in progress) This is incomplete because the scalar variables are not addressable right now. To be addressable they must be represented as reflect values, not interfaces. --- parser/type.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'parser/type.go') diff --git a/parser/type.go b/parser/type.go index 573ae6f..31af1e3 100644 --- a/parser/type.go +++ b/parser/type.go @@ -51,6 +51,13 @@ func (p *Parser) ParseTypeExpr(in Tokens) (typ reflect.Type, err error) { } return reflect.SliceOf(typ), nil + case lang.Mul: + typ, err := p.ParseTypeExpr(in[1:]) + if err != nil { + return nil, err + } + return reflect.PointerTo(typ), nil + case lang.Func: // Get argument and return token positions depending on function pattern: // method with receiver, named function or anonymous closure. @@ -165,7 +172,7 @@ func (p *Parser) parseParamTypes(in Tokens, flag typeFlag) (types []reflect.Type func (p *Parser) addSymVar(index int, name string, typ reflect.Type, flag typeFlag, local bool) { var zv any = reflect.New(typ).Elem() switch typ.Kind() { - case reflect.Struct, reflect.Array, reflect.Slice: + case reflect.Struct, reflect.Array, reflect.Slice, reflect.Pointer: default: zv = zv.(reflect.Value).Interface() } -- cgit v1.2.3