mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-05 15:18:49 +00:00
Fix big int shifts of 0
This commit is contained in:
@@ -554,6 +554,16 @@ void big_int_sub(BigInt *dst, BigInt const *x, BigInt const *y) {
|
|||||||
void big_int_shl(BigInt *dst, BigInt const *x, BigInt const *y) {
|
void big_int_shl(BigInt *dst, BigInt const *x, BigInt const *y) {
|
||||||
GB_ASSERT(!y->neg);
|
GB_ASSERT(!y->neg);
|
||||||
|
|
||||||
|
if (x->len == 0) {
|
||||||
|
big_int_from_u64(dst, 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (x->len == 1 && x->d.word == 0) {
|
||||||
|
big_int_from_u64(dst, 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (y->len == 0) {
|
if (y->len == 0) {
|
||||||
big_int_init(dst, x);
|
big_int_init(dst, x);
|
||||||
return;
|
return;
|
||||||
@@ -605,6 +615,10 @@ void big_int_shr(BigInt *dst, BigInt const *x, BigInt const *y) {
|
|||||||
big_int_from_u64(dst, 0);
|
big_int_from_u64(dst, 0);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (x->len == 1 && x->d.word == 0) {
|
||||||
|
big_int_from_u64(dst, 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (y->len == 0) {
|
if (y->len == 0) {
|
||||||
big_int_init(dst, x);
|
big_int_init(dst, x);
|
||||||
|
|||||||
@@ -712,6 +712,8 @@ bool is_type_numeric(Type *t) {
|
|||||||
t = base_type(t);
|
t = base_type(t);
|
||||||
if (t->kind == Type_Basic) {
|
if (t->kind == Type_Basic) {
|
||||||
return (t->Basic.flags & BasicFlag_Numeric) != 0;
|
return (t->Basic.flags & BasicFlag_Numeric) != 0;
|
||||||
|
} else if (t->kind == Type_Enum) {
|
||||||
|
return is_type_numeric(t->Enum.base_type);
|
||||||
}
|
}
|
||||||
// TODO(bill): Should this be here?
|
// TODO(bill): Should this be here?
|
||||||
if (t->kind == Type_Array) {
|
if (t->kind == Type_Array) {
|
||||||
|
|||||||
Reference in New Issue
Block a user