summaryrefslogtreecommitdiff
path: root/src/codegen/helpers.rs
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2016-11-14 11:49:08 -0600
committerGitHub <noreply@github.com>2016-11-14 11:49:08 -0600
commitb7259deb35aae61d7d21875e3b3da55e3f4391cc (patch)
treedeb4de2b4964315e2ec62080a6a22d36208e56ae /src/codegen/helpers.rs
parentb2081ebf345bee86ad516cbb9c5710580a40cd49 (diff)
parent37c05b71299ec00bd2679c3df22fb6ca0cd0e371 (diff)
Auto merge of #245 - emilio:min, r=fitzgen
codegen: Special-case i64::MIN since it produces a overflow on aster. Proper fix on aster soon, still worth to get this in I guess. r? @fitzgen
Diffstat (limited to 'src/codegen/helpers.rs')
-rw-r--r--src/codegen/helpers.rs15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/codegen/helpers.rs b/src/codegen/helpers.rs
index 016ba478..6e5a6f0e 100644
--- a/src/codegen/helpers.rs
+++ b/src/codegen/helpers.rs
@@ -117,4 +117,19 @@ pub mod ast_ty {
}
}
}
+
+ pub fn int_expr(val: i64) -> P<ast::Expr> {
+ use std::i64;
+ let expr = aster::AstBuilder::new().expr();
+
+ // This is not representable as an i64 if it's negative, so we
+ // special-case it.
+ //
+ // Fix in aster incoming.
+ if val == i64::MIN {
+ expr.neg().uint(1u64 << 63)
+ } else {
+ expr.int(val)
+ }
+ }
}