C++ std::vector<T> and Rust std::vec::Vec<T> support
Add basic std::vector and std::vec::Vec support across FFI boundary.
diff --git a/syntax/mangled.rs b/syntax/mangled.rs
new file mode 100644
index 0000000..56e8b73
--- /dev/null
+++ b/syntax/mangled.rs
@@ -0,0 +1,30 @@
+use crate::syntax::{Atom, Type};
+
+pub trait ToMangled {
+ fn to_mangled(&self, namespace: &Vec<String>) -> String;
+}
+
+impl ToMangled for Type {
+ fn to_mangled(&self, namespace: &Vec<String>) -> String {
+ match self {
+ Type::Ident(ident) => {
+ let mut instance = String::new();
+ // Do not apply namespace to built-in type
+ let is_user_type = Atom::from(ident).is_none();
+ if is_user_type {
+ for name in namespace {
+ instance += name;
+ instance += "$";
+ }
+ }
+ instance += &ident.to_string();
+ instance
+ }
+ Type::RustBox(ptr) => format!("rust_box${}", ptr.inner.to_mangled(namespace)),
+ Type::RustVec(ptr) => format!("rust_vec${}", ptr.inner.to_mangled(namespace)),
+ Type::UniquePtr(ptr) => format!("std$unique_ptr${}", ptr.inner.to_mangled(namespace)),
+ Type::Vector(ptr) => format!("std$vector${}", ptr.inner.to_mangled(namespace)),
+ _ => unimplemented!(),
+ }
+ }
+}