Merge branch 'master' into bill/subtype-type-info

This commit is contained in:
gingerBill
2025-03-06 17:28:42 +00:00
4 changed files with 22 additions and 12 deletions

View File

@@ -5,13 +5,11 @@ Type representing a mononotic day number corresponding to a date.
Ordinal 1 = Midnight Monday, January 1, 1 A.D. (Gregorian)
| Midnight Monday, January 3, 1 A.D. (Julian)
Every other ordinal counts days forwards, starting from the above date.
*/
Ordinal :: i64
/*
*/
EPOCH :: Ordinal(1)
/*
Minimum valid value for date.

View File

@@ -98,7 +98,7 @@ This procedure takes the value of an ordinal and returns the day of week for
that ordinal.
*/
day_of_week :: proc "contextless" (ordinal: Ordinal) -> (day: Weekday) {
return Weekday((ordinal - EPOCH + 1) %% 7)
return Weekday(ordinal %% 7)
}
/*
@@ -349,8 +349,7 @@ the result is unspecified.
unsafe_date_to_ordinal :: proc "contextless" (date: Date) -> (ordinal: Ordinal) {
year_minus_one := date.year - 1
// Day before epoch
ordinal = EPOCH - 1
ordinal = 0
// Add non-leap days
ordinal += 365 * year_minus_one
@@ -382,17 +381,17 @@ This procedure returns the year and the day of the year of a given ordinal.
Of the ordinal is outside of its valid range, the result is unspecified.
*/
unsafe_ordinal_to_year :: proc "contextless" (ordinal: Ordinal) -> (year: i64, day_ordinal: i64) {
// Days after epoch
d0 := ordinal - EPOCH
// Correct for leap year cycle starting at day 1.
d0 := ordinal - 1
// Number of 400-year cycles and remainder
n400, d1 := divmod(d0, 146097)
n400, d1 := divmod(d0, 365*400 + 100 - 3)
// Number of 100-year cycles and remainder
n100, d2 := divmod(d1, 36524)
n100, d2 := divmod(d1, 365*100 + 25 - 1)
// Number of 4-year cycles and remainder
n4, d3 := divmod(d2, 1461)
n4, d3 := divmod(d2, 365*4 + 1)
// Number of remaining days
n1, d4 := divmod(d3, 365)

View File

@@ -863,6 +863,11 @@ gb_internal i64 check_distance_between_types(CheckerContext *c, Operand *operand
if (are_types_identical(vt, s)) {
return 1;
}
if (is_type_proc(vt)) {
if (are_types_identical(base_type(vt), src)) {
return 1;
}
}
}
if (dst->Union.variants.count == 1) {

View File

@@ -2645,6 +2645,10 @@ gb_internal void generate_minimum_dependency_set_internal(Checker *c, Entity *st
is_init = false;
}
if (is_blank_ident(e->token)) {
error(e->token, "An @(init) procedure must not use a blank identifier as its name");
}
if (is_init) {
add_dependency_to_set(c, e);
array_add(&c->info.init_procedures, e);
@@ -2667,6 +2671,10 @@ gb_internal void generate_minimum_dependency_set_internal(Checker *c, Entity *st
is_fini = false;
}
if (is_blank_ident(e->token)) {
error(e->token, "An @(fini) procedure must not use a blank identifier as its name");
}
if (is_fini) {
add_dependency_to_set(c, e);
array_add(&c->info.fini_procedures, e);