@@ -15,7 +15,7 @@ use driver::session;
15
15
use driver:: session:: Session ;
16
16
use lib:: llvm:: { ValueRef , BasicBlockRef , BuilderRef } ;
17
17
use lib:: llvm:: { True , False , Bool } ;
18
- use lib:: llvm:: { llvm} ;
18
+ use lib:: llvm:: llvm;
19
19
use lib;
20
20
use middle:: lang_items:: LangItem ;
21
21
use middle:: trans:: base;
@@ -28,24 +28,43 @@ use middle::ty::substs;
28
28
use middle:: ty;
29
29
use middle:: typeck;
30
30
use middle:: borrowck:: root_map_key;
31
- use util:: ppaux:: { Repr } ;
31
+ use util:: ppaux:: Repr ;
32
32
33
33
use middle:: trans:: type_:: Type ;
34
34
35
35
use std:: c_str:: ToCStr ;
36
36
use std:: cast:: transmute;
37
37
use std:: cast;
38
- use std:: hashmap:: { HashMap } ;
38
+ use std:: hashmap:: HashMap ;
39
39
use std:: libc:: { c_uint, c_longlong, c_ulonglong, c_char} ;
40
40
use std:: vec;
41
- use syntax:: ast:: { Name , Ident } ;
41
+ use syntax:: ast:: { Name , Ident } ;
42
42
use syntax:: ast_map:: { path, path_elt, path_pretty_name} ;
43
43
use syntax:: codemap:: Span ;
44
44
use syntax:: parse:: token;
45
45
use syntax:: { ast, ast_map} ;
46
46
47
47
pub use middle:: trans:: context:: CrateContext ;
48
48
49
+ fn type_is_newtype_immediate ( cx : ty:: ctxt , ty : ty:: t ) -> bool {
50
+ match ty:: get ( ty) . sty {
51
+ ty:: ty_struct( def_id, ref substs) => {
52
+ let fields = ty:: struct_fields ( cx, def_id, substs) ;
53
+ fields. len ( ) == 1 &&
54
+ fields[ 0 ] . ident . name == token:: special_idents:: unnamed_field. name &&
55
+ type_is_immediate ( cx, fields[ 0 ] . mt . ty )
56
+ }
57
+ _ => false
58
+ }
59
+ }
60
+
61
+ pub fn type_is_immediate ( cx : ty:: ctxt , ty : ty:: t ) -> bool {
62
+ ty:: type_is_scalar ( ty) || ty:: type_is_boxed ( ty) ||
63
+ ty:: type_is_unique ( ty) || ty:: type_is_region_ptr ( ty) ||
64
+ type_is_newtype_immediate ( cx, ty) ||
65
+ ty:: type_is_simd ( cx, ty)
66
+ }
67
+
49
68
pub fn gensym_name ( name : & str ) -> ( Ident , path_elt ) {
50
69
let name = token:: gensym ( name) ;
51
70
let ident = Ident :: new ( name) ;
0 commit comments