Fix cgen for token_writer.write_token
diff --git a/internal/cgen/builtin.go b/internal/cgen/builtin.go index a6676fc..753e758 100644 --- a/internal/cgen/builtin.go +++ b/internal/cgen/builtin.go
@@ -711,12 +711,28 @@ scratchName := fmt.Sprintf("self->private_data.%s%s[0].scratch", sPrefix, g.currFunk.astFunc.FuncName().Str(g.tm)) + args := n.Args() b.printf("%s = (((uint64_t)(", scratchName) - if err := g.writeExpr(b, n.Args()[0].AsArg().Value(), depth); err != nil { + if cv := args[0].AsArg().Value().ConstValue(); (cv == nil) || (cv.Sign() != 0) { + if err := g.writeExpr(b, args[0].AsArg().Value(), depth); err != nil { + return err + } + b.writes(")) << WUFFS_BASE__TOKEN__VALUE_MAJOR__SHIFT) | (((uint64_t)(") + } + + if err := g.writeExpr(b, args[1].AsArg().Value(), depth); err != nil { return err } - b.writes(")) << WUFFS_BASE__TOKEN__VLL__SHIFT) | (((uint64_t)(") - if err := g.writeExpr(b, n.Args()[1].AsArg().Value(), depth); err != nil { + b.writes(")) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) | (((uint64_t)(") + + if cv := args[2].AsArg().Value().ConstValue(); (cv == nil) || (cv.Sign() != 0) { + if err := g.writeExpr(b, args[2].AsArg().Value(), depth); err != nil { + return err + } + b.writes(")) << WUFFS_BASE__TOKEN__LINK__SHIFT) | (((uint64_t)(") + } + + if err := g.writeExpr(b, args[3].AsArg().Value(), depth); err != nil { return err } b.writes(")) << WUFFS_BASE__TOKEN__LENGTH__SHIFT);\n")