From 735435bf964dcafdfc09d01ea644bbfbe725abd8 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Thu, 21 Apr 2011 16:44:17 -0700 Subject: [PATCH] stdlib: Add a pointer equality function to the standard library and a test case --- src/lib/Box.rs | 8 ++++++++ src/lib/std.rc | 1 + src/rt/rust_builtin.cpp | 5 +++++ src/rt/rustrt.def.in | 1 + src/test/run-pass/lib-box.rs | 12 ++++++++++++ 5 files changed, 27 insertions(+) create mode 100644 src/lib/Box.rs create mode 100644 src/test/run-pass/lib-box.rs diff --git a/src/lib/Box.rs b/src/lib/Box.rs new file mode 100644 index 00000000000..2d94c680bf8 --- /dev/null +++ b/src/lib/Box.rs @@ -0,0 +1,8 @@ +export rustrt; + +native "rust" mod rustrt { + fn rust_ptr_eq[T](@T a, @T b) -> int; +} + +fn ptr_eq[T](@T a, @T b) -> bool { ret rustrt.rust_ptr_eq[T](a, b) != 0; } + diff --git a/src/lib/std.rc b/src/lib/std.rc index 7e9e06c2ac9..1056f375138 100644 --- a/src/lib/std.rc +++ b/src/lib/std.rc @@ -69,6 +69,7 @@ mod sha1; mod ebml; mod UFind; mod ExtFmt; +mod Box; // Local Variables: // mode: rust; diff --git a/src/rt/rust_builtin.cpp b/src/rt/rust_builtin.cpp index c1aa5b59413..30e2eb3ddeb 100644 --- a/src/rt/rust_builtin.cpp +++ b/src/rt/rust_builtin.cpp @@ -468,6 +468,11 @@ rust_file_is_dir(rust_task *task, rust_str *path) { extern "C" CDECL FILE* rust_get_stdin() {return stdin;} extern "C" CDECL FILE* rust_get_stdout() {return stdout;} +extern "C" CDECL int +rust_ptr_eq(rust_task *task, type_desc *t, rust_box *a, rust_box *b) { + return a == b; +} + // // Local Variables: // mode: C++ diff --git a/src/rt/rustrt.def.in b/src/rt/rustrt.def.in index 9ea6bee4262..d724dd714cf 100644 --- a/src/rt/rustrt.def.in +++ b/src/rt/rustrt.def.in @@ -19,6 +19,7 @@ rust_get_stdin rust_get_stdout rust_list_files rust_process_wait +rust_ptr_eq rust_run_program rust_start size_of diff --git a/src/test/run-pass/lib-box.rs b/src/test/run-pass/lib-box.rs new file mode 100644 index 00000000000..10f5e727110 --- /dev/null +++ b/src/test/run-pass/lib-box.rs @@ -0,0 +1,12 @@ +use std; +import std.Box; + +fn main() { + auto x = @3; + auto y = @3; + check (Box.ptr_eq[int](x, x)); + check (Box.ptr_eq[int](y, y)); + check (!Box.ptr_eq[int](x, y)); + check (!Box.ptr_eq[int](y, x)); +} +