Move C++-only to_mangled function to C++ generator

This commit is contained in:
David Tolnay 2020-04-25 12:38:41 -07:00
parent 83a7ec9901
commit bae50eff4e
No known key found for this signature in database
GPG Key ID: F9BA143B95FF6D82
3 changed files with 23 additions and 27 deletions

View File

@ -1,7 +1,6 @@
use crate::gen::out::OutFile;
use crate::gen::{include, Opt};
use crate::syntax::atom::Atom::{self, *};
use crate::syntax::mangled::to_mangled;
use crate::syntax::namespace::Namespace;
use crate::syntax::symbol::Symbol;
use crate::syntax::{mangle, Api, ExternFn, ExternType, Signature, Struct, Type, Types, Var};
@ -921,6 +920,29 @@ fn to_typename(namespace: &Namespace, ty: &Type) -> String {
}
}
fn to_mangled(namespace: &Namespace, ty: &Type) -> String {
match ty {
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${}", to_mangled(namespace, &ptr.inner)),
Type::RustVec(ptr) => format!("rust_vec${}", to_mangled(namespace, &ptr.inner)),
Type::UniquePtr(ptr) => format!("std$unique_ptr${}", to_mangled(namespace, &ptr.inner)),
Type::CxxVector(ptr) => format!("std$vector${}", to_mangled(namespace, &ptr.inner)),
_ => unimplemented!(),
}
}
fn write_generic_instantiations(out: &mut OutFile, types: &Types) {
fn allow_unique_ptr(ident: &Ident) -> bool {
Atom::from(ident).is_none()

View File

@ -1,25 +0,0 @@
use crate::syntax::namespace::Namespace;
use crate::syntax::{Atom, Type};
pub fn to_mangled(namespace: &Namespace, ty: &Type) -> String {
match ty {
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${}", to_mangled(namespace, &ptr.inner)),
Type::RustVec(ptr) => format!("rust_vec${}", to_mangled(namespace, &ptr.inner)),
Type::UniquePtr(ptr) => format!("std$unique_ptr${}", to_mangled(namespace, &ptr.inner)),
Type::CxxVector(ptr) => format!("std$vector${}", to_mangled(namespace, &ptr.inner)),
_ => unimplemented!(),
}
}

View File

@ -8,7 +8,6 @@ pub mod error;
pub mod ident;
mod impls;
pub mod mangle;
pub mod mangled;
pub mod namespace;
mod parse;
pub mod set;