Skip to content

Commit 52b2590

Browse files
committed
feat: add pretty print trait
1 parent 4426b9a commit 52b2590

File tree

4 files changed

+21
-5
lines changed

4 files changed

+21
-5
lines changed

planglib/std/stdbuiltin.pi

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ fn print_i64(i:i64) void;
66
fn print_i128(i:i128) void;
77
fn print_u64(i:u64) void;
88
fn print_u128(i:u128) void;
9+
fn print_hex(i:i64) void;
910

1011

1112
pub fn print_any<T>(t:T) void {
@@ -30,7 +31,7 @@ pub fn print_any<T>(t:T) void {
3031
if is_ptr<T>() {
3132
let result = unsafe_cast<*u8>(&t);
3233
let i = gc::ptr_to_int(*result);
33-
print_i64(i);
34+
print_hex(i);
3435
print_s(" )");
3536
return;
3637
}
@@ -100,12 +101,22 @@ pub fn print_any<T>(t:T) void {
100101
print_s(" )");
101102
return;
102103
}
103-
forfields(t, {
104+
let re = forfields(t, {
104105
print_s(_field_name);
105106
print_s(": ");
106107
print_any(_field);
107108
print_s(" ");
108109
});
110+
if !re {// is trait
111+
let result = unsafe_cast<i64>(&t);
112+
// let hash = *result;
113+
let i_ptr = gc::ptr_to_int(unsafe_cast<u8>(result)) + 8;
114+
let v_ptr = gc::int_to_ptr(i_ptr);
115+
let v = unsafe_cast<i64>(v_ptr);
116+
let i = *v;
117+
print_hex(i);
118+
print_s(" ");
119+
}
109120
print_s(")");
110121
return;
111122
}

test/main.pi

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use project1::test::ifel;
22
use project1::test::generic;
33
use project1::test::st;
44
use project1::test::method;
5-
use project1::test::constant;
5+
use project1::test::global;
66
use project1::test::traits;
77
use project1::test::simple;
88
use project1::test::flow;
@@ -37,7 +37,7 @@ pub fn main() i64 {
3737
generic::test_generic();
3838
method::test_impl();
3939
test_struct();
40-
constant::test_const();
40+
global::test_global();
4141
traits::test_trait();
4242
simple::test_simple();
4343
flow::test_flow();

test/test/constant.pi renamed to test/test/global.pi

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ pub fn change_global() void {
1818
return;
1919
}
2020

21-
pub fn test_const() void {
21+
pub fn test_global() void {
2222
panic::assert(*a == 100);
2323
change_global();
2424
panic::assert(b.a == 100);

vm/src/lib.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,11 @@ fn print_u128(i: u128) {
7676
print!("{}", i);
7777
}
7878

79+
#[is_runtime]
80+
fn print_hex(i: i64) {
81+
print!("0x{:X}", i);
82+
}
83+
7984
#[is_runtime]
8085
fn utf8_count(ptr: *mut u8, byte_len: i64) -> i64 {
8186
let s = unsafe { std::slice::from_raw_parts(ptr, byte_len as usize) };

0 commit comments

Comments
 (0)