diff options
| author | Marc Vertes <mvertes@free.fr> | 2023-11-20 19:28:31 +0100 |
|---|---|---|
| committer | Marc Vertes <mvertes@free.fr> | 2023-11-20 19:28:31 +0100 |
| commit | ae58deb5da1fa2ae5e461783ce592a9b962da778 (patch) | |
| tree | de1d3bf4ce4ceea9c7386d191aecb6801b407ca0 /parser/type.go | |
| parent | 6a0490257bf235d011004bc303306f617ac6ea31 (diff) | |
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.
Diffstat (limited to 'parser/type.go')
| -rw-r--r-- | parser/type.go | 9 |
1 files changed, 8 insertions, 1 deletions
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() } |
