diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2016-03-24 18:29:34 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2016-03-24 18:29:34 -0700 |
commit | e96cb9e2065a066ede10e3ce36eba828fd42a97b (patch) | |
tree | 7fb9c2476df5c2247cba513c307aeec689ed8cec /lib.c | |
parent | 4882a1c512a6d64ae8f6de2ed849033f8637cf90 (diff) | |
download | txr-e96cb9e2065a066ede10e3ce36eba828fd42a97b.tar.gz txr-e96cb9e2065a066ede10e3ce36eba828fd42a97b.tar.bz2 txr-e96cb9e2065a066ede10e3ce36eba828fd42a97b.zip |
Methods in time struct: time-local and time-utc.
* lib.c (time_local_s, time_utc_s): New symbol variables.
(time_meth): New static function.
(time_init): Initialize new symbol variables. Create the
time struct with two static slots, and initialize those
static slots to be methods.
* txr.1: Introduce "the epoch" term. Document the
new methods.
Diffstat (limited to 'lib.c')
-rw-r--r-- | lib.c | 32 |
1 files changed, 28 insertions, 4 deletions
@@ -113,7 +113,8 @@ val list_f, less_f, greater_f; val prog_string; -val time_s, year_s, month_s, day_s, hour_s, min_s, sec_s, dst_s; +val time_s, time_local_s, time_utc_s; +val year_s, month_s, day_s, hour_s, min_s, sec_s, dst_s; static val env_list; @@ -8989,9 +8990,27 @@ val make_time_utc(val year, val month, val day, return make_time_impl(pmktime, year, month, day, hour, minute, second, isdst); } +static val time_meth(val utc_p, val time_struct) +{ + val year = slot(time_struct, year_s); + val month = slot(time_struct, month_s); + val day = slot(time_struct, day_s); + val hour = slot(time_struct, hour_s); + val min = slot(time_struct, min_s); + val sec = slot(time_struct, sec_s); + val dst = slot(time_struct, dst_s); + + return (utc_p ? make_time_utc : make_time)(year, month, day, + hour, min, sec, dst); +} + static void time_init(void) { + val time_st; + time_s = intern(lit("time"), user_package); + time_local_s = intern(lit("time-local"), user_package); + time_utc_s = intern(lit("time-utc"), user_package); year_s = intern(lit("year"), user_package); month_s = intern(lit("month"), user_package); day_s = intern(lit("day"), user_package); @@ -9000,9 +9019,14 @@ static void time_init(void) sec_s = intern(lit("sec"), user_package); dst_s = intern(lit("dst"), user_package); - make_struct_type(time_s, nil, nil, - list(year_s, month_s, day_s, - hour_s, min_s, sec_s, dst_s, nao), nil, nil, nil, nil); + time_st = make_struct_type(time_s, nil, + list(time_local_s, time_utc_s, nao), + list(year_s, month_s, day_s, + hour_s, min_s, sec_s, dst_s, nao), + nil, nil, nil, nil); + + static_slot_set(time_st, time_local_s, func_f1(nil, time_meth)); + static_slot_set(time_st, time_utc_s, func_f1(t, time_meth)); } void init(const wchar_t *pn, mem_t *(*oom)(mem_t *, size_t), |