aboutsummaryrefslogtreecommitdiff
path: root/src/comp/middle
diff options
context:
space:
mode:
Diffstat (limited to 'src/comp/middle')
-rw-r--r--src/comp/middle/trans.rs21
-rw-r--r--src/comp/middle/typeck.rs3
2 files changed, 24 insertions, 0 deletions
diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs
index 9bc1f19c..f7ee82f6 100644
--- a/src/comp/middle/trans.rs
+++ b/src/comp/middle/trans.rs
@@ -529,6 +529,27 @@ impure fn trans_lit(@block_ctxt cx, &ast.lit lit) -> result {
case (ast.lit_uint(?u)) {
ret res(cx, C_int(u as int));
}
+ case (ast.lit_mach_int(?tm, ?i)) {
+ // FIXME: the entire handling of mach types falls apart
+ // if target int width is larger than host, at the moment;
+ // re-do the mach-int types using 'big' when that works.
+ auto t = T_int();
+ alt (tm) {
+ case (common.ty_u8) { t = T_i8(); }
+ case (common.ty_u16) { t = T_i16(); }
+ case (common.ty_u32) { t = T_i32(); }
+ case (common.ty_u64) { t = T_i64(); }
+
+ case (common.ty_i8) { t = T_i8(); }
+ case (common.ty_i16) { t = T_i16(); }
+ case (common.ty_i32) { t = T_i32(); }
+ case (common.ty_i64) { t = T_i64(); }
+ case (_) {
+ cx.fcx.ccx.sess.bug("bad mach int literal type");
+ }
+ }
+ ret res(cx, C_integral(i, t));
+ }
case (ast.lit_char(?c)) {
ret res(cx, C_integral(c as int, T_char()));
}
diff --git a/src/comp/middle/typeck.rs b/src/comp/middle/typeck.rs
index e8ae94fa..4bbf3cf4 100644
--- a/src/comp/middle/typeck.rs
+++ b/src/comp/middle/typeck.rs
@@ -944,6 +944,9 @@ fn check_lit(@ast.lit lit) -> @ty {
case (ast.lit_char(_)) { sty = ty_char; }
case (ast.lit_int(_)) { sty = ty_int; }
case (ast.lit_uint(_)) { sty = ty_uint; }
+ case (ast.lit_mach_int(?tm, _)) {
+ sty = ty_machine(tm);
+ }
case (ast.lit_nil) { sty = ty_nil; }
case (ast.lit_bool(_)) { sty = ty_bool; }
}