Using core for classes
This commit is contained in:
@@ -45,7 +45,7 @@ impl ClassProcessedData {
|
|||||||
.collect::<Vec<Spanned<FunctionDecl>>>();
|
.collect::<Vec<Spanned<FunctionDecl>>>();
|
||||||
|
|
||||||
let mut v_table = Vec::new();
|
let mut v_table = Vec::new();
|
||||||
let mut override_v_table = std::collections::HashMap::new();
|
let mut override_v_table = HashMap::new();
|
||||||
|
|
||||||
for method in &methods {
|
for method in &methods {
|
||||||
if matches!(method.item.visibility, Visibility::Public) {
|
if matches!(method.item.visibility, Visibility::Public) {
|
||||||
@@ -178,7 +178,7 @@ impl ClassProcessedData {
|
|||||||
cg.indent += 1;
|
cg.indent += 1;
|
||||||
|
|
||||||
if has_parent {
|
if has_parent {
|
||||||
cg.add_indentedln("let mut table = [std::ptr::null(); Self::__V_COUNT];");
|
cg.add_indentedln("let mut table = [core::ptr::null(); Self::__V_COUNT];");
|
||||||
|
|
||||||
cg.add_indentedln(&format!("let parent_table = {}::__V_TABLE;", parent_path));
|
cg.add_indentedln(&format!("let parent_table = {}::__V_TABLE;", parent_path));
|
||||||
cg.add_indentedln(
|
cg.add_indentedln(
|
||||||
@@ -293,7 +293,7 @@ impl ClassProcessedData {
|
|||||||
|
|
||||||
// Deref tests for override targets
|
// Deref tests for override targets
|
||||||
if self.inherits.is_some() && !self.override_v_table.is_empty() {
|
if self.inherits.is_some() && !self.override_v_table.is_empty() {
|
||||||
cg.add_indentedln("let this: &Self = &unsafe { std::mem::MaybeUninit::<Self>::zeroed().assume_init() };");
|
cg.add_indentedln("let this: &Self = &unsafe { core::mem::MaybeUninit::<Self>::zeroed().assume_init() };");
|
||||||
|
|
||||||
for (override_tier, v) in &self.override_v_table {
|
for (override_tier, v) in &self.override_v_table {
|
||||||
if let Some(path) = &override_tier.0 {
|
if let Some(path) = &override_tier.0 {
|
||||||
@@ -346,7 +346,7 @@ impl ClassProcessedData {
|
|||||||
cg.addln(") -> Self {");
|
cg.addln(") -> Self {");
|
||||||
cg.indent += 1;
|
cg.indent += 1;
|
||||||
|
|
||||||
cg.add_indentedln("let mut this: Self = unsafe { std::mem::MaybeUninit::<Self>::zeroed().assume_init() };");
|
cg.add_indentedln("let mut this: Self = unsafe { core::mem::MaybeUninit::<Self>::zeroed().assume_init() };");
|
||||||
cg.add_indentedln("this._vptr = &Self::__V_TABLE;");
|
cg.add_indentedln("this._vptr = &Self::__V_TABLE;");
|
||||||
|
|
||||||
for field in &self.fields {
|
for field in &self.fields {
|
||||||
@@ -433,7 +433,7 @@ impl ClassProcessedData {
|
|||||||
let generics_expr_str = Generics::from(self.generics.clone()).get_rust();
|
let generics_expr_str = Generics::from(self.generics.clone()).get_rust();
|
||||||
|
|
||||||
cg.add(&format!(
|
cg.add(&format!(
|
||||||
"impl{} std::ops::Deref for {}{}",
|
"impl{} core::ops::Deref for {}{}",
|
||||||
generics_str,
|
generics_str,
|
||||||
self.name.get_rust(),
|
self.name.get_rust(),
|
||||||
generics_expr_str
|
generics_expr_str
|
||||||
@@ -452,7 +452,7 @@ impl ClassProcessedData {
|
|||||||
cg.addln("}");
|
cg.addln("}");
|
||||||
|
|
||||||
cg.add(&format!(
|
cg.add(&format!(
|
||||||
"impl{} std::ops::DerefMut for {}{}",
|
"impl{} core::ops::DerefMut for {}{}",
|
||||||
generics_str,
|
generics_str,
|
||||||
self.name.get_rust(),
|
self.name.get_rust(),
|
||||||
generics_expr_str
|
generics_expr_str
|
||||||
@@ -580,7 +580,7 @@ pub fn gen_method_point(method: &FunctionDecl, ctx: &mut Context, cg: &mut RustC
|
|||||||
mutable: mutable_self,
|
mutable: mutable_self,
|
||||||
ty: Box::new(TypeExpr::Path(
|
ty: Box::new(TypeExpr::Path(
|
||||||
Path(vec![
|
Path(vec![
|
||||||
Identifier(String::from("std")),
|
Identifier(String::from("core")),
|
||||||
Identifier(String::from("ffi")),
|
Identifier(String::from("ffi")),
|
||||||
Identifier(String::from("c_void")),
|
Identifier(String::from("c_void")),
|
||||||
]),
|
]),
|
||||||
@@ -590,7 +590,7 @@ pub fn gen_method_point(method: &FunctionDecl, ctx: &mut Context, cg: &mut RustC
|
|||||||
);
|
);
|
||||||
|
|
||||||
cg.add(&TypeExpr::StaticFn(param_types, method.return_type.clone().map(Box::new)).get_rust());
|
cg.add(&TypeExpr::StaticFn(param_types, method.return_type.clone().map(Box::new)).get_rust());
|
||||||
cg.addln(" = std::mem::transmute(func_ptr);");
|
cg.addln(" = core::mem::transmute(func_ptr);");
|
||||||
|
|
||||||
if mutable_self {
|
if mutable_self {
|
||||||
cg.add_indented("func(self as *mut Self as *const core::ffi::c_void");
|
cg.add_indented("func(self as *mut Self as *const core::ffi::c_void");
|
||||||
|
|||||||
Reference in New Issue
Block a user