From 3c02a4608b425d9e73bc21b65dbb723f1dfd78c5eb34955052013d43ea720895 Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Tue, 15 Apr 2025 11:09:08 +0300 Subject: [PATCH] Do not forcefully convert to TAI --- go/cmd/pp/tcl.go | 2 +- tcl/keks.tcl | 20 ++++++++++---------- tcl/mk-fuzz-inputs | 2 +- tcl/test-vector.tcl | 8 ++++---- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/go/cmd/pp/tcl.go b/go/cmd/pp/tcl.go index b739d2c..aeb0daa 100644 --- a/go/cmd/pp/tcl.go +++ b/go/cmd/pp/tcl.go @@ -38,7 +38,7 @@ func tclTAI(t time.Time, ns int, as uint64) { if isLeap || year > 9999 { fmt.Printf("TAI64 %d %d %d", t.Unix(), ns, as) } else { - fmt.Printf("TAI64 [UTCFromISO \"%s\"] %d %d", + fmt.Printf("TAI64 [ToTAI [ISOToSec \"%s\"]] %d %d", utc.Format("2006-01-02 15:04:05"), ns, as) } } diff --git a/tcl/keks.tcl b/tcl/keks.tcl index b0255e9..64600ef 100755 --- a/tcl/keks.tcl +++ b/tcl/keks.tcl @@ -224,7 +224,8 @@ proc BLOB {chunkLen v} { } } -proc UTCFromISO {v} { +# v is a "2006-01-02 15:04:05"-formatted string that is converted to seconds. +proc ISOToSec {v} { return [clock scan $v -format {%Y-%m-%d %H:%M:%S} -gmt 1] } @@ -259,12 +260,12 @@ variable Leapsecs { } for {set i 0} {$i < [llength $Leapsecs]} {incr i} { set v [lindex $Leapsecs $i] - set v [UTCFromISO "$v-01 00:00:00"] + set v [ISOToSec "$v-01 00:00:00"] set v [expr {$v + 10 + $i}] lset Leapsecs $i $v } -proc toTAI64 {v} { +proc ToTAI {v} { variable Leapsecs set i 0 for {} {$i < [llength $Leapsecs]} {incr i} { @@ -279,30 +280,29 @@ proc toTAI64 {v} { if {$v == [lindex $Leapsecs $i]} { incr v } - set v [expr {$v + (1<<62)}] - upvar buf buf - toBE 8 $v + return $v } proc TAI64 {v {n 0} {a 0}} { upvar buf buf + set v [expr {$v + (1<<62)}] if {$a != 0} { char [expr 0x1A] - toTAI64 $v + toBE 8 $v toBE 4 $n toBE 4 $a } elseif {$n != 0} { char [expr 0x19] - toTAI64 $v + toBE 8 $v toBE 4 $n } else { char [expr 0x18] - toTAI64 $v + toBE 8 $v } } namespace export EOC NIL FALSE TRUE HEXLET MAGIC INT STR BIN RAW -namespace export TAI64 UTCFromISO +namespace export TAI64 ToTAI ISOToSec namespace export LIST MAP SET LenFirstSort BLOB } diff --git a/tcl/mk-fuzz-inputs b/tcl/mk-fuzz-inputs index 54667e5..3771b88 100755 --- a/tcl/mk-fuzz-inputs +++ b/tcl/mk-fuzz-inputs @@ -26,7 +26,7 @@ dump 'LIST {NIL}' >list-nil dump 'LIST {TRUE FALSE}' >list-bool dump 'MAP {}' >map-empty dump 'MAP {a {LIST {NIL}}}' >map-foo -dump 'TAI64 [UTCFromISO "1970-01-01 00:00:00"]' >tai-utc0 +dump 'TAI64 [ToTAI [ISOToSec "1970-01-01 00:00:00"]]' >tai-utc0 dump 'TAI64 -11' >tai-before dump 'RAW [binary decode hex "1840000000586846A4"]' >tai-leap dump 'TAI64 1234 1234' >tai-ns diff --git a/tcl/test-vector.tcl b/tcl/test-vector.tcl index f63b061..8ee7fe0 100644 --- a/tcl/test-vector.tcl +++ b/tcl/test-vector.tcl @@ -61,10 +61,10 @@ MAP { {RAW [binary decode hex "180000000000000000"]} }} dates {LIST { - {TAI64 1234567890} - {TAI64 1234567890 456000} - {TAI64 1234567890 456789} - {TAI64 1234567890 456789 123456789} + {TAI64 [ToTAI 1234567890]} + {TAI64 [ToTAI 1234567890] 456000} + {TAI64 [ToTAI 1234567890] 456789} + {TAI64 [ToTAI 1234567890] 456789 123456789} }} uuid {HEXLET 0e875e3f-d385-49eb-87b4-be42d641c367} ip {HEXLET 2001:0db8:85a3:08d3:1319:8a2e:0370:7348} -- 2.48.1