diff options
author | Nick Fitzgerald <fitzgen@gmail.com> | 2017-10-13 10:19:47 -0700 |
---|---|---|
committer | Nick Fitzgerald <fitzgen@gmail.com> | 2017-10-13 10:21:22 -0700 |
commit | 0068c1a79dba1751955d7e732f50f1250a66ee72 (patch) | |
tree | 7ad083ecc1e9289603d1f64e959a609d509b0b5a /src/codegen/mod.rs | |
parent | 52fe95165472b6c5947f8b8f74d3fc36789b1224 (diff) |
Handle unsigned integer constants greater than u32::MAX in codegen
We were not checking signed-ness and emitting the appropriate types.
Fixes #1040
Diffstat (limited to 'src/codegen/mod.rs')
-rw-r--r-- | src/codegen/mod.rs | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/codegen/mod.rs b/src/codegen/mod.rs index 38214054..ac28244c 100644 --- a/src/codegen/mod.rs +++ b/src/codegen/mod.rs @@ -478,7 +478,19 @@ impl CodeGenerator for Var { }); } VarType::Int(val) => { - let val = helpers::ast_ty::int_expr(val); + let int_kind = self.ty() + .into_resolver() + .through_type_aliases() + .through_type_refs() + .resolve(ctx) + .expect_type() + .as_integer() + .unwrap(); + let val = if int_kind.is_signed() { + helpers::ast_ty::int_expr(val) + } else { + helpers::ast_ty::uint_expr(val as _) + }; result.push(quote! { pub const #canonical_ident : #ty = #val ; }); |