summaryrefslogtreecommitdiff
path: root/src/codegen/mod.rs
diff options
context:
space:
mode:
authorNick Fitzgerald <fitzgen@gmail.com>2017-10-13 10:19:47 -0700
committerNick Fitzgerald <fitzgen@gmail.com>2017-10-13 10:21:22 -0700
commit0068c1a79dba1751955d7e732f50f1250a66ee72 (patch)
tree7ad083ecc1e9289603d1f64e959a609d509b0b5a /src/codegen/mod.rs
parent52fe95165472b6c5947f8b8f74d3fc36789b1224 (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.rs14
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 ;
});