ptr write assignments

This commit is contained in:
2026-06-09 20:24:57 +02:00
parent 7a613e93e8
commit 1b6340e7a6
4 changed files with 30 additions and 20 deletions
+9 -1
View File
@@ -111,12 +111,20 @@ impl GenRust for Expression {
postfix.gen_rust(ctx, cg);
}
}
// Safely integrated to handle the tree structure built by the Pratt Parser
Expression::Binary { lhs, op, rhs } => {
if op == "->" {
cg.add("unsafe { std::ptr::write(&mut ");
lhs.gen_rust(ctx, cg);
cg.add(", ");
rhs.gen_rust(ctx, cg);
cg.add(") }");
} else {
lhs.gen_rust(ctx, cg);
cg.add(op);
rhs.gen_rust(ctx, cg);
}
}
Expression::Closure {
return_type,
+1
View File
@@ -620,6 +620,7 @@ bin_op = {
| "!="
| "&&"
| "||"
| "->"
| "+"
| "-"
| "*"
+2 -6
View File
@@ -17,9 +17,7 @@ pub class Animal<T> {
pub class Mammal<T> : Animal<T> {
constructor() {
unsafe {
std::ptr::write(&mut super, Super::new());
}
super -> Super::new();
}
pub fn args_test(*self, x i32, y *str) {}
@@ -31,9 +29,7 @@ pub class Mammal<T> : Animal<T> {
pub class Dog : Mammal<i32> {
constructor() {
unsafe {
std::ptr::write(&mut super, Super::new());
}
super -> Super::new();
}
pub override(Animal<i32>) fn speak(*self) {
+15 -10
View File
@@ -1,13 +1,18 @@
pub class Player {
pub name String;
pub hp i32;
fn main() {
println!("running common tests...");
common::expr_test::run_tests();
common::statement_test::run_tests();
common::decl_test::run_tests();
common::types_test::run_tests();
pub constructor(name *str) {
self.hp = 100;
self.name.to_string();
}
println!("running items tests...");
items::function_test::run_tests();
items::struct_test::run_tests();
items::enum_test::run_tests();
items::class_test::run_tests();
items::trait_test::run_tests();
items::impl_test::run_tests();
items::attribute_test::run_tests();
pub fn is_dead(*self) bool {
self.hp <= 0
}
println!("\x1b[32m\nAll tests passed!\x1b[0m");
}