@@ -2444,61 +2444,30 @@ fn move_val_if_temp(cx: @block_ctxt, action: copy_action, dst: ValueRef,
2444
2444
}
2445
2445
2446
2446
fn trans_lit_istr ( cx : & @block_ctxt , s : str ) -> result {
2447
- let llstackpart = alloca ( cx, T_ivec ( T_i8 ( ) ) ) ;
2448
- let len = str:: byte_len ( s) ;
2449
-
2450
- let bcx;
2451
- if len < 3 u { // 3 because of the \0
2452
- cx. build . Store ( C_uint ( len + 1 u) ,
2453
- cx. build . InBoundsGEP ( llstackpart,
2454
- [ C_int ( 0 ) , C_int ( 0 ) ] ) ) ;
2455
- cx. build . Store ( C_int ( 4 ) ,
2456
- cx. build . InBoundsGEP ( llstackpart,
2457
- [ C_int ( 0 ) , C_int ( 1 ) ] ) ) ;
2458
- let i = 0 u;
2459
- while i < len {
2460
- cx. build . Store ( C_u8 ( s[ i] as uint ) ,
2461
- cx. build . InBoundsGEP ( llstackpart,
2462
- [ C_int ( 0 ) , C_int ( 2 ) ,
2463
- C_uint ( i) ] ) ) ;
2464
- i += 1 u;
2465
- }
2466
- cx. build . Store ( C_u8 ( 0 u) ,
2467
- cx. build . InBoundsGEP ( llstackpart,
2468
- [ C_int ( 0 ) , C_int ( 2 ) ,
2469
- C_uint ( len) ] ) ) ;
2447
+ let vec_ty = ty:: mk_vec ( bcx_tcx ( cx) ,
2448
+ { ty: ty:: mk_mach ( bcx_tcx ( cx) , ast:: ty_u8) ,
2449
+ mut: ast:: imm} ) ;
2450
+ let strlen = str:: byte_len ( s) ;
2451
+ let veclen = strlen + 1 u; // +1 for \0
2452
+ let alloc_res = trans_ivec:: alloc_with_heap ( cx, vec_ty, veclen) ;
2453
+
2454
+ let bcx = alloc_res. bcx ;
2455
+ let llvecptr = alloc_res. llptr ;
2456
+ let llfirsteltptr = alloc_res. llfirsteltptr ;
2457
+
2458
+ // FIXME: Do something smarter here to load the string
2459
+ let i = 0 u;
2460
+ while i < strlen {
2461
+ bcx. build . Store ( C_u8 ( s[ i] as uint ) ,
2462
+ bcx. build . InBoundsGEP ( llfirsteltptr,
2463
+ [ C_uint ( i) ] ) ) ;
2464
+ i += 1 u;
2465
+ }
2466
+ bcx. build . Store ( C_u8 ( 0 u) ,
2467
+ bcx. build . InBoundsGEP ( llfirsteltptr,
2468
+ [ C_uint ( strlen) ] ) ) ;
2470
2469
2471
- bcx = cx;
2472
- } else {
2473
- let r =
2474
- trans_shared_malloc ( cx, T_ptr ( T_ivec_heap_part ( T_i8 ( ) ) ) ,
2475
- llsize_of ( T_struct ( [ T_int ( ) ,
2476
- T_array ( T_i8 ( ) ,
2477
- len + 1 u) ] ) ) ) ;
2478
- bcx = r. bcx ;
2479
- let llheappart = r. val ;
2480
-
2481
- bcx. build . Store ( C_uint ( len + 1 u) ,
2482
- bcx. build . InBoundsGEP ( llheappart,
2483
- [ C_int ( 0 ) , C_int ( 0 ) ] ) ) ;
2484
- bcx. build . Store ( llvm:: LLVMConstString ( str:: buf ( s) , len, False ) ,
2485
- bcx. build . InBoundsGEP ( llheappart,
2486
- [ C_int ( 0 ) , C_int ( 1 ) ] ) ) ;
2487
-
2488
- let llspilledstackpart =
2489
- bcx. build . PointerCast ( llstackpart, T_ptr ( T_ivec_heap ( T_i8 ( ) ) ) ) ;
2490
- bcx. build . Store ( C_int ( 0 ) ,
2491
- bcx. build . InBoundsGEP ( llspilledstackpart,
2492
- [ C_int ( 0 ) , C_int ( 0 ) ] ) ) ;
2493
- bcx. build . Store ( C_uint ( len + 1 u) ,
2494
- bcx. build . InBoundsGEP ( llspilledstackpart,
2495
- [ C_int ( 0 ) , C_int ( 1 ) ] ) ) ;
2496
- bcx. build . Store ( llheappart,
2497
- bcx. build . InBoundsGEP ( llspilledstackpart,
2498
- [ C_int ( 0 ) , C_int ( 2 ) ] ) ) ;
2499
- }
2500
-
2501
- ret rslt( bcx, llstackpart) ;
2470
+ ret rslt( bcx, llvecptr) ;
2502
2471
}
2503
2472
2504
2473
fn trans_crate_lit ( cx : & @crate_ctxt , lit : & ast:: lit ) -> ValueRef {
0 commit comments