summaryrefslogtreecommitdiffstats
path: root/src/test/ui/cross-crate/auxiliary/cci_nested_lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/cross-crate/auxiliary/cci_nested_lib.rs')
-rw-r--r--src/test/ui/cross-crate/auxiliary/cci_nested_lib.rs50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/test/ui/cross-crate/auxiliary/cci_nested_lib.rs b/src/test/ui/cross-crate/auxiliary/cci_nested_lib.rs
new file mode 100644
index 000000000..23d76ef36
--- /dev/null
+++ b/src/test/ui/cross-crate/auxiliary/cci_nested_lib.rs
@@ -0,0 +1,50 @@
+use std::cell::RefCell;
+
+pub struct Entry<A,B> {
+ key: A,
+ value: B
+}
+
+pub struct alist<A,B> {
+ eq_fn: extern "Rust" fn(A,A) -> bool,
+ data: Box<RefCell<Vec<Entry<A,B>>>>,
+}
+
+pub fn alist_add<A:'static,B:'static>(lst: &alist<A,B>, k: A, v: B) {
+ let mut data = lst.data.borrow_mut();
+ (*data).push(Entry{key:k, value:v});
+}
+
+pub fn alist_get<A:Clone + 'static,
+ B:Clone + 'static>(
+ lst: &alist<A,B>,
+ k: A)
+ -> B {
+ let eq_fn = lst.eq_fn;
+ let data = lst.data.borrow();
+ for entry in &(*data) {
+ if eq_fn(entry.key.clone(), k.clone()) {
+ return entry.value.clone();
+ }
+ }
+ panic!();
+}
+
+#[inline]
+pub fn new_int_alist<B:'static>() -> alist<isize, B> {
+ fn eq_int(a: isize, b: isize) -> bool { a == b }
+ return alist {
+ eq_fn: eq_int,
+ data: Box::new(RefCell::new(Vec::new())),
+ };
+}
+
+#[inline]
+pub fn new_int_alist_2<B:'static>() -> alist<isize, B> {
+ #[inline]
+ fn eq_int(a: isize, b: isize) -> bool { a == b }
+ return alist {
+ eq_fn: eq_int,
+ data: Box::new(RefCell::new(Vec::new())),
+ };
+}