diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2026-01-13 22:31:13 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@nekernel.org> | 2026-01-13 22:31:13 +0100 |
| commit | 4449344b1743f87af4a224a81d9b482264cfa253 (patch) | |
| tree | 14d383e7da29e6b499e7c9dd606d22c3ac66063c /src | |
| parent | 68dcaf3c8909ae09e2197a069f0fb84cfd4a5444 (diff) | |
chore: language frontend improvements and stdlib development
in-progress.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'src')
| -rw-r--r-- | src/CompilerKit/src/Compilers/NectarCompiler+AMD64.cc | 62 |
1 files changed, 34 insertions, 28 deletions
diff --git a/src/CompilerKit/src/Compilers/NectarCompiler+AMD64.cc b/src/CompilerKit/src/Compilers/NectarCompiler+AMD64.cc index 825c5c2..64403fe 100644 --- a/src/CompilerKit/src/Compilers/NectarCompiler+AMD64.cc +++ b/src/CompilerKit/src/Compilers/NectarCompiler+AMD64.cc @@ -26,6 +26,7 @@ #include <cstdlib> #include <filesystem> #include <ios> +#include "CompilerKit/Detail/Config.h" /* NeKernel NECTAR Compiler Driver. */ /* This is part of the CompilerKit. */ @@ -311,17 +312,8 @@ CompilerKit::SyntaxLeafList::SyntaxLeaf CompilerFrontendNectarAMD64::Compile( if (text.find(keyword.first.fKeywordName) == CompilerKit::STLString::npos) continue; switch (keyword.first.fKeywordKind) { - case CompilerKit::KeywordKind::kKeywordKindClass: { + case CompilerKit::KeywordKind::kKeywordKindImpl: { ++kOnClassScope; - auto symbol_name_cls = text.substr(text.find(keyword.first.fKeywordName)); - - for (auto& key : symbol_name_cls) { - if (key == ' ') key = '_'; - if (key == ':') key = '$'; - } - - syntax_tree.fUserValue += "public_segment .data64 __NECTAR_" + symbol_name_cls + "\n"; - break; } case CompilerKit::KeywordKind::kKeywordKindIf: { @@ -488,6 +480,16 @@ CompilerKit::SyntaxLeafList::SyntaxLeaf CompilerFrontendNectarAMD64::Compile( break; } + case CompilerKit::KeywordKind::kKeywordKindDelete: { + if (auto pos = syntax_tree.fUserValue.find(keyword.first.fKeywordName); pos != CompilerKit::STLString::npos) + syntax_tree.fUserValue.replace(pos, keyword.first.fKeywordName.size(), "__operator_release"); + continue; + } + case CompilerKit::KeywordKind::kKeywordKindNew: { + if (auto pos = syntax_tree.fUserValue.find(keyword.first.fKeywordName); pos != CompilerKit::STLString::npos) + syntax_tree.fUserValue.replace(pos, keyword.first.fKeywordName.size(), "__operator_retain"); + continue; + } case CompilerKit::KeywordKind::kKeywordKindAccess: case CompilerKit::KeywordKind::kKeywordKindPtrAccess: { CompilerKit::STLString valueOfVar = @@ -549,13 +551,14 @@ CompilerKit::SyntaxLeafList::SyntaxLeaf CompilerFrontendNectarAMD64::Compile( arg += ch; } - if (!nectar_get_variable_ref(nameVar).empty()) + if (!nectar_get_variable_ref(nameVar).empty()) { syntax_tree.fUserValue += - "call " + nectar_get_variable_ref(nameVar) + " offset " + method + "\n"; + "call " + nectar_get_variable_ref(nameVar) + (keyword.first.fKeywordName.ends_with('>') ? " ptr offset " : " offset ") + method + "\n"; + } break; } - case CompilerKit::KeywordKind::kKeywordKindEndInstr: + case CompilerKit::KeywordKind::kKeywordKindEndLine: case CompilerKit::KeywordKind::kKeywordKindVariableInc: case CompilerKit::KeywordKind::kKeywordKindVariableDec: case CompilerKit::KeywordKind::kKeywordKindVariableAssign: { @@ -569,7 +572,7 @@ CompilerKit::SyntaxLeafList::SyntaxLeaf CompilerFrontendNectarAMD64::Compile( } else if (keyword.first.fKeywordKind == CompilerKit::KeywordKind::kKeywordKindVariableAssign) { valueOfVar = text.substr(text.find(keyword.first.fKeywordName) + keyword.first.fKeywordName.size()); - } else if (keyword.first.fKeywordKind == CompilerKit::KeywordKind::kKeywordKindEndInstr) { + } else if (keyword.first.fKeywordKind == CompilerKit::KeywordKind::kKeywordKindEndLine) { break; } @@ -578,7 +581,7 @@ CompilerKit::SyntaxLeafList::SyntaxLeaf CompilerFrontendNectarAMD64::Compile( } while (valueOfVar.find(";") != CompilerKit::STLString::npos && - keyword.first.fKeywordKind != CompilerKit::KeywordKind::kKeywordKindEndInstr) { + keyword.first.fKeywordKind != CompilerKit::KeywordKind::kKeywordKindEndLine) { valueOfVar.erase(valueOfVar.find(";")); } @@ -592,7 +595,7 @@ CompilerKit::SyntaxLeafList::SyntaxLeaf CompilerFrontendNectarAMD64::Compile( } else if (keyword.first.fKeywordKind == CompilerKit::KeywordKind::kKeywordKindVariableAssign) { varName.erase(varName.find(keyword.first.fKeywordName)); - } else if (keyword.first.fKeywordKind == CompilerKit::KeywordKind::kKeywordKindEndInstr) { + } else if (keyword.first.fKeywordKind == CompilerKit::KeywordKind::kKeywordKindEndLine) { varName.erase(varName.find(";")); } @@ -630,7 +633,7 @@ CompilerKit::SyntaxLeafList::SyntaxLeaf CompilerFrontendNectarAMD64::Compile( continue; } - if (keyword.first.fKeywordKind == CompilerKit::KeywordKind::kKeywordKindEndInstr) { + if (keyword.first.fKeywordKind == CompilerKit::KeywordKind::kKeywordKindEndLine) { syntax_tree.fUserValue += "\n"; continue; } @@ -671,14 +674,10 @@ CompilerKit::SyntaxLeafList::SyntaxLeaf CompilerFrontendNectarAMD64::Compile( nectar_allocate_stack_variable(varName); if (valueOfVar.find(".") != CompilerKit::STLString::npos) { - auto value = nectar_get_variable_ref(valueOfVar.substr(0, valueOfVar.find("."))); - value += " offset "; - + auto value = "offset "; valueOfVar.replace(0, valueOfVar.find(".") + 1, value); } else if (valueOfVar.find("->") != CompilerKit::STLString::npos) { - auto value = nectar_get_variable_ref(valueOfVar.substr(0, valueOfVar.find("->"))); - value += " offset "; - + auto value = "ptr offset "; valueOfVar.replace(0, valueOfVar.find("->") + 2, value); } @@ -690,6 +689,9 @@ CompilerKit::SyntaxLeafList::SyntaxLeaf CompilerFrontendNectarAMD64::Compile( break; } + case CompilerKit::KeywordKind::kKeywordKindCommentInline: { + break; + } case CompilerKit::KeywordKind::kKeywordKindReturn: { try { auto pos = text.find("return"); @@ -741,9 +743,8 @@ CompilerKit::SyntaxLeafList::SyntaxLeaf CompilerFrontendNectarAMD64::Compile( CompilerKit::SyntaxLeafList::SyntaxLeaf CompilerFrontendNectarAMD64::CompileLayout( CompilerKit::STLString& text, const CompilerKit::STLString& file, CompilerKit::SyntaxLeafList::SyntaxLeaf& syntax_tree) { - // Handle class entry - if ((text.find("struct") != CompilerKit::STLString::npos)) { - CompilerKit::STLString keyword = "struct"; + if ((text.find("impl") != CompilerKit::STLString::npos)) { + CompilerKit::STLString keyword = "impl"; auto classPos = text.find(keyword) + keyword.length(); auto bracePos = text.find("{"); @@ -1219,7 +1220,7 @@ class AssemblyNectarInterfaceAMD64 final CK_ASSEMBLY_INTERFACE { NECTAR_MODULE(CompilerNectarAMD64) { bool skip = false; - kKeywords.emplace_back("struct", CompilerKit::KeywordKind::kKeywordKindClass); + kKeywords.emplace_back("impl", CompilerKit::KeywordKind::kKeywordKindImpl); kKeywords.emplace_back("{", CompilerKit::KeywordKind::kKeywordKindBodyStart); kKeywords.emplace_back("}", CompilerKit::KeywordKind::kKeywordKindBodyEnd); kKeywords.emplace_back("(", CompilerKit::KeywordKind::kKeywordKindFunctionStart); @@ -1229,11 +1230,16 @@ NECTAR_MODULE(CompilerNectarAMD64) { kKeywords.emplace_back("-=", CompilerKit::KeywordKind::kKeywordKindVariableDec); kKeywords.emplace_back("const", CompilerKit::KeywordKind::kKeywordKindConstant); kKeywords.emplace_back("let", CompilerKit::KeywordKind::kKeywordKindVariable); + kKeywords.emplace_back("retain", CompilerKit::KeywordKind::kKeywordKindNew); + kKeywords.emplace_back("release", CompilerKit::KeywordKind::kKeywordKindDelete); + kKeywords.emplace_back("new", CompilerKit::KeywordKind::kKeywordKindNew); + kKeywords.emplace_back("delete", CompilerKit::KeywordKind::kKeywordKindDelete); kKeywords.emplace_back("->", CompilerKit::KeywordKind::kKeywordKindPtrAccess); kKeywords.emplace_back(".", CompilerKit::KeywordKind::kKeywordKindAccess); kKeywords.emplace_back(",", CompilerKit::KeywordKind::kKeywordKindArgSeparator); - kKeywords.emplace_back(";", CompilerKit::KeywordKind::kKeywordKindEndInstr); + kKeywords.emplace_back(";", CompilerKit::KeywordKind::kKeywordKindEndLine); + kKeywords.emplace_back("//", CompilerKit::KeywordKind::kKeywordKindCommentInline); kKeywords.emplace_back("return", CompilerKit::KeywordKind::kKeywordKindReturn); kKeywords.emplace_back("if", CompilerKit::KeywordKind::kKeywordKindIf); |
