From 0b77bb89410f46de271c537e2f6feeaf0a61d2b4 Mon Sep 17 00:00:00 2001 From: bronku Date: Tue, 2 Dec 2025 13:18:23 +0100 Subject: [PATCH] oki? --- src/codegen.hpp | 51 ++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 44 insertions(+), 7 deletions(-) diff --git a/src/codegen.hpp b/src/codegen.hpp index ded340f..773107d 100644 --- a/src/codegen.hpp +++ b/src/codegen.hpp @@ -135,16 +135,43 @@ private: else if (auto *function_def = dynamic_cast(&stmt)) { write_indent(); - output << "def " << function_def->name << "("; - if (function_def->params.size() > 0) + if (function_def->name == "__init__") { - output << function_def->params[0]; + output << "def initialize"; } - for (int i = 1; i < function_def->params.size(); i++) + else { - output << ", " << function_def->params[i]; + output << "def " << function_def->name << ""; } - output << ")\n"; + bool l_paren = false; + bool comma = false; + for (size_t i = 0; i < function_def->params.size(); i++) + { + if (comma) + { + output << ", "; + } + + if (function_def->params[i] != "self") + { + if (!l_paren) + { + output << "("; + l_paren = true; + } + output << function_def->params[i]; + comma = true; + } + else + { + comma = false; + } + } + if (l_paren) + { + output << ")"; + } + output << "\n"; indent_level++; for (const auto &s : function_def->body) { @@ -157,7 +184,7 @@ private: else if (auto *class_def = dynamic_cast(&stmt)) { write_indent(); - output << "Class " << class_def->name << "\n"; + output << "class " << class_def->name << "\n"; indent_level++; for (const auto &s : class_def->body) { @@ -207,6 +234,16 @@ private: } else if (auto *attr = dynamic_cast(&expr)) { + if (auto *id = dynamic_cast(attr->value.get())) + { + if (id->name == "self") + { + output << "@"; + write(attr->attr); + return; + } + } + generate_expr(*attr->value); output << "." << attr->attr; }