aboutsummaryrefslogtreecommitdiffstats
path: root/prog/encoding.go
diff options
context:
space:
mode:
Diffstat (limited to 'prog/encoding.go')
-rw-r--r--prog/encoding.go10
1 files changed, 4 insertions, 6 deletions
diff --git a/prog/encoding.go b/prog/encoding.go
index 92e2c47f0..c968fa0b7 100644
--- a/prog/encoding.go
+++ b/prog/encoding.go
@@ -85,8 +85,8 @@ func (a *ConstArg) serialize(ctx *serializer) {
}
func (a *PointerArg) serialize(ctx *serializer) {
- if a.IsNull() {
- ctx.printf("0x0")
+ if a.IsSpecial() {
+ ctx.printf("0x%x", a.Address)
return
}
target := ctx.target
@@ -345,10 +345,8 @@ func (target *Target) parseArgInt(typ Type, p *parser) (Arg, error) {
case *ResourceType:
return MakeResultArg(typ, nil, v), nil
case *PtrType, *VmaType:
- if typ.Optional() {
- return MakeNullPointerArg(typ), nil
- }
- return typ.makeDefaultArg(), nil
+ index := -v % uint64(len(target.SpecialPointers))
+ return MakeSpecialPointerArg(typ, index), nil
default:
eatExcessive(p, true)
return typ.makeDefaultArg(), nil