1. 30 Apr, 2019 1 commit
    • Paul Eggert's avatar
      Fix decode-time/encode-time roundtrip on macOS · 325f51c8
      Paul Eggert authored
      * src/timefns.c (Fencode_time): Ignore DST flag when the zone is
      numeric or is a cons, as the doc string says it’s ignored in that
      case, and not ignoring it causes encode-time to not invert
      decode-time on some platforms (Bug#35502).
      * test/src/timefns-tests.el (encode-time-dst-numeric-zone):
      New test.
      325f51c8
  2. 01 Jan, 2019 1 commit
    • Paul Eggert's avatar
      Update more copyright years · a04bf151
      Paul Eggert authored
      Update some other copyright years automatically, by running:
      Run 'UPDATE_COPYRIGHT_YEAR=2019 \
      UPDATE_COPYRIGHT_USE_INTERVALS=1 \
      UPDATE_COPYRIGHT_MAX_LINE_LENGTH=79 admin/update-copyright'
      followed by 'admin/merge-gnulib'.
      a04bf151
  3. 07 Oct, 2018 3 commits
    • Paul Eggert's avatar
      Improvements on (TICKS . HZ) · 3cc45232
      Paul Eggert authored
      This patch is in response to Eli's review (Bug#32902#10).
      * src/systime.c: Doc strings of affected functions now refer
      to format-time-string instead of to Lisp manual, and
      format-time-string's doc string covers time values.
      * test/src/systime-tests.el (format-time-string-with-zone):
      Check decode-time too.
      (decode-then-encode-time, time-arith-tests): New tests.
      3cc45232
    • Paul Eggert's avatar
      New (TICKS . HZ) timestamp format · 93fe4209
      Paul Eggert authored
      This follows on a suggestion by Stefan Monnier in:
      https://lists.gnu.org/r/emacs-devel/2018-08/msg00991.html
      (Bug#32902).
      * doc/lispref/buffers.texi (Modification Time):
      * doc/lispref/os.texi (Processor Run Time, Time Calculations)
      * doc/lispref/processes.texi (System Processes):
      * doc/lispref/text.texi (Undo):
      Let the "Time of Day" section cover timestamp format details.
      * doc/lispref/os.texi (Time of Day):
      Say that timestamp internal format should not be assumed.
      Document new (ticks . hz) format.  Omit mention of seconds-to-time
      since it is now just an alias for encode-time.
      (Time Conversion): Document encode-time extension.
      * etc/NEWS: Mention changes.
      * lisp/calendar/cal-dst.el (calendar-system-time-basis): Now const.
      * lisp/calendar/cal-dst.el (calendar-absolute-from-time)
      (calendar-time-from-absolute)
      (calendar-next-time-zone-transition):
      * lisp/emacs-lisp/timer.el (timer-next-integral-multiple-of-time):
      Simplify by using bignums, (TICKS . HZ), and new encode-time.
      * lisp/emacs-lisp/timer.el (timer-next-integral-multiple-of-time):
      Simplify by using bignums and new encode-time.
      * lisp/calendar/parse-time.el (parse-iso8601-time-string):
      Handle DST more accurately, by using new encode-time.
      * lisp/calendar/time-date.el (seconds-to-time):
      * lisp/calendar/timeclock.el (timeclock-seconds-to-time):
      Now just an alias for encode-time.
      * lisp/calendar/time-date.el (days-to-time):
      * lisp/emacs-lisp/timer.el (timer--time-setter):
      * lisp/net/ntlm.el (ntlm-compute-timestamp):
      * lisp/obsolete/vc-arch.el (vc-arch-add-tagline):
      * lisp/org/org-id.el (org-id-uuid, org-id-time-to-b36):
      * lisp/tar-mode (tar-octal-time):
      Don't assume timestamps default to list form.
      * lisp/tar-mode.el (tar-parse-octal-long-integer):
      Now an obsolete alias for tar-parse-octal-integer.
      * src/keyboard.c (decode_timer): Adjust to changes to
      time decoding functions elsewhere.
      * src/timefns.c: Include bignum.h, limits.h.
      (FASTER_TIMEFNS): New macro.
      (WARN_OBSOLETE_TIMESTAMPS, CURRENT_TIME_LIST)
      (timespec_hz, trillion, ztrillion):
      New constants.
      (make_timeval): Use TIME_T_MAX instead of its definiens.
      (check_time_validity, time_add, time_subtract):
      Remove.  All uses removed.
      (disassemble_lisp_time): Remove; old code now folded into
      decode_lisp_time.  All callers changed.
      (invalid_hz, s_ns_to_double, ticks_hz_list4, mpz_set_time)
      (timespec_mpz, timespec_ticks, time_hz_ticks)
      (lisp_time_hz_ticks, lisp_time_seconds)
      (time_form_stamp, lisp_time_form_stamp, decode_ticks_hz)
      (decode_lisp_time, mpz_time, list4_to_timespec):
      New functions.
      (decode_float_time, decode_time_components, lisp_to_timespec):
      Adjust to new struct lisp_time, which does not lose
      information like the old one did.
      (enum timeform): New enum.
      (decode_time_components): New arg FORM.  All callers changed.
      RESULT and DRESULT are now mutually exclusive; no callers need
      to change because of this.
      (decode_time_components, lisp_time_struct)
      (lisp_seconds_argument, time_arith, make_lisp_time, Ffloat_time)
      (Fencode_time):
      Add support for (TICKS . HZ) form.
      (DECODE_SECS_ONLY): New constant.
      (lisp_time_struct): 2nd arg is now enum timeform, not int.
      All callers changed.
      (check_tm_member): Support bignums.m
      (Fencode_time): Add new two-arg functionality.
      * src/systime.h (struct lisp_time): Now ticks+hz rather than
      hi+lo+us+ps, since ticks+hz does not lose info.
      * test/src/systime-tests.el (time-equal-p-nil-nil):
      New test.
      93fe4209
    • Paul Eggert's avatar
      Move timestamp-related stuff to timefns.c · b5d08da1
      Paul Eggert authored
      This does not change behavior; it’s just long-overdue
      refactoring (Bug#32902).
      * src/emacs.c (main): Call init_timefns, syms_of_timefns.
      * src/timefns.c: New file, containing timestamp-related stuff
      from editfns.c and sysdep.c.
      * src/Makefile.in (base_obj): Add timefns.o.
      * src/editfns.c: Simplify by moving a big chunk to timefns.c.
      Do not include systime.h, sys/resource.h, sys/param.h,
      strftime.h, coding.h.
      (HAVE_TZALLOC_BUG, TM_YEAR_BASE, HAVE_TM_GMTOFF, tzeqlen)
      (local_tz, utc_tz, emacs_localtime_rz, emacs_mktime_z)
      (invalid_time_zone_specification, xtzfree, tzlookup)
      (TIME_T_MIN, TIME_T_MAX, time_overflow, invalid_time)
      (check_time_validity, hi_time, lo_time, Fcurrent_time)
      (time_add, time_subtract, time_arith, Ftime_add)
      (Ftime_subtract, Ftime_less_p, Fget_internal_run_time)
      (make_lisp_time, disassemble_lisp_time, decode_float_time)
      (lisp_to_timespec, lisp_time_struct, lisp_time_argument)
      (lisp_seconds_argument, Ffloat_time, emacs_nmemftime)
      (Fformat_time_string, format_time_string, Fdecode_time)
      (check_tm_member, Fencode_time, Fcurrent_time_string)
      (tm_gmtoff, Fcurrent_time_zone, Fset_time_zone_rule)
      (emacs_getenv_TZ, emacs_setenv_TZ): Move to timefns.c.
      * src/emacs.c (main): Adjust to initialization changes.
      * src/sysdep.c: Include <sys/resource.h> if it's present.
      Regularize includes a bit.
      (Fget_internal_run_time): Move here from editfns.c.
      (init_timefns, syms_of_timefns): New functions.
      * src/w32.h (w32_get_internal_run_time): Move decl here
      so that it need not be cloned.
      * test/src/editfns-tests.el:
      * test/src/editfns-tests.el (format-time-string-with-zone)
      (format-time-string-with-outlandish-zone)
      (editfns-tests--have-leap-seconds)
      (format-time-string-with-bignum-on-32-bit):
      Move to ...
      * test/src/timefns-tests.el: ... this new file.
      b5d08da1