diff options
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), |