about summary refs log tree commit diff
diff options
context:
space:
mode:
authorKeegan McAllister <kmcallister@mozilla.com>2014-09-28 09:25:48 -0700
committerKeegan McAllister <kmcallister@mozilla.com>2014-09-28 09:25:48 -0700
commit8826fdfe37a7cbf901ddced1d7e2b4320e117461 (patch)
tree57de8f22e51d09f717d60361bcf4049aa5ec4de9
parent9d60de93e2c5af1b69201b5e3bcf8943ae5df664 (diff)
downloadrust-8826fdfe37a7cbf901ddced1d7e2b4320e117461.tar.gz
rust-8826fdfe37a7cbf901ddced1d7e2b4320e117461.zip
Keep ExpnId abstract by providing conversions
-rw-r--r--mk/crates.mk2
-rw-r--r--src/librustc/back/write.rs2
-rw-r--r--src/librustc/middle/trans/asm.rs2
-rw-r--r--src/libsyntax/ast.rs4
-rw-r--r--src/libsyntax/codemap.rs16
-rw-r--r--src/libsyntax/ext/asm.rs2
-rw-r--r--src/libsyntax/lib.rs1
7 files changed, 21 insertions, 8 deletions
diff --git a/mk/crates.mk b/mk/crates.mk
index ed3fce775f3..9f01ff23c7f 100644
--- a/mk/crates.mk
+++ b/mk/crates.mk
@@ -71,7 +71,7 @@ DEPS_graphviz := std
 DEPS_green := std native:context_switch
 DEPS_rustuv := std native:uv native:uv_support
 DEPS_native := std
-DEPS_syntax := std term serialize log fmt_macros debug arena
+DEPS_syntax := std term serialize log fmt_macros debug arena libc
 DEPS_rustc := syntax flate arena serialize getopts rbml \
               time log graphviz debug rustc_llvm rustc_back
 DEPS_rustc_llvm := native:rustllvm libc std
diff --git a/src/librustc/back/write.rs b/src/librustc/back/write.rs
index 8e703d954f3..7b4d1780ccd 100644
--- a/src/librustc/back/write.rs
+++ b/src/librustc/back/write.rs
@@ -345,7 +345,7 @@ unsafe extern "C" fn inline_asm_handler(diag: SMDiagnosticRef,
 
     match cgcx.lto_ctxt {
         Some((sess, _)) => {
-            sess.codemap().with_expn_info(ExpnId(cookie as u32), |info| match info {
+            sess.codemap().with_expn_info(ExpnId::from_llvm_cookie(cookie), |info| match info {
                 Some(ei) => sess.span_err(ei.call_site, msg.as_slice()),
                 None     => sess.err(msg.as_slice()),
             });
diff --git a/src/librustc/middle/trans/asm.rs b/src/librustc/middle/trans/asm.rs
index b4c10c78db8..c51e2420262 100644
--- a/src/librustc/middle/trans/asm.rs
+++ b/src/librustc/middle/trans/asm.rs
@@ -149,7 +149,7 @@ pub fn trans_inline_asm<'blk, 'tcx>(bcx: Block<'blk, 'tcx>, ia: &ast::InlineAsm)
         let kind = llvm::LLVMGetMDKindIDInContext(bcx.ccx().llcx(),
             key.as_ptr() as *const c_char, key.len() as c_uint);
 
-        let val: llvm::ValueRef = C_i32(bcx.ccx(), ia.expn_id as i32);
+        let val: llvm::ValueRef = C_i32(bcx.ccx(), ia.expn_id.to_llvm_cookie());
 
         llvm::LLVMSetMetadata(r, kind,
             llvm::LLVMMDNodeInContext(bcx.ccx().llcx(), &val, 1));
diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs
index 43d6b9b9e90..0fee3ff3218 100644
--- a/src/libsyntax/ast.rs
+++ b/src/libsyntax/ast.rs
@@ -10,7 +10,7 @@
 
 // The Rust abstract syntax tree.
 
-use codemap::{Span, Spanned, DUMMY_SP};
+use codemap::{Span, Spanned, DUMMY_SP, ExpnId};
 use abi::Abi;
 use ast_util;
 use owned_slice::OwnedSlice;
@@ -984,7 +984,7 @@ pub struct InlineAsm {
     pub volatile: bool,
     pub alignstack: bool,
     pub dialect: AsmDialect,
-    pub expn_id: u32,
+    pub expn_id: ExpnId,
 }
 
 /// represents an argument in a function header
diff --git a/src/libsyntax/codemap.rs b/src/libsyntax/codemap.rs
index d44de7862a3..e9b2556c53e 100644
--- a/src/libsyntax/codemap.rs
+++ b/src/libsyntax/codemap.rs
@@ -26,6 +26,7 @@ source code snippets, etc.
 use serialize::{Encodable, Decodable, Encoder, Decoder};
 use std::cell::RefCell;
 use std::rc::Rc;
+use libc::c_uint;
 
 pub trait Pos {
     fn from_uint(n: uint) -> Self;
@@ -223,11 +224,22 @@ pub struct ExpnInfo {
     pub callee: NameAndSpan
 }
 
-#[deriving(PartialEq, Eq, Clone, Show, Hash)]
-pub struct ExpnId(pub u32);
+#[deriving(PartialEq, Eq, Clone, Show, Hash, Encodable, Decodable)]
+pub struct ExpnId(u32);
 
 pub static NO_EXPANSION: ExpnId = ExpnId(-1);
 
+impl ExpnId {
+    pub fn from_llvm_cookie(cookie: c_uint) -> ExpnId {
+        ExpnId(cookie as u32)
+    }
+
+    pub fn to_llvm_cookie(self) -> i32 {
+        let ExpnId(cookie) = self;
+        cookie as i32
+    }
+}
+
 pub type FileName = String;
 
 pub struct FileLines {
diff --git a/src/libsyntax/ext/asm.rs b/src/libsyntax/ext/asm.rs
index f82fe4b13a2..702be0c0eee 100644
--- a/src/libsyntax/ext/asm.rs
+++ b/src/libsyntax/ext/asm.rs
@@ -199,7 +199,7 @@ pub fn expand_asm<'cx>(cx: &'cx mut ExtCtxt, sp: Span, tts: &[ast::TokenTree])
         }
     }
 
-    let codemap::ExpnId(expn_id) = cx.codemap().record_expansion(codemap::ExpnInfo {
+    let expn_id = cx.codemap().record_expansion(codemap::ExpnInfo {
         call_site: sp,
         callee: codemap::NameAndSpan {
             name: "asm".to_string(),
diff --git a/src/libsyntax/lib.rs b/src/libsyntax/lib.rs
index 7a504d22c1e..a4271544146 100644
--- a/src/libsyntax/lib.rs
+++ b/src/libsyntax/lib.rs
@@ -33,6 +33,7 @@ extern crate debug;
 #[phase(plugin, link)] extern crate log;
 extern crate serialize;
 extern crate term;
+extern crate libc;
 
 pub mod util {
     pub mod interner;