diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2017-09-02 13:34:24 +0200 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2017-09-02 13:44:28 +0200 |
| commit | 08c91ab698c91dc4b8fbc597c03ac1ca10eb403c (patch) | |
| tree | 25b21743f0dea4e0910c69b2c91aac8aedc6c131 /pkg | |
| parent | 9c995bedad0e93426b278929ab46f5fbab130b14 (diff) | |
sys: support ptr64 type
ptr64 is like ptr, but always takes 8 bytes of space.
Needed for some APIs. Unfortunately, most of these APIs
use buffer type, so we can't use ptr64 immidiately.
Diffstat (limited to 'pkg')
| -rw-r--r-- | pkg/compiler/testdata/errors.txt | 4 | ||||
| -rw-r--r-- | pkg/compiler/types.go | 6 |
2 files changed, 9 insertions, 1 deletions
diff --git a/pkg/compiler/testdata/errors.txt b/pkg/compiler/testdata/errors.txt index d5a596457..68c9895bf 100644 --- a/pkg/compiler/testdata/errors.txt +++ b/pkg/compiler/testdata/errors.txt @@ -133,6 +133,10 @@ s6 { f1 int8 } [align_foo] ### bad struct s6 alignment foo +s7 { + f1 ptr64[in, int32] +} + u3 [ f1 int8 f2 int32 diff --git a/pkg/compiler/types.go b/pkg/compiler/types.go index 710bc1b60..de663f61e 100644 --- a/pkg/compiler/types.go +++ b/pkg/compiler/types.go @@ -74,11 +74,15 @@ var typeInt = &typeDesc{ } var typePtr = &typeDesc{ - Names: []string{"ptr"}, + Names: []string{"ptr", "ptr64"}, CanBeArg: true, Args: []namedArg{{"direction", typeArgDir}, {"type", typeArgType}}, Gen: func(comp *compiler, t *ast.Type, args []*ast.Type, base sys.IntTypeCommon) sys.Type { base.ArgDir = sys.DirIn // pointers are always in + base.TypeSize = comp.ptrSize + if t.Ident == "ptr64" { + base.TypeSize = 8 + } return &sys.PtrType{ TypeCommon: base.TypeCommon, Type: comp.genType(args[1], "", genDir(args[0]), false), |
