about summary refs log tree commit diff
path: root/tests/ui/cross-crate/auxiliary/cci_nested_lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/cross-crate/auxiliary/cci_nested_lib.rs')
-rw-r--r--tests/ui/cross-crate/auxiliary/cci_nested_lib.rs50
1 files changed, 50 insertions, 0 deletions
diff --git a/tests/ui/cross-crate/auxiliary/cci_nested_lib.rs b/tests/ui/cross-crate/auxiliary/cci_nested_lib.rs
new file mode 100644
index 00000000000..23d76ef3656
--- /dev/null
+++ b/tests/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())),
+    };
+}