Skip to content

Commit 05a2682

Browse files
committed
Oops, WriteTo returns int64 not int
1 parent 551cdba commit 05a2682

File tree

1 file changed

+27
-26
lines changed

1 file changed

+27
-26
lines changed

tokenizer/token.go

Lines changed: 27 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -377,9 +377,9 @@ func (t *Token) Render() string {
377377
return buf.String()
378378
}
379379

380-
func stickyWriteString(n *int, err *error, w io.Writer, s string) {
380+
func stickyWriteString(n *int64, err *error, w io.Writer, s string) {
381381
n2, err2 := io.WriteString(w, s)
382-
*n += n2
382+
*n += int64(n2)
383383
if err2 != nil {
384384
if *err != nil {
385385
*err = err2
@@ -392,33 +392,36 @@ func stickyWriteString(n *int, err *error, w io.Writer, s string) {
392392
// to handle comment insertion rules.
393393
//
394394
// Tokens with type TokenError do not write anything.
395-
func (t *Token) WriteTo(w io.Writer) (n int, err error) {
395+
func (t *Token) WriteTo(w io.Writer) (n int64, err error) {
396396
switch t.Type {
397397
case TokenError:
398398
return
399399
case TokenEOF:
400400
return
401401
case TokenIdent:
402-
return io.WriteString(w, escapeIdentifier(t.Value))
402+
stickyWriteString(&n, &err, w, escapeIdentifier(t.Value))
403+
return
403404
case TokenAtKeyword:
404405
stickyWriteString(&n, &err, w, "@")
405406
stickyWriteString(&n, &err, w, escapeIdentifier(t.Value))
406407
return
407408
case TokenDelim:
408409
if t.Value == "\\" {
409410
// nb: should not happen, this is actually TokenBadEscape
410-
return io.WriteString(w, "\\\n")
411+
stickyWriteString(&n, &err, w, "\\\n")
411412
} else {
412-
return io.WriteString(w, t.Value)
413+
stickyWriteString(&n, &err, w, t.Value)
413414
}
415+
return
414416
case TokenHash:
415417
e := t.Extra.(*TokenExtraHash)
416-
io.WriteString(w, "#")
418+
stickyWriteString(&n, &err, w, "#")
417419
if e.IsIdentifier {
418-
return io.WriteString(w, escapeIdentifier(t.Value))
420+
stickyWriteString(&n, &err, w, escapeIdentifier(t.Value))
419421
} else {
420-
return io.WriteString(w, escapeHashName(t.Value))
422+
stickyWriteString(&n, &err, w, escapeHashName(t.Value))
421423
}
424+
return
422425
case TokenPercentage:
423426
stickyWriteString(&n, &err, w, t.Value)
424427
stickyWriteString(&n, &err, w, "%")
@@ -429,14 +432,16 @@ func (t *Token) WriteTo(w io.Writer) (n int, err error) {
429432
stickyWriteString(&n, &err, w, escapeDimension(e.Dimension))
430433
return
431434
case TokenString:
432-
return io.WriteString(w, escapeString(t.Value, '"'))
435+
stickyWriteString(&n, &err, w, escapeString(t.Value, '"'))
436+
return
433437
case TokenURI:
434438
stickyWriteString(&n, &err, w, "url(")
435439
stickyWriteString(&n, &err, w, escapeString(t.Value, '"'))
436440
stickyWriteString(&n, &err, w, ")")
437441
return
438442
case TokenUnicodeRange:
439-
return io.WriteString(w, t.Extra.String())
443+
stickyWriteString(&n, &err, w, t.Extra.String())
444+
return
440445
case TokenComment:
441446
stickyWriteString(&n, &err, w, "/*")
442447
stickyWriteString(&n, &err, w, t.Value)
@@ -447,7 +452,8 @@ func (t *Token) WriteTo(w io.Writer) (n int, err error) {
447452
stickyWriteString(&n, &err, w, "(")
448453
return
449454
case TokenBadEscape:
450-
return io.WriteString(w, "\\\n")
455+
stickyWriteString(&n, &err, w, "\\\n")
456+
return
451457
case TokenBadString:
452458
stickyWriteString(&n, &err, w, "\"")
453459
stickyWriteString(&n, &err, w, escapeString(t.Value, 0))
@@ -461,7 +467,8 @@ func (t *Token) WriteTo(w io.Writer) (n int, err error) {
461467
stickyWriteString(&n, &err, w, "\n)")
462468
return
463469
default:
464-
return io.WriteString(w, t.Value)
470+
stickyWriteString(&n, &err, w, t.Value)
471+
return
465472
}
466473
}
467474

@@ -475,10 +482,7 @@ type TokenRenderer struct {
475482

476483
// Write a token to the given io.Writer, potentially inserting an empty comment
477484
// in front based on what the previous token was.
478-
//
479-
// In the event of a writing error, the TokenRenderer is left in an
480-
// indeterminate state. (TODO: maybe fix that?)
481-
func (r *TokenRenderer) WriteTokenTo(w io.Writer, t Token) (n int, err error) {
485+
func (r *TokenRenderer) WriteTokenTo(w io.Writer, t Token) (n int64, err error) {
482486
var prevKey, curKey interface{}
483487
if r.lastToken.Type == TokenDelim {
484488
prevKey = r.lastToken.Value[0]
@@ -494,21 +498,18 @@ func (r *TokenRenderer) WriteTokenTo(w io.Writer, t Token) (n int, err error) {
494498
m1, ok := commentInsertionRules[prevKey]
495499
if ok {
496500
if m1[curKey] {
497-
n2, err2 := io.WriteString(w, "/**/")
498-
if err2 != nil {
499-
return n2, err2
500-
} else if n2 != 4 {
501-
return n2, io.ErrShortWrite
502-
} else {
503-
n += n2
504-
}
501+
stickyWriteString(&n, &err, w, "/**/")
505502
}
506503
}
507504

508505
n2, err2 := t.WriteTo(w)
509506
r.lastToken = t
507+
510508
n += n2
511-
return n, err2
509+
if err2 != nil && err == nil {
510+
err = err2
511+
}
512+
return n, err
512513
}
513514

514515
// CSS Syntax Level 3 - Section 9

0 commit comments

Comments
 (0)