Skip to content

Commit d458e9f

Browse files
committed
---
yaml --- r: 3955 b: refs/heads/master c: 88574c3 h: refs/heads/master i: 3953: cf56c4b 3951: b50983c v: v3
1 parent fae8599 commit d458e9f

File tree

5 files changed

+22
-4
lines changed

5 files changed

+22
-4
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: f6f7f6190809d698f39f5f3dde9a10cb28661795
2+
refs/heads/master: 88574c3cea87bc8f789883bcd518b8a91fb1a776

trunk/src/comp/back/upcall.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import middle::trans_common::T_bool;
88
import middle::trans_common::T_i8;
99
import middle::trans_common::T_i32;
1010
import middle::trans_common::T_int;
11+
import middle::trans_common::T_ivec;
1112
import middle::trans_common::T_nil;
1213
import middle::trans_common::T_opaque_chan_ptr;
1314
import middle::trans_common::T_opaque_ivec;
@@ -28,6 +29,7 @@ type upcalls =
2829
ValueRef log_float,
2930
ValueRef log_double,
3031
ValueRef log_str,
32+
ValueRef log_istr,
3133
ValueRef trace_word,
3234
ValueRef trace_str,
3335
ValueRef new_port,
@@ -82,6 +84,7 @@ fn declare_upcalls(type_names tn, TypeRef tydesc_type, TypeRef taskptr_type,
8284
log_float=dv("log_float", ~[T_i32(), T_f32()]),
8385
log_double=dv("log_double", ~[T_i32(), T_ptr(T_f64())]),
8486
log_str=dv("log_str", ~[T_i32(), T_ptr(T_str())]),
87+
log_istr=dv("log_istr", ~[T_i32(), T_ptr(T_ivec(T_i8()))]),
8588
trace_word=dv("trace_word", ~[T_int()]),
8689
trace_str=dv("trace_str", ~[T_ptr(T_i8())]),
8790
new_port=d("new_port", ~[T_size_t()], T_opaque_port_ptr()),

trunk/src/comp/middle/trans_dps.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,9 @@ fn trans_log(&@block_ctxt cx, &span sp, int level, &@ast::expr expr)
222222
ty::ty_machine(ast::ty_u32) {
223223
by_val = true; llupcall = bcx_ccx(bcx).upcalls.log_int;
224224
}
225+
ty::ty_istr {
226+
by_val = false; llupcall = bcx_ccx(bcx).upcalls.log_istr;
227+
}
225228
_ {
226229
bcx_ccx(bcx).sess.span_unimpl(sp, "logging for values of type " +
227230
ppaux::ty_to_str(bcx_tcx(bcx), t));
@@ -322,11 +325,12 @@ fn trans_lit_str_common(&@crate_ctxt ccx, &str s)
322325
none);
323326
}
324327

325-
auto llarray = tc::C_array(tc::T_i8(), array);
328+
auto llheappart = tc::C_struct(~[tc::C_uint(len),
329+
tc::C_array(tc::T_i8(), array)]);
326330
ret tup(tc::C_struct(~[tc::C_uint(0u),
327331
tc::C_uint(abi::ivec_default_length),
328-
tc::C_null(tc::T_ptr(lltype_of(llarray)))]),
329-
some(llarray));
332+
tc::C_null(tc::T_ptr(lltype_of(llheappart)))]),
333+
some(llheappart));
330334
}
331335

332336
// As above, we don't use destination-passing style here.

trunk/src/rt/rust_upcall.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,16 @@ upcall_log_str(rust_task *task, uint32_t level, rust_str *str) {
7575
}
7676
}
7777

78+
extern "C" CDECL void
79+
upcall_log_istr(rust_task *task, uint32_t level, rust_ivec *str) {
80+
LOG_UPCALL_ENTRY(task);
81+
if (task->sched->log_lvl < level)
82+
return;
83+
const char *buf = (const char *)
84+
(str->fill ? str->payload.data : str->payload.ptr->data);
85+
task->sched->log(task, level, "rust: %s", buf);
86+
}
87+
7888
extern "C" CDECL void
7989
upcall_trace_word(rust_task *task, uintptr_t i) {
8090
LOG_UPCALL_ENTRY(task);

trunk/src/rt/rustrt.def.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ upcall_kill
6868
upcall_log_double
6969
upcall_log_float
7070
upcall_log_int
71+
upcall_log_istr
7172
upcall_log_str
7273
upcall_malloc
7374
upcall_mark

0 commit comments

Comments
 (0)