From a80e003ede2c3a4ea3496cc6ae674a0055752cb0 Mon Sep 17 00:00:00 2001 From: mertcandav Date: Fri, 16 Feb 2024 15:30:39 +0300 Subject: [PATCH] sema: fix enum field value processing --- std/jule/sema/sema.jule | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/std/jule/sema/sema.jule b/std/jule/sema/sema.jule index 0e7eb94fe..b054c05d8 100644 --- a/std/jule/sema/sema.jule +++ b/std/jule/sema/sema.jule @@ -580,24 +580,20 @@ impl Sema { dc.check() } - fn check_generic_quantity(mut self, required: int, given: int, error_token: Token): (ok: bool) { + fn check_generic_quantity(mut self, required: int, given: int, token: Token): (ok: bool) { match { | required == 0 && given > 0: - self.push_err(error_token, LogMsg.NotHasGenerics) + self.push_err(token, LogMsg.NotHasGenerics) ret false - | required > 0 && given == 0: - self.push_err(error_token, LogMsg.HasGenerics) + self.push_err(token, LogMsg.HasGenerics) ret false - | required < given: - self.push_err(error_token, LogMsg.GenericsOverflow) + self.push_err(token, LogMsg.GenericsOverflow) ret false - | required > given: - self.push_err(error_token, LogMsg.MissingGenerics) + self.push_err(token, LogMsg.MissingGenerics) ret false - |: ret true } @@ -1201,19 +1197,23 @@ impl Sema { } fn check_enum_items_int(mut &self, mut &e: &Enum) { - let mut max = u64(types::max(e.kind.kind.prim().to_str())) + let prim = e.kind.kind.prim() + let mut max = u64(types::max(prim.to_str())) for (i, mut item) in e.items { if max == 0 { self.push_err(item.token, LogMsg.OverflowLimits) } else { max-- } - if item.auto_expr() { item.value = &Value{ - data: &Data{ - constant: Const.new_u64(max - (max - u64(i))), - }, + data: new(Data), + } + match { + | types::is_sig_int(prim.to_str()): + item.value.data.constant = Const.new_i64(i64(max - (max - u64(i)))) + |: + item.value.data.constant = Const.new_u64(max - (max - u64(i))) } item.value.data.model = item.value.data.constant } else {