summaryrefslogtreecommitdiff
path: root/parser/type.go
diff options
context:
space:
mode:
authorMarc Vertes <mvertes@free.fr>2023-11-20 19:28:31 +0100
committerMarc Vertes <mvertes@free.fr>2023-11-20 19:28:31 +0100
commitae58deb5da1fa2ae5e461783ce592a9b962da778 (patch)
treede1d3bf4ce4ceea9c7386d191aecb6801b407ca0 /parser/type.go
parent6a0490257bf235d011004bc303306f617ac6ea31 (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.go9
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()
}