From 37117b0f1ee061170f7cc5d8095a4d3a5e45f381 Mon Sep 17 00:00:00 2001 From: heckerpowered <72550834+heckerpowered@users.noreply.github.com> Date: Sat, 17 Aug 2024 23:25:14 +0800 Subject: [PATCH 01/30] ADL version of shared_ptr --- src/Mamba/Core/Colors.h | 36 +++++++++++++++++------------------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/src/Mamba/Core/Colors.h b/src/Mamba/Core/Colors.h index b1e0589..3cd03ad 100644 --- a/src/Mamba/Core/Colors.h +++ b/src/Mamba/Core/Colors.h @@ -81,26 +81,24 @@ namespace Mamba .Color = Color }; } - } // namespace FastIO -} // namespace Mamba -namespace fast_io -{ - template - constexpr void print_define(io_reserve_type_t>, auto out [[maybe_unused]], const ::Mamba::ColorT& color) noexcept - { - // \033[m\033[0m - if (color.IsForeground()) + template + constexpr void print_define(fast_io::io_reserve_type_t>, auto out [[maybe_unused]], const ::Mamba::ColorT& color) noexcept { - io::print("\033[", static_cast(color.Color), "m", color.Reference, "\033[39m"); - return; - } - else if (color.IsBackground()) - { - io::print("\033[", static_cast(color.Color), "m", color.Reference, "\033[49m"); - return; + // \033[m\033[0m + if (color.IsForeground()) + { + ::fast_io::io::print(out, "\033[", static_cast(color.Color), "m", color.Reference, "\033[39m"); + return; + } + else if (color.IsBackground()) + { + ::fast_io::io::print(out, "\033[", static_cast(color.Color), "m", color.Reference, "\033[49m"); + return; + } + + std::unreachable(); } + } // namespace FastIO - std::unreachable(); - } -} // namespace fast_io \ No newline at end of file +} // namespace Mamba From c461ad3467471694b11e8e94c5a01e1a54b50401 Mon Sep 17 00:00:00 2001 From: heckerpowered <72550834+heckerpowered@users.noreply.github.com> Date: Sat, 17 Aug 2024 23:29:57 +0800 Subject: [PATCH 02/30] Add color --- src/Mamba/Mamba.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Mamba/Mamba.cpp b/src/Mamba/Mamba.cpp index b9b8b78..70b2ef0 100644 --- a/src/Mamba/Mamba.cpp +++ b/src/Mamba/Mamba.cpp @@ -104,7 +104,7 @@ catch (fast_io::error error) Color("error reading '", Colors::BrightForegroundWhite), Color(FileName, Colors::BrightForegroundWhite), Color("': ", Colors::BrightForegroundWhite), - error + Color(error, Colors::BrightForegroundWhite) ); std::exit(-1); } From dc89cfd428b7fff5fd1155fb642b118b10bc7c47 Mon Sep 17 00:00:00 2001 From: heckerpowered <72550834+heckerpowered@users.noreply.github.com> Date: Sun, 18 Aug 2024 02:47:33 +0800 Subject: [PATCH 03/30] =?UTF-8?q?=E7=AE=80=E5=8C=96Text=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Mamba/Code Analysis/Text/SourceText.cpp | 202 +++++++----------- src/Mamba/Code Analysis/Text/SourceText.h | 64 +++--- src/Mamba/Code Analysis/Text/TextLine.cpp | 43 ++-- src/Mamba/Code Analysis/Text/TextLine.h | 19 +- src/Mamba/Code Analysis/Text/TextLocation.cpp | 40 ++-- src/Mamba/Code Analysis/Text/TextLocation.h | 34 +-- src/Mamba/Code Analysis/Text/TextSpan.cpp | 40 ++-- src/Mamba/Code Analysis/Text/TextSpan.h | 9 +- 8 files changed, 172 insertions(+), 279 deletions(-) diff --git a/src/Mamba/Code Analysis/Text/SourceText.cpp b/src/Mamba/Code Analysis/Text/SourceText.cpp index d583934..f8ef31e 100644 --- a/src/Mamba/Code Analysis/Text/SourceText.cpp +++ b/src/Mamba/Code Analysis/Text/SourceText.cpp @@ -4,161 +4,123 @@ #include "TextSpan.h" #include -#include -namespace Mamba +using namespace Mamba; + +[[nodiscard]] constexpr std::size_t GetLineBreakWidth(const StringView Text, const std::size_t Position) noexcept { - SourceText::SourceText( - const std::shared_ptr Text, - const std::shared_ptr FileName - ) noexcept : - Text(Text), FileName(FileName), Lines(ParseLines(*this, *Text)) + const auto Character = Text[Position]; + const auto LineBreakCharacter = (Position + 1 >= Text.length() ? TEXT('\0') : Text[Position + 1]); + + if (Character == TEXT('\r') && LineBreakCharacter == TEXT('\n')) { + return 2; } - SourceText SourceText::From( - const std::shared_ptr Text, - const std::shared_ptr FileName - ) noexcept + if (Character == TEXT('\r') || LineBreakCharacter == TEXT('\n')) { - return SourceText(Text, FileName); + return 1; } - std::vector> - SourceText::ParseLines(const SourceText& SourceText, const String& Text) noexcept - { - auto Result = std::vector>(); + return 0; +} +void SourceText::ParseLines() noexcept +{ #if __cpp_size_t_suffix == 202011L - auto Position = 0uz; - auto LineStart = 0uz; + auto Position = 0uz; + auto LineStart = 0uz; #else - auto Position = std::size_t(); - auto LineStart = std::size_t(); + auto Position = std::size_t(); + auto LineStart = std::size_t(); #endif - while (Position < Text.length()) + while (Position < Text.length()) + { + const auto LineBreakWidth = GetLineBreakWidth(Text, Position); + if (LineBreakWidth == 0) { - const auto LineBreakWidth = GetLineBreakWidth(Text, Position); - - if (LineBreakWidth == 0) - { - ++Position; - } - else - { - AddLine(Result, SourceText, Position, LineStart, LineBreakWidth); - - Position += LineBreakWidth; - LineStart = Position; - } + ++Position; } - - if (Position >= LineStart) + else { - AddLine(Result, SourceText, Position, LineStart, 0); - } + AddLine(Position, LineStart, LineBreakWidth); - return Result; + Position += LineBreakWidth; + LineStart = Position; + } } - void SourceText::AddLine( - std::vector>& Result, - const SourceText& SourceText, - const std::size_t Position, - const std::size_t LineStart, - const std::size_t LineBreakWidth - ) noexcept + if (Position >= LineStart) { - const auto LineLength = Position - LineStart; - const auto LineLengthIncludingLineBreak = LineLength + LineBreakWidth; - const auto Line = std::make_shared( - std::make_shared(SourceText), LineStart, LineLength, LineLengthIncludingLineBreak - ); - Result.emplace_back(Line); + AddLine(Position, LineStart, 0); } +} - std::size_t SourceText::GetLineBreakWidth(const String& Text, const std::size_t Position) noexcept - { - const auto Character = Text[Position]; - const auto LineBreakCharacter = (Position + 1 >= Text.length() ? TEXT('\0') : Text[Position + 1]); - - if (Character == TEXT('\r') && LineBreakCharacter == TEXT('\n')) - { - return 2; - } - - if (Character == TEXT('\r') || LineBreakCharacter == TEXT('\n')) - { - return 1; - } - - return 0; - } +void SourceText::AddLine(const std::size_t Position, const std::size_t LineStart, const std::size_t LineBreakWidth) noexcept +{ + const auto LineLength = Position - LineStart; + const auto LineLengthIncludingLineBreak = LineLength + LineBreakWidth; + PrivateLines.emplace_back(LineStart, LineLength, LineLengthIncludingLineBreak); +} - std::size_t SourceText::Length() const noexcept - { - return Text->length(); - } +std::size_t SourceText::Length() const noexcept +{ + return Text.length(); +} - std::size_t SourceText::GetLineIndex(const std::size_t Position) const noexcept - { +std::size_t SourceText::LineIndex(const std::size_t Position) const noexcept +{ #if __cpp_size_t_suffix == 202011L - auto Lower = 0uz; + auto Lower = 0uz; #else - auto Lower = std::size_t(); + auto Lower = std::size_t(); #endif - auto Upper = Lines.size() - 1; + auto Upper = PrivateLines.size() - 1; + + while (Lower <= Upper) + { + const auto Index = Lower + (Upper - Lower) / 2; + const auto Start = PrivateLines[Index].Start; - while (Lower <= Upper) + if (Position == Start) { - const auto Index = Lower + (Upper - Lower) / 2; - const auto Start = Lines[Index]->Start; - - if (Position == Start) - { - return Index; - } - - if (Start > Position) - { - Upper = Index - 1; - } - else - { - Lower = Index + 1; - } + return Index; } - return Lower - 1; + if (Start > Position) + { + Upper = Index - 1; + } + else + { + Lower = Index + 1; + } } - std::shared_ptr SourceText::ToString() const noexcept - { - return Text; - } + return Lower - 1; +} - std::shared_ptr SourceText::ToString(const std::size_t Start, const std::size_t Length) const noexcept - { - return std::make_shared(Text->substr(Start, Length)); - } +String SourceText::ToString(const std::size_t Start, const std::size_t Length) const noexcept +{ + return Text.substr(Start, Length); +} - std::shared_ptr SourceText::ToString(const TextSpan Span) const noexcept - { - return ToString(Span.Start, Span.Length); - } +String SourceText::ToString(const TextSpan Span) const noexcept +{ + return ToString(Span.Start, Span.Length); +} - StringView SourceText::ToView(const std::size_t Start, const std::size_t Length) const noexcept - { - const auto End = Start + Length; - const auto ViewBegin = Text->data() + Start; - const auto ViewEnd = Text->data() + End; +StringView SourceText::ToView(const std::size_t Start, const std::size_t Length) const noexcept +{ + const auto End = Start + Length; + const auto ViewBegin = Text.data() + Start; + const auto ViewEnd = Text.data() + End; - return StringView(ViewBegin, ViewEnd); - } + return StringView(ViewBegin, ViewEnd); +} - StringView SourceText::ToView(const TextSpan Span) const noexcept - { - return ToView(Span.Start, Span.Length); - } -} // namespace Mamba \ No newline at end of file +StringView SourceText::ToView(const TextSpan Span) const noexcept +{ + return ToView(Span.Start, Span.Length); +} \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Text/SourceText.h b/src/Mamba/Code Analysis/Text/SourceText.h index 0bd95ca..1b43bc2 100644 --- a/src/Mamba/Code Analysis/Text/SourceText.h +++ b/src/Mamba/Code Analysis/Text/SourceText.h @@ -3,66 +3,56 @@ #include "MambaCore.h" #include "TextSpan.h" -#include #include namespace Mamba { - class SourceText : public std::enable_shared_from_this + class SourceText { public: - const std::shared_ptr Text; - const std::shared_ptr FileName; - const std::vector> Lines; - - [[nodiscard]] static SourceText - From(const std::shared_ptr Text, const std::shared_ptr FileName = {}) noexcept; - - [[nodiscard]] SourceText( - const std::shared_ptr Text, - const std::shared_ptr FileName = {} - ) noexcept; + const String Text; + const String FileName; private: - [[nodiscard]] static std::vector> - ParseLines(const SourceText& SourceText, const String& Text) noexcept; - - static void AddLine( - std::vector>& Result, - const SourceText& SourceText, - const std::size_t Position, - const std::size_t LineStart, - const std::size_t LineBreakWidth - ) noexcept; - - [[nodiscard]] static std::size_t GetLineBreakWidth(const String& Text, const std::size_t Position) noexcept; + std::vector PrivateLines; public: -#if __cpp_explicit_this_parameter == 202110L - [[nodiscard]] auto&& operator[](this auto&& Self, const std::size_t Position) noexcept + template + [[nodiscard]] auto&& Lines(this SelfT&& Self) noexcept + { + return std::forward_like(Self.PrivateLines); + } + +#if defined(__cpp_explicit_this_parameter) && __cpp_explicit_this_parameter >= 202110L + template + [[nodiscard]] auto&& operator[](this SelfT&& Self, const std::size_t Position) noexcept { - return (*std::forward(Self).Text)[Position]; + return std::forward_like(Self.Text[Position]); } #else [[nodiscard]] Char operator[](const std::size_t Position) const noexcept { - return (*Text)[Position]; + return Text[Position]; } #endif [[nodiscard]] std::size_t Length() const noexcept; + [[nodiscard]] std::size_t LineIndex(const std::size_t Position) const noexcept; - [[nodiscard]] std::size_t GetLineIndex(const std::size_t Position) const noexcept; - - [[nodiscard]] std::shared_ptr ToString() const noexcept; - - [[nodiscard]] std::shared_ptr - ToString(const std::size_t Start, const std::size_t Length) const noexcept; + template + [[nodiscard]] auto&& ToString(this SelfT&& Self) noexcept + { + return std::forward(Self.Text); + } - [[nodiscard]] std::shared_ptr ToString(const TextSpan Span) const noexcept; + [[nodiscard]] String ToString(const std::size_t Start, const std::size_t Length) const noexcept; + [[nodiscard]] String ToString(const TextSpan Span) const noexcept; [[nodiscard]] StringView ToView(const std::size_t Start, const std::size_t Length) const noexcept; - [[nodiscard]] StringView ToView(const TextSpan Span) const noexcept; + + private: + void ParseLines() noexcept; + void AddLine(const std::size_t Position, const std::size_t LineStart, const std::size_t LineBreakWidth) noexcept; }; } // namespace Mamba diff --git a/src/Mamba/Code Analysis/Text/TextLine.cpp b/src/Mamba/Code Analysis/Text/TextLine.cpp index bd2c4e0..956a355 100644 --- a/src/Mamba/Code Analysis/Text/TextLine.cpp +++ b/src/Mamba/Code Analysis/Text/TextLine.cpp @@ -1,36 +1,19 @@ #include "TextLine.h" -#include "SourceText.h" #include "TextSpan.h" -namespace Mamba -{ - TextLine::TextLine( - const std::shared_ptr Text, - const std::size_t Start, - const std::size_t Length, - const std::size_t LengthIncludeLineBreak - ) noexcept : - Text(Text), Start(Start), Length(Length), LengthIncludeLineBreak(LengthIncludeLineBreak) - { - } - - std::size_t TextLine::End() const noexcept - { - return Start + Length; - } +using namespace Mamba; - TextSpan TextLine::Span() const noexcept - { - return TextSpan(Start, Length); - } +std::size_t TextLine::End() const noexcept +{ + return Start + Length; +} - TextSpan TextLine::SpanIncludeLineBreak() const noexcept - { - return TextSpan(Start, LengthIncludeLineBreak); - } +TextSpan TextLine::Span() const noexcept +{ + return TextSpan(Start, Length); +} - std::shared_ptr TextLine::ToString() const noexcept - { - return Text->Text; - } -} // namespace Mamba \ No newline at end of file +TextSpan TextLine::SpanIncludeLineBreak() const noexcept +{ + return TextSpan(Start, LengthIncludeLineBreak); +} \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Text/TextLine.h b/src/Mamba/Code Analysis/Text/TextLine.h index 7a5eb22..590ca46 100644 --- a/src/Mamba/Code Analysis/Text/TextLine.h +++ b/src/Mamba/Code Analysis/Text/TextLine.h @@ -1,31 +1,18 @@ #pragma once -#include "MambaCore.h" #include -#include namespace Mamba { class TextLine { public: - const std::shared_ptr Text; - const std::size_t Start; - const std::size_t Length; + std::size_t Start; + std::size_t Length; + std::size_t LengthIncludeLineBreak; std::size_t End() const noexcept; - const std::size_t LengthIncludeLineBreak; - struct TextSpan Span() const noexcept; struct TextSpan SpanIncludeLineBreak() const noexcept; - - [[nodiscard]] TextLine( - const std::shared_ptr Text, - const std::size_t Start, - const std::size_t Length, - const std::size_t LengthIncludeLineBreak - ) noexcept; - - [[nodiscard]] std::shared_ptr ToString() const noexcept; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Text/TextLocation.cpp b/src/Mamba/Code Analysis/Text/TextLocation.cpp index 7662d66..13c4181 100644 --- a/src/Mamba/Code Analysis/Text/TextLocation.cpp +++ b/src/Mamba/Code Analysis/Text/TextLocation.cpp @@ -4,32 +4,24 @@ #include "TextLine.h" #include "TextSpan.h" -#include +using namespace Mamba; -namespace Mamba +std::size_t TextLocation::StartLine() const noexcept { - std::shared_ptr TextLocation::FileName() const noexcept - { - return Text->FileName; - } + return Text.LineIndex(Span.Start); +} - std::size_t TextLocation::StartLine() const noexcept - { - return Text->GetLineIndex(Span.Start); - } - - std::size_t TextLocation::StartCharacter() const noexcept - { - return Span.Start - Text->Lines[StartLine()]->Start; - } +std::size_t TextLocation::StartCharacter() const noexcept +{ + return Span.Start - Text.Lines()[StartLine()].Start; +} - std::size_t TextLocation::EndLine() const noexcept - { - return Text->GetLineIndex(Span.End()); - } +std::size_t TextLocation::EndLine() const noexcept +{ + return Text.LineIndex(Span.End()); +} - std::size_t TextLocation::EndCharacter() const noexcept - { - return Span.End() - Text->Lines[EndLine()]->Start; - } -} // namespace Mamba \ No newline at end of file +std::size_t TextLocation::EndCharacter() const noexcept +{ + return Span.End() - Text.Lines()[EndLine()].Start; +} \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Text/TextLocation.h b/src/Mamba/Code Analysis/Text/TextLocation.h index 355693e..b1bd685 100644 --- a/src/Mamba/Code Analysis/Text/TextLocation.h +++ b/src/Mamba/Code Analysis/Text/TextLocation.h @@ -1,36 +1,24 @@ #pragma once +#include "SourceText.h" #include "TextSpan.h" -#include - namespace Mamba { struct TextLocation { - std::shared_ptr Text; + SourceText Text; TextSpan Span; - std::shared_ptr FileName() const noexcept; - - /** - * Get the line index of the start line - */ - std::size_t StartLine() const noexcept; - - /** - * Get position of the start character - */ - std::size_t StartCharacter() const noexcept; - - /** - * Get the end line - */ - std::size_t EndLine() const noexcept; + template + [[nodiscard]] decltype(auto) FileName(this SelfT&& Self) noexcept + { + return std::forward_like(Self.Text.FileName); + } - /** - * Get the end position of the character - */ - std::size_t EndCharacter() const noexcept; + [[nodiscard]] std::size_t StartLine() const noexcept; + [[nodiscard]] std::size_t StartCharacter() const noexcept; + [[nodiscard]] std::size_t EndLine() const noexcept; + [[nodiscard]] std::size_t EndCharacter() const noexcept; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Text/TextSpan.cpp b/src/Mamba/Code Analysis/Text/TextSpan.cpp index 3e2bf7c..4605bd2 100644 --- a/src/Mamba/Code Analysis/Text/TextSpan.cpp +++ b/src/Mamba/Code Analysis/Text/TextSpan.cpp @@ -1,28 +1,24 @@ #include "TextSpan.h" -#include -namespace Mamba -{ - TextSpan::TextSpan(const std::size_t Start, const std::size_t Length) noexcept : Start(Start), Length(Length) {} +using namespace Mamba; - std::size_t TextSpan::End() const noexcept - { - return Start + Length; - } +std::size_t TextSpan::End() const noexcept +{ + return Start + Length; +} - TextSpan TextSpan::FromBounds(const std::size_t Start, const std::size_t End) noexcept - { - const auto Length = End - Start; - return TextSpan(Start, Length); - } +TextSpan TextSpan::FromBounds(const std::size_t Start, const std::size_t End) noexcept +{ + const auto Length = End - Start; + return TextSpan(Start, Length); +} - bool TextSpan::OverlapsWith(const TextSpan Span) const noexcept - { - return Start < Span.End() && End() > Span.Start; - } +bool TextSpan::OverlapsWith(const TextSpan Span) const noexcept +{ + return Start < Span.End() && End() > Span.Start; +} - std::shared_ptr TextSpan::ToString() const noexcept - { - return std::make_shared(Concat(Start, TEXT(".."), End())); - } -} // namespace Mamba \ No newline at end of file +String TextSpan::ToString() const noexcept +{ + return Concat(Start, TEXT(".."), End()); +} \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Text/TextSpan.h b/src/Mamba/Code Analysis/Text/TextSpan.h index 67760f3..b2e5c6e 100644 --- a/src/Mamba/Code Analysis/Text/TextSpan.h +++ b/src/Mamba/Code Analysis/Text/TextSpan.h @@ -1,7 +1,6 @@ #pragma once #include "MambaCore.h" -#include namespace Mamba { @@ -10,14 +9,10 @@ namespace Mamba std::size_t Start; std::size_t Length; - [[nodiscard]] std::size_t End() const noexcept; - - [[nodiscard]] TextSpan(const std::size_t Start, const std::size_t Length) noexcept; - static TextSpan FromBounds(const std::size_t Start, const std::size_t End) noexcept; + [[nodiscard]] std::size_t End() const noexcept; [[nodiscard]] bool OverlapsWith(const TextSpan Span) const noexcept; - - [[nodiscard]] std::shared_ptr ToString() const noexcept; + [[nodiscard]] String ToString() const noexcept; }; } // namespace Mamba \ No newline at end of file From e82fcfb2499f5af6fd68e82352b860d9d21f0881 Mon Sep 17 00:00:00 2001 From: heckerpowered <72550834+heckerpowered@users.noreply.github.com> Date: Sun, 18 Aug 2024 18:06:40 +0800 Subject: [PATCH 04/30] =?UTF-8?q?=E5=88=9D=E6=AD=A5=E7=AE=80=E5=8C=96?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Mamba/Code Analysis/Compiler.cpp | 40 +++++++ src/Mamba/Code Analysis/Compiler.h | 43 ++++++++ .../Emit/DotNet/DotNetEmitter.cpp | 7 +- .../Code Analysis/Syntax/LegacySyntaxTree.h | 90 ++++++++++++++++ src/Mamba/Code Analysis/Syntax/Parser.h | 1 + src/Mamba/Code Analysis/Syntax/SyntaxNode.h | 9 +- src/Mamba/Code Analysis/Syntax/SyntaxTree.h | 84 ++------------- src/Mamba/Code Analysis/Text/SourceText.cpp | 100 ++++++++++-------- src/Mamba/Code Analysis/Text/SourceText.h | 33 +++--- src/Mamba/Code Analysis/Text/SourceTextInfo.h | 12 +++ src/Mamba/Mamba.cpp | 47 ++++---- src/Mamba/Mamba.h | 3 + 12 files changed, 294 insertions(+), 175 deletions(-) create mode 100644 src/Mamba/Code Analysis/Compiler.cpp create mode 100644 src/Mamba/Code Analysis/Compiler.h create mode 100644 src/Mamba/Code Analysis/Syntax/LegacySyntaxTree.h create mode 100644 src/Mamba/Code Analysis/Text/SourceTextInfo.h diff --git a/src/Mamba/Code Analysis/Compiler.cpp b/src/Mamba/Code Analysis/Compiler.cpp new file mode 100644 index 0000000..1d47310 --- /dev/null +++ b/src/Mamba/Code Analysis/Compiler.cpp @@ -0,0 +1,40 @@ +#include "MambaCore.h" + +#include "Colors.h" +#include "Compiler.h" + +using namespace fast_io::io; +using namespace Mamba; + +void Compiler::PrivateAddSourceFile(const std::string_view FileName) noexcept +{ + try + { + const auto FileLoader = fast_io::native_file_loader(FileName); + + const auto Info = SourceTextInfo{ + .FileName = Concat(fast_io::mnp::code_cvt(FileName)), + .Text = String(FileLoader.begin(), FileLoader.end()) + }; + SourceTexts.emplace_back(Info); + } + catch (fast_io::error error) + { + perrln( + Color("error: ", Colors::BrightForegroundRed), + Color("error reading '", Colors::BrightForegroundWhite), + Color(FileName, Colors::BrightForegroundWhite), + Color("': ", Colors::BrightForegroundWhite), + Color(error, Colors::BrightForegroundWhite) + ); + } +} + +void Compiler::ReportNoInputFiles() noexcept +{ + perrln( + "mamba: ", + Color("error: ", Colors::BrightForegroundRed), + Color("no input files", Colors::BrightForegroundWhite) + ); +} diff --git a/src/Mamba/Code Analysis/Compiler.h b/src/Mamba/Code Analysis/Compiler.h new file mode 100644 index 0000000..4db7120 --- /dev/null +++ b/src/Mamba/Code Analysis/Compiler.h @@ -0,0 +1,43 @@ +#pragma once + +#include "MambaCore.h" + +#include "DiagnosticBag.h" +#include "SourceText.h" +#include "SourceTextInfo.h" + +namespace Mamba +{ + class Compiler + { + std::vector SourceTexts; + DiagnosticBag Diagnostics; + + void PrivateAddSourceFile(const std::string_view FileName) noexcept; + + void ReportNoInputFiles() noexcept; + + public: + template + void AddSourceFile(const std::basic_string_view FileName) noexcept + { + if constexpr (std::is_same_v) + { + PrivateAddSourceFile(FileName); + } + else + { + PrivateAddSourceFile(fast_io::concat(fast_io::mnp::code_cvt(FileName))); + } + } + + void Compile() noexcept + { + if (SourceTexts.empty()) + { + ReportNoInputFiles(); + return; + } + } + }; +} // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Emit/DotNet/DotNetEmitter.cpp b/src/Mamba/Code Analysis/Emit/DotNet/DotNetEmitter.cpp index a737d5d..10f1c58 100644 --- a/src/Mamba/Code Analysis/Emit/DotNet/DotNetEmitter.cpp +++ b/src/Mamba/Code Analysis/Emit/DotNet/DotNetEmitter.cpp @@ -4,10 +4,13 @@ #include "BoundExpressionStatement.h" #include "BoundNodeKind.h" #include "BoundScope.h" +#include "Diagnostic.h" #include "DotNet/OpCodes.h" #include "fast_io_core_impl/integers/impl.h" #include "LinkIdentifier.h" #include "ParameterSymbol.h" +#include "SourceText.h" +#include "TextLocation.h" #include "TypeSymbol.h" #include @@ -21,7 +24,8 @@ constexpr auto LinkerVersion = 1uz; std::vector DotNetEmitter::Emit(const BoundProgram& Program, const StringView ModuleName) noexcept { - fast_io::io::println("Linking ", fast_io::mnp::code_cvt(ModuleName)); + auto Diagnostics = std::vector(); + if (Program.CompilationUnits.empty()) { fast_io::io::perrln("error: no compilation units found"); @@ -37,7 +41,6 @@ std::vector DotNetEmitter::Emit(const BoundProgram& Program, const S ::fast_io::obuf_file file(::fast_io::concat(::fast_io::mnp::code_cvt(ModuleName))); ::fast_io::write(file, Serializer.Data.begin(), Serializer.Data.end()); - fast_io::io::perrln("Serialized data size: ", Serializer.Data.size()); return {}; } diff --git a/src/Mamba/Code Analysis/Syntax/LegacySyntaxTree.h b/src/Mamba/Code Analysis/Syntax/LegacySyntaxTree.h new file mode 100644 index 0000000..fbdf3d2 --- /dev/null +++ b/src/Mamba/Code Analysis/Syntax/LegacySyntaxTree.h @@ -0,0 +1,90 @@ +#pragma once + +#include "MambaCore.h" + +#include +#include +#include +#include +#include + +namespace Mamba +{ + class Compilation; + + class SyntaxTree : std::enable_shared_from_this + { + friend Compilation; + using ParentsMapType = + std::unordered_map, NullableSharedPtr>; + + std::optional Parents; + + [[nodiscard]] SyntaxTree(const std::shared_ptr Text, auto&& Handler) noexcept + requires requires { + Handler( + shared_from_this(), + std::declval&>(), + std::declval&>() + ); + } + : + Text(Text) + { + Handler(std::make_shared(*this), PrivateRoot, PrivateDiagnostics); + } + + std::shared_ptr PrivateRoot; + std::vector PrivateDiagnostics; + + static void Parse( + const std::shared_ptr SyntaxTree, + std::shared_ptr& Root, + std::vector& Diagnostics + ) noexcept; + + public: + [[nodiscard]] SyntaxTree(const std::shared_ptr Text) noexcept; + + const std::shared_ptr Text; + [[nodiscard]] const std::shared_ptr Root() const noexcept; + [[nodiscard]] const std::vector& Diagnostics() const noexcept; + + [[deprecated("No longer support contructing SyntaxTree from file directly.")]] [[nodiscard]] static SyntaxTree + Load(const std::shared_ptr FileName) noexcept; + + [[nodiscard]] static SyntaxTree Parse(const std::shared_ptr Text) noexcept; + [[nodiscard]] static SyntaxTree Parse(const std::shared_ptr Text) noexcept; + + [[nodiscard]] static std::vector> ParseTokens( + const std::shared_ptr Text, + const bool IncludeEndOfFile = false + ) noexcept; + + [[nodiscard]] static std::vector> ParseTokens( + const std::shared_ptr Text, + NullablePointer> Diagnostics, + const bool IncludeEndOfFile = false + ) noexcept; + + [[nodiscard]] static std::vector> ParseTokens( + const std::shared_ptr Text, + const bool IncludeEndOfFile = false + ) noexcept; + [[nodiscard]] static std::vector> ParseTokens( + const std::shared_ptr Text, + NullablePointer> Diagnostics, + const bool IncludeEndOfFile = false + ) noexcept; + + [[nodiscard]] NullableSharedPtr + GetParent(const std::shared_ptr Node) const noexcept; + + private: + [[nodiscard]] ParentsMapType CreateParentsMap(const std::shared_ptr Root + ) const noexcept; + + void + CreateParentsMap(ParentsMapType& Result, const std::shared_ptr Node) const noexcept; + }; +} // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/Parser.h b/src/Mamba/Code Analysis/Syntax/Parser.h index 3561cc4..2167da7 100644 --- a/src/Mamba/Code Analysis/Syntax/Parser.h +++ b/src/Mamba/Code Analysis/Syntax/Parser.h @@ -19,6 +19,7 @@ namespace Mamba DiagnosticBag Diagnostics; [[nodiscard]] Parser(const std::shared_ptr SyntaxTree) noexcept; + [[nodiscard]] Parser(const std::shared_ptr SyntaxTree) noexcept; private: [[nodiscard]] std::shared_ptr Peek(const std::size_t Offset) noexcept; diff --git a/src/Mamba/Code Analysis/Syntax/SyntaxNode.h b/src/Mamba/Code Analysis/Syntax/SyntaxNode.h index 4b929cd..9b45bee 100644 --- a/src/Mamba/Code Analysis/Syntax/SyntaxNode.h +++ b/src/Mamba/Code Analysis/Syntax/SyntaxNode.h @@ -10,15 +10,12 @@ namespace Mamba { - class SyntaxNode : public std::enable_shared_from_this + class SyntaxNode { - protected: - [[nodiscard]] SyntaxNode(const std::shared_ptr SyntaxTree) noexcept; - public: - virtual ~SyntaxNode() noexcept; + std::shared_ptr SyntaxTree; - const std::shared_ptr SyntaxTree; + virtual ~SyntaxNode() noexcept; [[nodiscard]] const NullableSharedPtr Parent() const noexcept; diff --git a/src/Mamba/Code Analysis/Syntax/SyntaxTree.h b/src/Mamba/Code Analysis/Syntax/SyntaxTree.h index fbdf3d2..3d6cd4c 100644 --- a/src/Mamba/Code Analysis/Syntax/SyntaxTree.h +++ b/src/Mamba/Code Analysis/Syntax/SyntaxTree.h @@ -1,90 +1,18 @@ #pragma once -#include "MambaCore.h" - -#include -#include #include -#include -#include + +#include "CompilationUnitSyntax.h" +#include "MambaCore.h" namespace Mamba { - class Compilation; - - class SyntaxTree : std::enable_shared_from_this + class SyntaxTree { - friend Compilation; - using ParentsMapType = - std::unordered_map, NullableSharedPtr>; - - std::optional Parents; - - [[nodiscard]] SyntaxTree(const std::shared_ptr Text, auto&& Handler) noexcept - requires requires { - Handler( - shared_from_this(), - std::declval&>(), - std::declval&>() - ); - } - : - Text(Text) - { - Handler(std::make_shared(*this), PrivateRoot, PrivateDiagnostics); - } - - std::shared_ptr PrivateRoot; - std::vector PrivateDiagnostics; - - static void Parse( - const std::shared_ptr SyntaxTree, - std::shared_ptr& Root, - std::vector& Diagnostics - ) noexcept; - public: - [[nodiscard]] SyntaxTree(const std::shared_ptr Text) noexcept; - - const std::shared_ptr Text; - [[nodiscard]] const std::shared_ptr Root() const noexcept; - [[nodiscard]] const std::vector& Diagnostics() const noexcept; - - [[deprecated("No longer support contructing SyntaxTree from file directly.")]] [[nodiscard]] static SyntaxTree - Load(const std::shared_ptr FileName) noexcept; - - [[nodiscard]] static SyntaxTree Parse(const std::shared_ptr Text) noexcept; - [[nodiscard]] static SyntaxTree Parse(const std::shared_ptr Text) noexcept; - - [[nodiscard]] static std::vector> ParseTokens( - const std::shared_ptr Text, - const bool IncludeEndOfFile = false - ) noexcept; - - [[nodiscard]] static std::vector> ParseTokens( - const std::shared_ptr Text, - NullablePointer> Diagnostics, - const bool IncludeEndOfFile = false - ) noexcept; - - [[nodiscard]] static std::vector> ParseTokens( - const std::shared_ptr Text, - const bool IncludeEndOfFile = false - ) noexcept; - [[nodiscard]] static std::vector> ParseTokens( - const std::shared_ptr Text, - NullablePointer> Diagnostics, - const bool IncludeEndOfFile = false - ) noexcept; - - [[nodiscard]] NullableSharedPtr - GetParent(const std::shared_ptr Node) const noexcept; + CompilationUnitSyntax Root; private: - [[nodiscard]] ParentsMapType CreateParentsMap(const std::shared_ptr Root - ) const noexcept; - - void - CreateParentsMap(ParentsMapType& Result, const std::shared_ptr Node) const noexcept; + std::unordered_map> ParentsMap; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Text/SourceText.cpp b/src/Mamba/Code Analysis/Text/SourceText.cpp index f8ef31e..41824df 100644 --- a/src/Mamba/Code Analysis/Text/SourceText.cpp +++ b/src/Mamba/Code Analysis/Text/SourceText.cpp @@ -25,48 +25,9 @@ using namespace Mamba; return 0; } -void SourceText::ParseLines() noexcept -{ -#if __cpp_size_t_suffix == 202011L - auto Position = 0uz; - auto LineStart = 0uz; -#else - auto Position = std::size_t(); - auto LineStart = std::size_t(); -#endif - - while (Position < Text.length()) - { - const auto LineBreakWidth = GetLineBreakWidth(Text, Position); - if (LineBreakWidth == 0) - { - ++Position; - } - else - { - AddLine(Position, LineStart, LineBreakWidth); - - Position += LineBreakWidth; - LineStart = Position; - } - } - - if (Position >= LineStart) - { - AddLine(Position, LineStart, 0); - } -} - -void SourceText::AddLine(const std::size_t Position, const std::size_t LineStart, const std::size_t LineBreakWidth) noexcept -{ - const auto LineLength = Position - LineStart; - const auto LineLengthIncludingLineBreak = LineLength + LineBreakWidth; - PrivateLines.emplace_back(LineStart, LineLength, LineLengthIncludingLineBreak); -} - std::size_t SourceText::Length() const noexcept { - return Text.length(); + return PrivateInfo.Text.length(); } std::size_t SourceText::LineIndex(const std::size_t Position) const noexcept @@ -103,7 +64,7 @@ std::size_t SourceText::LineIndex(const std::size_t Position) const noexcept String SourceText::ToString(const std::size_t Start, const std::size_t Length) const noexcept { - return Text.substr(Start, Length); + return PrivateInfo.Text.substr(Start, Length); } String SourceText::ToString(const TextSpan Span) const noexcept @@ -114,8 +75,8 @@ String SourceText::ToString(const TextSpan Span) const noexcept StringView SourceText::ToView(const std::size_t Start, const std::size_t Length) const noexcept { const auto End = Start + Length; - const auto ViewBegin = Text.data() + Start; - const auto ViewEnd = Text.data() + End; + const auto ViewBegin = PrivateInfo.Text.data() + Start; + const auto ViewEnd = PrivateInfo.Text.data() + End; return StringView(ViewBegin, ViewEnd); } @@ -123,4 +84,55 @@ StringView SourceText::ToView(const std::size_t Start, const std::size_t Length) StringView SourceText::ToView(const TextSpan Span) const noexcept { return ToView(Span.Start, Span.Length); -} \ No newline at end of file +} + +SourceText::SourceText(const SourceTextInfo& Info) noexcept : + PrivateInfo(Info) +{ +} + +const SourceTextInfo& SourceText::Info() const noexcept +{ + return PrivateInfo; +} + +std::vector SourceText::SplitLines(const SourceTextInfo& Info) +{ + auto Lines = std::vector(); + +#if __cpp_size_t_suffix == 202011L + auto Position = 0uz; + auto LineStart = 0uz; +#else + auto Position = std::size_t(); + auto LineStart = std::size_t(); +#endif + + const auto& Text = Info.Text; + + while (Position < Text.length()) + { + const auto LineBreakWidth = GetLineBreakWidth(Text, Position); + if (LineBreakWidth == 0) + { + ++Position; + } + else + { + const auto LineLength = Position - LineStart; + const auto LineLengthIncludingLineBreak = LineLength + LineBreakWidth; + Lines.emplace_back(LineStart, LineLength, LineLengthIncludingLineBreak); + + Position += LineBreakWidth; + LineStart = Position; + } + } + + if (Position >= LineStart) + { + const auto LineLength = Position - LineStart; + Lines.emplace_back(LineStart, LineLength, LineLength); + } + + return Lines; +} diff --git a/src/Mamba/Code Analysis/Text/SourceText.h b/src/Mamba/Code Analysis/Text/SourceText.h index 1b43bc2..96f3ef6 100644 --- a/src/Mamba/Code Analysis/Text/SourceText.h +++ b/src/Mamba/Code Analysis/Text/SourceText.h @@ -1,38 +1,32 @@ #pragma once -#include "MambaCore.h" -#include "TextSpan.h" - #include +#include "SourceTextInfo.h" +#include "TextLine.h" + namespace Mamba { class SourceText { - public: - const String Text; - const String FileName; - - private: - std::vector PrivateLines; + SourceTextInfo PrivateInfo; + std::vector PrivateLines = SplitLines(PrivateInfo); public: - template - [[nodiscard]] auto&& Lines(this SelfT&& Self) noexcept - { - return std::forward_like(Self.PrivateLines); - } + [[nodiscard]] SourceText(const SourceTextInfo& Info) noexcept; + + const SourceTextInfo& Info() const noexcept; #if defined(__cpp_explicit_this_parameter) && __cpp_explicit_this_parameter >= 202110L template [[nodiscard]] auto&& operator[](this SelfT&& Self, const std::size_t Position) noexcept { - return std::forward_like(Self.Text[Position]); + return std::forward_like(Self.PrivateInfo.Text[Position]); } #else [[nodiscard]] Char operator[](const std::size_t Position) const noexcept { - return Text[Position]; + return PrivateInfo.Text[Position]; } #endif @@ -42,7 +36,7 @@ namespace Mamba template [[nodiscard]] auto&& ToString(this SelfT&& Self) noexcept { - return std::forward(Self.Text); + return std::forward_like(Self.PrivateInfo.Text); } [[nodiscard]] String ToString(const std::size_t Start, const std::size_t Length) const noexcept; @@ -52,7 +46,6 @@ namespace Mamba [[nodiscard]] StringView ToView(const TextSpan Span) const noexcept; private: - void ParseLines() noexcept; - void AddLine(const std::size_t Position, const std::size_t LineStart, const std::size_t LineBreakWidth) noexcept; + static std::vector SplitLines(const SourceTextInfo& Info); }; -} // namespace Mamba +} // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Text/SourceTextInfo.h b/src/Mamba/Code Analysis/Text/SourceTextInfo.h new file mode 100644 index 0000000..778d3b1 --- /dev/null +++ b/src/Mamba/Code Analysis/Text/SourceTextInfo.h @@ -0,0 +1,12 @@ +#pragma once + +#include "MambaCore.h" + +namespace Mamba +{ + struct SourceTextInfo + { + String FileName; + String Text; + }; +} // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Mamba.cpp b/src/Mamba/Mamba.cpp index 70b2ef0..9e9606c 100644 --- a/src/Mamba/Mamba.cpp +++ b/src/Mamba/Mamba.cpp @@ -15,42 +15,42 @@ using namespace fast_io::io; void PrintError(const Diagnostic& Diagnostic) noexcept { println( - Color(fast_io::mnp::code_cvt(*Diagnostic.Location.FileName()), Colors::BrightBackgroundWhite), - Color(":", Colors::BrightBackgroundWhite), - Color(Diagnostic.Location.StartLine(), Colors::BrightBackgroundWhite), - Color(":", Colors::BrightBackgroundWhite), - Color(Diagnostic.Location.StartCharacter(), Colors::BrightBackgroundWhite), + Color(fast_io::mnp::code_cvt(*Diagnostic.Location.FileName()), Colors::BrightForegroundWhite), + Color(":", Colors::BrightForegroundWhite), + Color(Diagnostic.Location.StartLine(), Colors::BrightForegroundWhite), + Color(":", Colors::BrightForegroundWhite), + Color(Diagnostic.Location.StartCharacter(), Colors::BrightForegroundWhite), " ", Color("error: ", Colors::BrightForegroundRed), - Color(fast_io::mnp::code_cvt(Diagnostic.Message), Colors::BrightBackgroundWhite) + Color(fast_io::mnp::code_cvt(Diagnostic.Message), Colors::BrightForegroundWhite) ); } void PrintWarning(const Diagnostic& Diagnostic) noexcept { println( - Color(fast_io::mnp::code_cvt(*Diagnostic.Location.FileName()), Colors::BrightBackgroundWhite), - Color(":", Colors::BrightBackgroundWhite), - Color(Diagnostic.Location.StartLine(), Colors::BrightBackgroundWhite), - Color(":", Colors::BrightBackgroundWhite), - Color(Diagnostic.Location.StartCharacter(), Colors::BrightBackgroundWhite), + Color(fast_io::mnp::code_cvt(*Diagnostic.Location.FileName()), Colors::BrightForegroundWhite), + Color(":", Colors::BrightForegroundWhite), + Color(Diagnostic.Location.StartLine(), Colors::BrightForegroundWhite), + Color(":", Colors::BrightForegroundWhite), + Color(Diagnostic.Location.StartCharacter(), Colors::BrightForegroundWhite), " ", - Color("warning: ", Colors::BrightForegroundYellow), - Color(fast_io::mnp::code_cvt(Diagnostic.Message), Colors::BrightBackgroundWhite) + Color("warning: ", Colors::BrightForegroundWhite), + Color(fast_io::mnp::code_cvt(Diagnostic.Message), Colors::BrightForegroundWhite) ); } void PrintInformation(const Diagnostic& Diagnostic) noexcept { println( - Color(fast_io::mnp::code_cvt(*Diagnostic.Location.FileName()), Colors::BrightBackgroundWhite), - Color(":", Colors::BrightBackgroundWhite), - Color(Diagnostic.Location.StartLine(), Colors::BrightBackgroundWhite), - Color(":", Colors::BrightBackgroundWhite), - Color(Diagnostic.Location.StartCharacter(), Colors::BrightBackgroundWhite), + Color(fast_io::mnp::code_cvt(*Diagnostic.Location.FileName()), Colors::BrightForegroundWhite), + Color(":", Colors::BrightForegroundWhite), + Color(Diagnostic.Location.StartLine(), Colors::BrightForegroundWhite), + Color(":", Colors::BrightForegroundWhite), + Color(Diagnostic.Location.StartCharacter(), Colors::BrightForegroundWhite), " ", Color("note: ", Colors::BrightForegroundCyan), - Color(fast_io::mnp::code_cvt(Diagnostic.Message), Colors::BrightBackgroundWhite) + Color(fast_io::mnp::code_cvt(Diagnostic.Message), Colors::BrightForegroundWhite) ); } @@ -93,7 +93,6 @@ try const auto Text = std::make_shared(FileLoader.begin(), FileLoader.end()); auto SharedFileName = std::make_shared(FileName.begin(), FileName.end()); - return std::make_shared(SourceText::From(Text, SharedFileName)); } catch (fast_io::error error) @@ -133,11 +132,9 @@ std::int32_t Mamba::InitMamba(int ArgumentCount, [[maybe_unused]] char* Argument return -1; } - auto InputFiles = std::vector(ArgumentCount); - for (auto Index : std::views::iota(0, ArgumentCount)) - { - InputFiles[Index] = Arguments[Index]; - } + const auto Begin = Arguments + 1; // skip program name + const auto End = Arguments + ArgumentCount + 1; + auto InputFiles = std::vector(Begin, End); ProcessInputFiles(InputFiles); return 0; diff --git a/src/Mamba/Mamba.h b/src/Mamba/Mamba.h index 5544fa2..59e1214 100644 --- a/src/Mamba/Mamba.h +++ b/src/Mamba/Mamba.h @@ -7,4 +7,7 @@ namespace Mamba { std::int32_t InitMamba(int ArgumentCount, [[maybe_unused]] char* Arguments[]) noexcept; + + // just for fun + constexpr void MambaOut() noexcept {}; } // namespace Mamba \ No newline at end of file From c1b580d2711bcf1a8f8c72c0543d4989fd6cc5ed Mon Sep 17 00:00:00 2001 From: heckerpowered <72550834+heckerpowered@users.noreply.github.com> Date: Tue, 20 Aug 2024 01:47:08 +0800 Subject: [PATCH 05/30] Update Jvav draft --- docs/draft/Jvav 24.pdf | Bin 94013 -> 168674 bytes docs/draft/Jvav 24.typ | 128 +++++++++++++++++++++++++++++++---------- 2 files changed, 98 insertions(+), 30 deletions(-) diff --git a/docs/draft/Jvav 24.pdf b/docs/draft/Jvav 24.pdf index fe43b29e5bd45715123bb237737b9b0c09b1bdd0..52970d15dc29f687b795d3935ab11cbcd41240de 100644 GIT binary patch literal 168674 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

4ZS2^#r zR@5QejQhG7*T*5HPsJi_jHotMWIq7cF~4^=C*Q&>+*So(!)?%T)YaLr;droMgZ|mn z7>x3ZnGDo2@GJvgW#AtfaPT($PihI;K!Ik57TKXic4Ws);>(=nZeFFM3?z5^_c8Ec z&RoF2?>XsNR+WDVfMdikTvBJPIVU1HNI}fBui2*6&J<*9Qu0W%YzJjT*d}}Bo|eV4 zzxBwET4uKys~R1v3eMvx#AU$eWWwH1F51O%^K&Obsb|w`pb(%6g0cbXCa8mqcWB4x zy2SZ`9mZaBJm*s#`(5Fg#@fYK&de+nB%Dstk0}aTSkC4-$i_! zQUO34YkDR*c^v~@q=-tdrGajB0D=5Mwrb%30NYrWon{hxQ~}t(4(MM8_pgKd*TMbk zfKGI9|2nvT9o)Y{?q4DIuaNs!Nc{^!-a^&C1WD2-09lh=UPKfWfKMT?k22MAFKf9m zQJ$D6OiUCSa{^FT7mIRCCkXVNs)q>x=&f$}M~yv-fEulCK27OXogV;T8w7gubxuA+ zfJi@5na9^KMuZh(-w7#U+88@yw83^lYdh6wo#B?uF|dMxqX_If4jnYlAO>`bS~VP% zG_yEpI?4j-j36i{f~w37ID)`hhGCsF)A^1IpeywG4(gXAGsu!L$N&s7R2T1Jvh@%H z3B}`}qBw(&e+(6?CFYwI;DBPhP>dI3cP|~IniWT=_t(!c|FR01K&ZC2W1Khu zQ+$lG4$nVSYzf4csI^ujBA~#Is4O>u7^fFQHMdm**D3%xsyg7P>eSn-0k|F?6t7he zDfOIE4=MF(3~mF=q*Cr@;8v)VirWalE(n@==;UgbDBvyz9%3LNF5{Rau#`9gTiPyW z!qPWGtFa4I`k%~qs*Xou5sbtlB`2?kR>UDpL7*d=KGjAP46*L^mbUh&sg;hn6nkw` zN4dy-l!KzSa-P{R!Pz#Q?;;a&*>%@=i-PV*=T$Y~#WlIX>h^GUIM-9KXmeNfWi!qUwM03ac4_?wkKQ} zE2>$&xHPY3abIC=q}W|@?V{|m0N&!&T~-vkV+nnXwTy(1;pRcGf^~0hC4WW07GGucw0y zw6YL^OYLhcH;_!A^ix{Xcn*L$)--l;^201CtYO(PNj0m^g9?OKZrB&jOt zAQuG&B7(U%AonOq+yec}g`FaomFBrxX2{htL+JvUp)^HixE;{pewG<-=lwLP@;k`D z5e9B#Aiz3sD+31^IKqH~HRk~qH>?a)FyLg7-^rSzRV9>PrlYACk4g>Iz5?zp3gn$x+RNiZOqdcf+3AV3}sE~!k zsfS3m@}&}s%B7}ux12v0Z);Cdh&^RJ8=K27Zz^2-fd~7{T{mu6njKobxS%~+bX87C zd3N-g9BDGiC7ngBRr&HC7hl&EE@)fRGV$bxR@=JWZT(wX3yb`9eT&N)3Ny>{tvNXX zOW!(wO&6~H%^N)l3}=wXq!QX7eLz_utVEm zOSi$6ZiDj%n>wb(oH@ju+F+Np0kyZ0_SmX=X=B=FQcHCU1Jexjv9{(OI@4B~ZL8ub zHnDX_0)T^bp4}71nqd~qz;T#?Q#OM-*$n%inNAT8K)3_K0}#Fl;YkSJf$$uJUqJXR z1n)jNCsBofP~rkH*$iT`8G2}j9-5(tX6T_=Sb?8G;%-*Wxl2*g0MwKLHD!>U)&mf} z2;oTxcwX@wgkM1TErbkJQwG$OLCRP>RnJg`9Z_UH0DUt^fI|)km06EMK=tdh5b(71 zH3)A($Uy8uQ8*7mwUP>LX}L^_uhn8=7X!an9Fq&%K&Q1pyOC9Zm2bcbG;ppw@7N3* z7PFGe`$qzlHL8h6M(bT4<>P%klh0$rfD@d&In6=<&kLUwc))BS+kv-Gvx_rq2LMTP z6@(55DQm;SC{OSn?ey;$WQ3*pSVN@gxrKGIKAv_C#57Xa* zK@xwjC zsA~nq_uTJ{M&s{*Cy0t}!*LRJH9HVdq-sv6GNL%P7x`qZ0fBLK8m5W1i}*Pv+=n0_ z-9~oIs?Pa^5;4%`u>?X4LKmJaYg3LcI2`H57_!;60!&AC_(A|)2*3*gNDj~oc$%Dp zywroFj;5wXxM>kuan;GPYOp3XAGZ@@hOFIjAcv0RCX$E4otH8pUX1Xn@$ZHdFO7e< zQj2yox7y97DO%8sQ4hM+=6wo)GbD8$M=4-Nb*h>dlvOBG(Bmj9!3LEF&=P=@gm)iH zZl7c&K$1DSk8$dD2Kt!a>0_qm!FeTq0Rviu&tagA6`u*<$qwSdI>zo~KKDN0ag=R{ zEue*t8d+IU=|j7aVnfowcGReqAd>hrXF--D9%(e@)^(QVR265puTM04>my6DKT)x@ zy?j}7$?VC!(}CXt=7DvlA^4rH`r2JkQI&=hC1BMMrCDpLy^U736|Cu^j+5$ zFsv5iudH@o#gg;C$tqi1Q&OGlcpEL9WuG)G+2Q7j!t!8-$@IFiJ6;ZQ$7Zz4l80~- zPr}qWSo0HNgN`-o&=M6PUS`;J(ij2CL{}p=&bS`>Ge~{5TvBDASrN60nU(2=b`6lc zqOLS3i9$*A{-o_gR*ZP_EUMg;L<)7PqZT>adl^c{U}cU}OD!K^z`-1HJ_D;5_%s8P zylmPS*f}4g?I1QXa2w-L8w2+1n+F)~g%V zc7_9Pbv9Hr_giBa=#^ho%LB@W*so7I9ndP8?-+9A<3vIHKtcQz(S`Y7jQuphM4|;# z5Ut*P`~r*Nq)D(NY2q7$&;`M)gwSjvhS^YLK2Wg&82N0q%y;pKwIi^PYANSh%DI+u zuBAK$yEHOgOd?Yl5+Dr0)0v!+(wd)TOfe=IxQ&4axXF9i z{;C=&DguicSVbpMni2qMFypCTMWw{!4^y$JS<{BUsn}N8x$TNFZ~4;e-?!G&nA?{j zmt+6P!Y$6^Kb# z#>t*Rsf1SwWesRfFW>vYUlun@&bnMw>1;$?#?agq;xfL%^NGGOkKU+I5Eb zNd6JpMHuTOBAL9Xt)#MMFo^xIAV)^cqUI>$7?jWuB{RH=OTn8}w&cIa-^he#_LW9y z^30xZl_Br!*)_&DR=u+7tyL-W>X0YZye2IcY-Fm;R>~%|;2dfm+`I!$r`Q$z-_NU! zjsjv3P}Q%iv~!hquF_6b+SR;z7EE74ps0=n#)Lw_A2spRaHS(g46t8-0Vn7<1E>3v z^Okztl0I+t`FT5&Zr#+QZn&J`yDSg0VMx*t84aYm_}&ZJM$J)PHS_cHZPJt7EbX4z z-(5Zc^L%dA?02B@r7#<%bjR>1l$Y&nsg|?@yOYmEkSq1lnTWClqiNmE>cHRew05xK zFKOa-rvfarPk2cut`6?xH09TGy_?bCcZ>$F^Joa__a%pRew)X;EvCr#2ksrf8(nyB z=-YE|$|&^DZ{(}~`BeX=_$>QV44mP!>=ywzhnAR1`1f&le5?Vbd^XVj_&`_fgOfa; z(lq1wc%Cxhw1BGJCx+Ob(@RPz#aGj~9pT}c;!#?}KtBUX8F((uYH*yIXh0M7>B1RK z{uBc>JmM^I>lPW%B7<8rZ+9qFi=<#HZgq!%YS#L?dstl*0-%AepImY}=0zng3F1iG zgT%-+jf@(|cB8Ro1W=`%>pyX(!TkFvJ_3OTSg6uCQop(Br(+kqYFh>q-{T z38C$ti6m+C!eUR})wQYnW%`)=2i8}IKY{Q|b=w84QLK>1s&Mu*#04oe zj8F$|33xcjlXnbr|nh*70D7&}} znCJ|p8u&Z_PbkLACD058t%u4Xv_j~GupWYSAIkI@+_)dZ!>e=!LRkz7CH~`01Z*AM zEmFs@s8&EDY8V8x#?+>fXg;|g!tD_5N7G0&!h8Y%yv6ZD2(Mry>3G~~I#6Bh630n* zBhs}J^GnT&5!Op^2NdDP2)B}(K^vm4a@&ax;e4tX?3A1IF=~k&U@Tcd09xAI&J^n= zPD?OwgaB!3E|FcbS^6R|>5&l`{@}(9nWd)&XJ7l+#%=D3?+wbGa>K6|E&BEBS7sl0 zd&!cwaX+XB-Sj^jxHPKdlP5t8x8o_Nwka!4u@Jz~y^7nAo3gs}Wh=~9%-M=nwsHcF ziDG@1-3};PjDu?wC{Zp>gHmx0{`s7gvO zuR|TOVwMuMQ+S|XB@kk0Sg?i4uTa~27XWCZp!MoCDchV@n+Gp4l^4-T;ccn_&8^#u zniHv2>|s)L6vJXLJU%z6owq>Liitj0eH%nX(S_SZ z8K80*Jb+*sD3rlSWdx}x%a^E-X!lhp88b)zncZr1xXqc7nudY{;oiMh7OsuV{!4CM zWwE29I2!G1$Sr=Ve0A7U;M|xMDa`s*_pN)Dxtz28!P3es>2|km9BHp;RkCL7+;8P; zKy!T}B7ci^no8;jGq&ghpsfn9rD?cKN>Oydc3j1XWoJ~oiGc?>X%jOx2lVlW6t)=@ zFloC{w_RXQ<%=B;%v(n}nZa-}=j-HSK_@f3PF8m~sUUP)BiS|~kF_LWem|_R!B&d2fzL#QuP4}ZV*W696;$D z3aJvT|GJrh1luKK0Fcji2{)@)8=z(hpk@hVD^XK*7cZup8Td2-uw^%sl^@%QYkjgcuO(KQ*;L#f>RVi1Vtixv8}g{x+~CV6wvNY@{b1|N+84_;3-*wSDBM%BNb}k z6Un5_Px5l|BLE!b`^d=$#TjRlQIWokm#v78(pcHZAhrZTj4lMwoJLaSRO=yv7d0kL z7J~ZT5QGL~HMS@PMh;E2Z<>st9gysUWFOS)BZFx37IlDJOxaR( zVt7?{u{u7sB(GD^Z3RSygAnje{1LSCR+c9&$nN6H%qdo&U(_lq(?wNQIi#`L>#3}+ z%5Ll`b4RZnYOQGW7iKjTmG(3hw?&ID_t(1oZhJ{XN8b87ZfJ5lmS#Ak{e#UtOAFjc zLtt(VAJ7ocuNx=PmcG z4D4phwcjytC*RJm)V6Hsz$-$=3q?S4Pr#-VVcWKIc;v1OOY67|bcc&`Kd~t>i{c-R}!O0OCSJC zKpU1+C_52b+VxPAda;U2&=yQ3WJiU2uRn+P-U>EN3br?^{WrN{!1BnWxX+ zM0>H>>1e!qPe*m9(CbKk$3R~Xb@EZv?jyqBI`RTkrPk3HYxTDwFrKE&N7^IkMu4H_ z%BmP61RiHp?^3b0ij~1pKF^AZ1vg59?{wzCj#3aSlu{6{Pxj!&>IjIy5mMMF zl55htE3%S!lanNFoaqvx%}%ef`B%iY8nAJZx=fpP{)?nE3rJ~}8dD3~oX%U}(@{Xh zyd4{wTaf7*5mr;F)uuJZ^0vsw`S(M&E}@ox|ROR+SdjuuD+tq z<}GS0F1h~dt3P;cgFjrGyL_#bzEW3vZ;@AS?e8~dm4`C|S-{rJeQd5l{w16RRmis# zoy}6dMUZsH7y~j>1?Op6J6c4(ooy?b!sz_!j3$eYawwZRF;bdUm7q2{1qVP7K>vVQ zNfC}P;ts+HAP3V(5_(YSRHRNTwgG?_L=Hi~yB|b~8vy8LgD=5mV0cI5tctaemDp)~ zKuin)!0(V@IhTr-6-dvNL|G2Cmn-i)<-E+RQm9uMVpmxTy7@7}pAwOe5%~*c#4L;` z^C}-O5bK>EA*&a~OpL_~iGFy>q9?qUt%d_(zHL&hEyM$?E!ZWHC)V16A&@C2`Q-Zu zU)bFVM;H4c7+ZX#X`w4gh-$t_dviPSaY0)JomDp5{%OD(C~YY(ZqCW^hjS|`Tzyx% zR=RBdaAPFAG%u&IuDsM?i)YHO&DNB6#R?qG4x44=8u{h!E6Ur-vR%$jUvo!wH`+?f z)yaRA=YfPa8E>8>$1{0Eo5HYYG;Mm8dFg6qm>*lfT_+ju3{HBDV?L42Z=;3qg$nO# z<_B!d4=e{@qr&$KNz^>?V%nyNmgWo4ytN8+1y$k=2qtw&qlz{MQu)LIn1XN{g!{0I zSk9Yj>%a>&RpRS>JLw;ILs`Q>H3L6V09qecfo`n|XiF8)7G2yEOc6i9`H4nC->b+m z1I@cf6|e_@n;{&A@DNIx_}+0=mUQqQxEz3us2`-;t{zcE8!Wo#^eA$yws0D)1|o;( zs#A|v1Me*@sx<^C>rWjMq8MI6#kd}d7gFr3WQ1lB^uZnvz9P<hRk6ah%ga~Z*w?nIaQ6AU#_F)M*&EHR?rSbC4{pCMoY`S^W!hI8g?PQJMf@adc_tNLgQPsrMCSob*BiraloEzh zer+;rGeuI=AU2a+zr<=U4&}EsRc3Vc-`l^`>?&{Q2sd`Px@A#uEW5mK+NdoyVtY(8>d-LN3i*-#J^eSA1cRYaFjyjIW;2bCDwsUl%{>BqY!-}_ zTja|()L6L`4f_$3_Ny3(GSJ1qDP`ZDN=fMKR-JYk^QT=sc(|=!+Q`7|=?)4M4HAm) z)e1*916QS;B&xa%uG^poUAIAJjJj@p>KNshHZrhNBwfAC-@ZimVJ>oBg4#tW4ITL1 zLzb8NfMgm~R6VHl))XzqK!`{iYPo5yy=>{yz?uLLD+$gr@CYUG%xB}gW~WT_0#wkt zuq@?TO3u*yXH)C5$;XsQTk7=kf%g;x8x-JxZPyGd*PP^S&2(U>HdYd{Q&8vL{xSc$ z6?Tu^Q(Rf#v!`Iu`QL2WBxO%lSzEbrcpjbf-uP448{MY=NLzU+lVqbywm6S#*jCz; zG6|Mx+A%D=V^~;`q6~+nHXK$a3u3zGg1f<1-b8;X^kp4%s&*|WxA9_sf|L0kv-U?} zQWPsDl(GC82qv}lA%yD5&wKC#x9RB z_5UgZ%Apl1*y;2yY0vz5eb$ObB37kLOTCX^!ofq$Nwu)im1UDUz*ILC^bBdoHE{r@ zC>GBr1^H1XHHH(2t#;97({4?1^(CE933jydZ3ZeBc!hy(b`JLl07uz5oR?yeR?_hQ z5`f<;vK3DH5MV_vIy$`;!X5~y^XGdo7kc^NLcGeans!7mPKVnnr*_!p67pTIFb6Mf zww-$XX%*}Z#;SH7<)aXh6He%}P`pK90&R!M@Ms%^F$jks+@tK*EkKAQa6wWX9^>Nm zlJmjzH`U>>l}~W2e7e)du03xD;C`B}hQ{`Y4YzSPIrYdA8Tmn547Tp;YQJ{pZoi8J;rHeG)b&i#|p!d9k94Jq1liA(uQ z@YXS!A-w|dfc^}lxQ8#5btSPHPw~9y`=$mab1{Tf5Uyp1N)Ie#?eAji#XJUVnwBKl z_&a%vt4afqY^>mz2N=j%$l-5=zUuBZQ}>#oE@= zyBIh?-ulq1h!mxKGdy1{cx2r>6vvLlBp(`=Pa{|kbhm#SpGgsmh05gR^Iqqg}xNp3hS&DFjJ&6>+@@R0Xwh#+Xeq~>^wzOU_`}2{@$kD z-ZOuXgHxhaaV5zcl1=a{lH7j*AB$hX+O2nH@juR-{S^wZz#&T>ypzXPS$U8@Ptm&q zW^+EN{6u1LAxI8EaUqr%LcFPj)coJhF;A-)i})ZYqfj$NWlks+71k7nqI7I8E3OLY z7~w*x!ltE)q-+sM%^(|>*zNw@yoQ=c#^wEcTCHYpd3|fBzQj`%Ysrr`db;|%thSu| zK&&p3(IX2YZT^Cy{K~rQ*;8_6gEvy>>uB;-6#Hry*YwW*K-L#UvkD3es-phcr=sEr?GZ86el7^_Sv zw7Y_Z3V@{CuQUPgCfo=ASm7R*eCndk;N{?Cz^_)|1T17;;j{vWc-^D$zMd~ye~9IF zUeJ>)x8KVIp!cEzye&n5@4v!qEhx`#s*7a8x@s|-U1jwhrA><+%jJ^nh`XpPx4b@Q z_OxC^4NHn^X1^wq=WySLHG?)W2TwxV=kNDxAMQ56KG|br0??Ckc)gXo|2SX1f0*y( zuSo-xUM+(OdW(|WE zy)GY2-gqz3XJ^{YuQE$i-q*D5RZAkR>`3P}K&AVb9ZlX*FK2e*TK0FlA;tMQJ6^+E z-Z?4G&zq`OY;CLQEcaISUf))KS!LEhT|>CDzM#A%yd+le=`|m^p`{>pS-Ag$+uDm7 zmNa&D#RhhDGQ6AD5{J_NEz+guMXZ}4l2s%=1W3L7+667qP|uX zv@^|g^A)2d46GmkmDrk!u3!aDyS}%H7EU>8`Hu;GQU7%wmNg8VVc>BFlA4S$2F|jQ z;~wqW58c{H+JuXAC1|*o!(8-Pw3$;!vK3rQs+S*CT?JRCf!7%rV+TO@Fz_PZtRu$} z?`k47AEC7lo(m5Qve;%So7x`0TTn^ssa)lCGHH@m1Toh}hDfWUu3v5_XsixpG-j0rDwlVJ!$5`5g31$FT(jxJ+nQar zY2(hq>X`r6u8i7&vEHf{q)So2*`L7~9N?_{s7cgZ#VT&c=i=-N16&nkVjn?&FX3i|BY$ymt3te?r4fh0U zD?*OhALTXIm1Z<~>$57Cw}ncck%ivU!t7vmNBD|cclTHwPV4N(;`-*mFC5mUYi?ZB z(2&%HeL%h~d~(}K^5bAAkes4FW{<=QvHo3x!nor;gq z)R)4?XhZG!iO<4_tc6N!!h|d@+2+%gWs^RWK*I-H3In5+e{~ELFrlqupkUq)ISTeP zg;wH00z?sla*xAjZ(bGXMcyN`u(T>SCs+QpVRT1lkHKp9h4VeQXidOt+zI<;g%FO;_kE< zRYM`oM`5ZK+QSU(-R#wE?I$z|{tb#2|ttJ)+;j-tQk_341ziZD-;H zW-b(5Ng0(3DJ6HwA$*v>TZ%8u zUm8@`M$KuL2H6}8Ur1g%KT1RzbrC_WutZB7^{ER+E;Hhi`JK3wRJS`=DSrOXti>O7 zH^5Dhs#dvhU^^+ipqQ_}71bqe&9;asX&n~8lMmG3MV7A$4CH^v^T95|l#`QNa1f4`Vf{gqRdpLWc$n{H&CW%$K#4F zTtr;Chbe|PUFV0!TbdVma>2!_q-(wsR@TK>s$P=@DD7Y-^Q20lm#K82XfhBGIGoR- z-IMYaA5dBKH#3u=G^NSYlo<4cZSF(VCPBJ7h2JT5Y z@AIRXR*a4<{2+Pg?>}V%P>2so@bato{*(`*zX!kzDj9csKeWZKOwrMwU@twKAU@sC zE;00J0AF6BMt_O@wD$q9f!(;@#uuGZ?=!ujE;^;Ubf@_(07 z+JdAr|294$$^m*;!K#29Rs~!Oyy6}Rc)fv`tPcb5DZccuik&fj7=TYHXN)#+JpjWH z-bXhed?uwi$5TeUq*x>)tx0~Y-S@*jYfe#aV|{t%75!aiyUpBb_Eg5&igU^fy&22k zNWX>d;`{`1HV?`pqt+6+e!F= zGFp?zR6p@np93)8K}Tb$->^zLnRn7=Py=BxgjEo(MR!W-sLlaLbq?~ub3~x4d56G5 z*=Hd<58*WkZ=tgubyVjdS0RKlcXA~LUy@IL)i0LzVF+cmXJMU^g%^{B+h`$IGakn^$_9^rXbt~;XVkThwuc1ry%?g zLMHm@x>P3e#`E`lDC$H&`5HDepJL{2Xy9KtbFBhg3o3jC!W-lRj8>l+z4WL)___Qa zsCR9kq&Fu|xXG;lytvTy@D~{nbjSV#eSzD~q)i`}-^IY2tXkPAkUE-(uHccbo&7x# zcbx}nQ!D5pt$-L-Kn!d0hA3vhCHO3a=OMfX;VsmG;-!5oD)nyZ@3Cm*Aj}H5X9e7| z0`6G>_pE?>R&`~TBVkel|LOWPB3emYAauABfCrVhU?Jyk8|Xou>{=94uoE8kt8-g? zLEW367tmpT2S2dyIYar8voYUfOCe$oq)3hwnzdlp*T%j2YZq2>_6Emo!Db*AGGb~z z?J#N|-7x!1XmH@n)j8GGBoz}M6pcub;8Zzce>iMAQq&@50a z`XRT#lCmhpy#7{OR`OQ)Z4mAgc(>RB3(=B%%Z`n?R3aB?S9>IW*ukQF`r-HO{Q^H= zWP$aGhM#zR10CL{EVq;Pr&}3uPO%V$KF#lD^h4lbmYsyQd$PaK;Ua1Li z6^oeAClsN-GKz&IWP;p-iXAN@ z&JmEbqHxeT@{178L71Z}+dauMWe3?npOfSHkZ$7?o2l+(;2E~&LtEARl{FtCeiq)xP!DAQw6LAu&*=J?y0778 z6w$}8`3yK1IKaRgeEe{TmEcDiIE%n|s*HDOmT|$+(t=Zl1=_m#!zVmpa_OVwY?2{Q zkaviAGtx(yY$lkZPVj1OVPJ@Xat7{GfFcX16a#q9BwA~ZELsajlIrkg(Fqz_G!;~!utOaq4%-~dh~06LC<=!b9}`3&sA zt2;W|rx_TfX_7wPzbYf3o-#H2Z161qB4(DApIklr9~G_ADF55C#j8sUbJgd8%Y9+n zc3BEr+p4RtnSD~u&HnS?4jCqSbMBY;AMA4;<8YdPj#CRZxY1Oh5@|yQ?+9BNI4mSz z7SS=E)0+jk?J$vN4vKdQ{UwZ_0Psr)zgK2^@8a2meU{R==CLK_C{LPldNl8bgEDEN zjMj7y5>ZZZ&T)p(;&Dcc28z*MI!xju@5`Ulc6LdJ8*7-p<}oEb4Zw7&=M78Jdj>H_ zUkBi6{)pKR0eA(%8|u#TJ2~2bIzFpawCq}=C&jiVNwoHB5|#A2aVp)}M)G5)PcYzR zx^t9)0sa8tbeaXRwi{c(SG|Mtg?UdKe~e=db?oS?RIV~?+EvEi-?+XryZYdDKRB>{ znZM@t>!g@DylBzk*JuCm;F2XIn9TiZu35ecc${N;Lg~f*3Xj*YoWF)?-YCbc;B{H4 z4ZG0AUf>1V?34#jy?piJJ465;WZBUL&7%O|!?O^chwvJNw;)*2?$1F&ZVtSh0~9$2 zwt^hk3UYwHfn_<9lH7$7f6%4`KX!swbjf~WB>azRXjOCcWS8AaxT1e{b44{ z4#t&SKH({YxE5v)dzt;*Fz?dU&%3SGwC$sU^^)1mz?}?io{!PE9HNdYk&G`ts%y5* z-?CULzA*5s{N}dBC0ThHxlUKn;<60`N4E{iD`qcm+_JLHZ0R*GSq|$SX}~P}cN}1+ z{Bi0xrpT^UQG^wD_IwDgShZhNe>G< z_udY@w{!1xY}zMp&}pAj=C#kxdgNNq?9bYy#Xb9Yuk5Pr?VbJGDy6sU zpUanDHvUG`$*1)fu(mQca1?;knj7${vq{CCqlvvXWBo$%9t`_wJ3(%d%(RnvlX_;= z{A!?T$3&hgD^IBNi9B+jd;(Ok)qHdQIGY<*0nowbhIWcYdyY)~;T}AasDtwB6e`r| zL5-!~Yc8N0JBnFDt8l;Os9oyvrHcrzx|8WA7pzwDcH|<(ySg<{r@zwU12wDxESy1K z;b9+Y--VFMqdAaUy^u!(B{sf|44~Kwb;bPA! zUrWZK`n8^h{32VUqp3jpi=@es z$8s@*= zW+Ft*LN;sPY9h=Sk7|E(Q`TBGFd`_W9_*T7QF5+VD=; zb47Xi1^HzanVw*&*<|%(8IwgtWx>+c@_;$wtjw3WVr~w{MDB+%sWeJ}RT0u^;3nNk zTbA0eNu)}32c&O+S=pvibNZ+0ki9|quR?ztMvn1qQEj+S(l<^jlV`1-6gv%7lu~qg zlGjEQ?3+G8&PzSXMVdUN_OfZyIX1D2rJ3Q469Z7ea#sawWGbkl3cSytE<9^T7dHuY zjX|ArD_)^&nkuT~uPs$_`ITICCBIzB6;*OY>ViTg6jL>gpC2eA#JZ#>4If7MQX+CO zA~)rpOC?5BrpSQvmkZ}d&60Ey!0t7CUiHN$^(AE0Jv?YM&nT;o5=txcs;?3#_FxAP z%L%@pxkDfs(3Tjt3bZIrKA7P_YhpJui;~AY=n)3;m>E4nK=T409NGnkGU~G7b=b%! z9l2#GUO1d9R=HMXR<`%mELs}~1y@u>>Wi~&zhBqC;%NI-&AH@-V@;3zTKAHH24Ajc zQI^MF-Ws0GlwYHDkG6mxTJ^1^HCsJP-Vk}FR}n?O^W&4qf{Gu$?@MpZMdqC5513x2 zGd@G8KX}h{>+G+@0rN-ZBC}6J`m1#BF!^VkG5$?7@so6lcl?tXqD^MZeI_k#1F^!Y zG`m;?p$kF?LM?<+2r(Vk3*j;dTcDoJm#V|4pL@}$6IDh?EH_3(m7Im}EAlX?>I;aa zGH34F;=k}`tVVyc@6yL#h1?A>SY7-j=@=QMnwRKPF6ak?4T)q9yW_SYmudERsK)`=xwx?pN|FbF;D! zlzCWR|J*mldw=i!z4!Ot-+O=W{r&&x?}Qj;Q1;Hl@BO{^_y5wL0kYsFQYtR`?{<@2 z|7*d2<~uF-+iL7DWW1cY!u2E1hU^M|ng8C@e>t2@4bKjL;q&*-}2CV|Ni^_t=KvL5A`3$8Mzy@db{YlB>wqP zm127qPkP{~MBc39g=iK+!xC~gYuF&uR|T6u2+h1$gAxg#HYB`o15imS4@9G9sy`$-ME#h$?PSB#Dw98c`pJsEm5)YQt7p5CU^ zhn{Hv==kXHjidVq>q2Xy>-UbuhvNuuh;EMWOza)qpI$J&wsUZAV)!5yJvEZpA0M9> z91cxQ#G}x>(2miOiNpkS7E(Jx6O#vr;}eUa=ewqc2ggH$BSWF>qr*d?193GZ2NILJ z;hk|9nz7N5p~T3pP=dNM5!yLAz87kon1q)G$A=)--m$64_&6ktOzJjth9(b;hDHX* z$43w7%0g8aR#qJv9FK<*Ba`uwq4*G%8yXtjF|{{70u7klJva%?+c%YfJd-qy6Y)t^ z?vBB+$;9Z$yA+J&O~!9hU7pxG2=hHQ3blnM5;w;uqM>y#{6q1H#I6zS!uG@n6ovDX zz_MZFaKr#D1}9-CLxW>uahRQv9dR`@dq;=j<0FtC+D;Yhp4vM&0t1}b5t_hRfmahd zsYN?>!;3p$fS_7v-@#CPWH%Nx6dI22N^DOICngV4YbK!0@xjR{81v9}XxLC3+pr&o zLp2Dd5=JYueQE;RI)QD12^qxH394yq90zj<#${^f&d^>!HNr8Rmx&OJAcxZI{ z9w>|QO^t6K90~1DOia-r?%fN>s9PD$$XJ(b&LDACk4PVqyGb%BN69=8`Aq-g zbIHZg$_?8DyN@t-p2uVmC_fJ;(g)N8#3f5SbbqIaP`vF?G*iA8=#oQR`vuybpI-C@ zQx>R9^`gx~2`crFd+!B>$yy;XQbML`Rm@r~gmO~G|E zy&$J3A_UK8B@Vq80AkVdR5d>LK)x#jLfaxYPGysQ=oa=*`2o zwI^-s2XZr7>d3P*N!x3m5)h9BB--n2FaySqDmkfOw}!7JWf`_wk;OIhRokrh44^+!Vh< zw1iY!7sE%!whxV2UW&6KPJyK|4C3z@_mxxPUd=w#PgrPlYj+kxtM47aEk;SsvCOKX zb%3*bZqNenQdg+F9crFKn$8nQV~Gfu<#0OM5x0@HR{K1Yo~nF|D8^oRZ8Mxn!yw1< zS&~6chYdTK^A-vX3*w9WDks z^NJ!Kr9fUc8I7z$?;wMMKDri-PjYJwj=FvOlJrBlHsQ81iXlQ$Bk~Le)R(>c21$LB zHaK&H4yn_2#2ohS4bQn3BsRG}V)OKq8WmcZD^9y7tDr-bPRYrrK7}17^s?mMq0NyV zOL-Ja-L5{_8sfI|lR;-TBa5qFxSC%$E0c8;azYG*qw|{dtDC}mFDG;}&}XL(EyOoF zUg4Iz=Z|@HELmcqhh+Pf{_LZsI409BIkHBfkxQ9|6*>io{!vi``Ga6o781GoB-*fI zUM052=A)u(uQo|}uLeDq?UZOXyZNzMkK1;{4HEdtN@wdn6J%JT6Y((ftAompLDKk& zL4?(S2>J+l;I7bhLxG7#74)mC{@xGSGb4;t?$%U05|ci=Txn%NGSaZ8vdSl9%!Ibc*lg@2I zV);3x@fs3c5Vw2w-0te(G2bJtqAixn$Aer#yY^;UM~1Ul;#L}DGkL@hUkT@^Zin~C zl|Pb~Tse7~7hI^@b+0cRvfd7A^`;fKr|r+aNh8F-l%vF8LBmXXC52Jw23<1B!)`fl zGzMlO@UFAZvFL=W!j5X2o=X0P0LVF%&75S?z^puJGRYurdiBx%i)3m2DWSR{*N^fu zrGzUA1aIZ0xa?*eTRgFyU)46JhENv8>sN@uKWePQqs5>l?P9t7C`vX1WhRedlD3KP>7s7X0DI&LLezJ<}Dcv;Z@Tv+YBc6AThWDTK$JI4cp<| zw~VTX$RtL{4H`VH`rbH*G}~cmq75RgVdDusI+8bD_NLlt%`Fpo}>?!x(R88y7`8_d8BhEA{ zQ-`1IzfM!|%C|-rY1&RO2Wiq1OJ>Q9#*@79Dvk5N!=;98gOF1A(V?rO2kvWYmDMNl z)%iUqy7+)ry>pbDf)WuNI%s&QT_R?SGF|n$ydd0DfmkYqgTC&#xrr}th>n7ENT$?r zqn@Q6wU97&-u?(lWmKL+qc_wl@P6K0>dT&0#UR&JBB`PxXu?j^@Z_;*xnn5lSC)^r z6F(YCsy4ai5J%I=Jql4J$Ck_9ISL*&Vr-zTFy*kll~hlzzV423EVnqBvLwWKw(pd@OoYj_l1?NU`lMb&}Fkz3c15?dZqf9bT=uy*9GH6McL$-J3eg&VTm= z4hK5M^Rv{#-2akV_*-cPQ5OesWe0r+qtoodhWbE;bl|tJ5bztw_5M96F$ddUEj7>T zJkvC@BB} zLw{)Uy=Z{uPdf$%Qu1?i{Ltik2L7Ml<)=do4ER~ne$7)}e?$*uWB=z(zCQq(Ks||n zHeqLj{R2Hvf8wv3{Im&}3m9YYzd`{DRs5TNL10i2$B!+}ss9-g2s;~y^M~Q$Jg5F= zEr3shxPD+BsH*YrfN(${AlMHy0u>ql4G<0p@cjP>ftCFb*gP z!u7-Wp7Z`wN}vD|_8*>MpisxZLjp)6JM3R?0u-Y7H!Z;IU=Ta!4=v7V|7o`%U@(Z| z2LXnh^ZwH&?3};8*yMuwpEY5Ja{S{NhFmcJvk4CdOhwQi$LpN=pH4+k2n@ve!@~kSryeL~ z^G_`799$sS4^Ip9g8QF#>?aEZ^n&}JHGx2Zj{Wes0HtNV5Ax5NaB{MNz(33r&~xs8 z3ZDa5!?=HVj-lt||Fj8&lO4qI1C>CvpMTe}(}xoJBbI;9J_IO~^N&HkVE<>laB^{g zpg&UioqayOvt`}d!rD&xwD9biB@rJOS_Bg+fg1 z^j-h{_SvF&TAl__4uDUbm6rPcRbp&3;IrnyJE!jfm5|N^?yoUhN%DMDDP6BX&?ujCC+6jS zN(ur$B1WXHM#*O}PI%9#yZf137XlwOJRxRkAFP$M#T9qF+)x(ow2p&|h@yxK8$jnV z4c>v=diiw6u1o-Xr)~nSJE|RXlnEhV;ZuuK&q_FSO2TefYw%QY&|QE@SYk3k2U=m%sU>FN+X3+bD^zAG-qgScXs4mbo^h zL0?ssbCP-Exh!(9^8=mDU5SFl4Szk}K!~m2laH zK2q>YMB-|{Y^WOsyOzA}3FY-dYk*XU47|*2Y*hZZ7 z6e*P&KQJ41+3c1$h54rj?5XbRk4Yv%bQ+4Af?Q7$bg=Hs_X#Jus_xB!?tnZkkE#g( zH^hnna|+=NM(#aUvxtK$G}e($A-?iCqQO(c#zeM$yW_Npa(KG9 z3sbGq(?t5!Y$bhMycYG`8Sw$EWAw@vWAjw*C#F7&YkeaqSMqDdWnUbZE8WKt%vatP zPep^aEocM1HkE8@}H<@Dr8f@=pf)`z-ryu)nGN3i?3dA7HQ*^iPYIoQcAz zK(Wdi-8IucD@k>_0zd#Ql^q7mhFqLr5EnO?4RXeXFi=M7v~&`n{+~`2XM*)txg`73 za$|p86SA_h20o;z{r7FeS(DT4!M{)s{lBYhQhB@0YKRT9>VOGxxpPlJ^yG1%ejr48 zkW*8cHGHU#*Mc-b86}5%WreW?%JBI`R}b!!%SI0mB|M)qUHR%Pm&@j7psaAE>zFC= zNNIEZaEf)1n!_*rVC=Jn5H7yy!IQRFaX;+lN>N(*C(@ez8dm?0(Vc z9$qhc@8~FZmaxr{bP644D2`A)N6CR4R}s4B{6^a-^(~`xBT4gPa?LBPs8`Jjjkyh; zV{yyBvPW^(sSNc^;kCs<-oZVQCyu=$Td?sgo6Rc&2#Ao*Sk90xZlVZ*TgAN6`^QqABhXj!AsW@$fg*x9N-rt+F4JYm;r@0->VOpulBXoK58 zQ(01c#A9=HRHsgkq}lwvu~z!M=?NZWeiE1!RJlvY965gpF~xgt6e>_e#wa3jKvHc? z>_3vFO8iyh(_G!+7S4KYu=}b?t&?D z40r8OWYzE6avLnVV9JfUBx*zNoFr^U%m7fayZU)RKFPV2}4Zwh^1kT33T=m3;gJA3!E z12nAS)+*ND{}iFQW}t6xW@yiJcI9lb=Lf1QovI`k-*7r#e7o@f*?$O_3j~I70M!b= z_aD%yL7ZT=(<}e)cOOuKfqmJjy@Z1U#Br*rfjK#WOJG1Rg0Vx+l(*kG{2-gt!hHr7 zM!$jwPB5@}I|p*X!=HrXf)L=rI(_(Qz%bwi7$~*{)Pn?e_rF;lK!(DnBAyF^fI6XPdmDD(1qat@8Bge`5e*Qc-y$(THCjTT5D?p68?4ir z>;KYU&JAMw%ii{@`1+3Pg0DXq*15h7 z>~PPxp#igTgP;Ik09_nlfVkf@9bU6Hw6^&rYTlW;ect^GR{r1b{kiS{nCicIwZMQc z1u!X}4nAOz<@#-N+nEjI2Vdmh-Iu>gR=(r9VC4^nbwL*(BBz2u13vX*fzRjyT$yaY zS5`m<7S@L5zfAvzeg|>E&7XqdeA0q&1KQjf5gdS97|`J$G!Ves%kkTYFmeGlsP?CI z+J6NPXEWD1hI1bN6bR??0D(aOCGB5~1!umo-!*+*yP)CM8w}3DT<~$~=lheeTo40g zI}-*#X9o79fYks>1A(xEp#K5+0EjWO)VFi}6>@U64~2Zka>2_V2IWFGhHyf@xwOGh zVA+74Zf_vK3YZD@RKMBfDQm*LP?abp6@LPDKfjq|+%548%#DE=NEN7YGKZ zXTT*OR^ikx_P@j$$lT28?l18ze47ft1H9nwzX9Lh7z9jmXE85;%l*vQ%}K)vtYD|% zT>o1P8kkxA($(xc!gC7$I{;pA$jJr$W{L*Xa=_%u4XkmTfa~Jasr0|ap|zpIFI@1> z0bWq}-+=FL48s13pkxR1dyX?Lg%gPQ`+Y9he^Kjyw)%nY8W{rDf1T38`5oc~hyNW2 z|HdK&2xdNA4FQ`u5N*v3=rF)E`WrpD|1*oGMlSlloXPJnFPQxAL3yE(asq))XKrA2 zAiNm@Z03Mj6>!!6J~!~cVbk8h&dkc>muaNu&@LGKvyuIcwbQ8QGZ_So(p*sXQyB!@ z-@nZ_{O|S=2G-UVM*6?Res!jd0_ycQY!|fs;m|Jj>72lUfK$-|!h!)$BlOg53|QxX zpO5%wyxE*ZK$;rao4Fa?{dL0j9oYqIe>AWQ&N#TC-~7akY=T!ZXc+QQIK%$Ai9K*n-l@oRvc)dYD*(Z#-yHma2?_?B zu zoQ?neQUkI#vH*^d{G!l|GtK)P%mqn*8kP&?jva_IJ(U|8Fc8BEoF6!428b5_eX#)N z^VtP6AT#4%F}Zys=R2MYa{fR#7lH%mQfH^!Pcv@-tew&WWN-L=ApsZkoCN~>TEY1a z=7O6)4a?sIhZ8v1aV9vYt^p1piwqDB037W2U2D*_pD+V5F|zul(HiXEL0vHPr(*gW zQ|v%Sf-@Z(uw}7*TYLaB`R{Z5|BNYTQ?p-qe2x7(qzj(@OhkWU2@Gt2PUVRmNSea| ztVB@Y2o7Lg{g2AiU2B$KOw@N&7exKBpf0#NGcTM<6quVG1OqnboWLs}NzQ*jojYHZ zK*rX;F6`+X&^b+iB%X7%;Z&JB%W`yjER-8qoFKpfQ6OgKKOju^94&2rnKpNhm-|<}V@(05C8$UpfzHk0>U;_?;oLY6j zfN$^j`Okmg#{f9r{_DJ}>zX+!z9B zW6Z1^f1T$J{2kB*J%1vezcB=y=lbRkKXu)GV+b&l{-%{XVxU5W!`kZ+Dg%;#a5vXBO*o4Cjpe zDG<&zGQd`R=0m+moN}6f^tUO@e`Dd-pN0C4<(!TGT`2#WsOvNX(LWM(aR5hYAwZ5E z*8eGGUSFkb)N^sCjFL57MT|%~g@mWxI?iz|Z%D8b8)?HvOdpSMUM_m1n5hx=kv{Ls znqxSM`fWjm*XzSA$kG&vrYf|$B6me9RtGvvJk`FO9DDZFQ*9T@vuuqBoDAq5ja9$g z8S8a^#pfiFNPQx7vfptM@#JLYWN++b%=zSywfg$n@l5JTzV6Xp{!%#)_0-7NNow`} zR`p@r=4$ofhy3IEG4B)IvXi4bROZzO2PgZly!Y3tZ)6-Uz}DO<%1?HA1w57l1w6K_ z_)k`knya_!*Q)nA){c(_juu&ukJZMiz6{EFH@F-X_oaFnEfw-t<*iAPkDXW_&1xq( zkDXX99FGZX)O%OtzsK>O3e-JWN2>Zlal|KgvauC?JdqGl-EA6iyZpGTx~0Rdc)QQ! ztG891`4_O0ON&>pP-^CWPx`=@X06@e$u8{5Sw5*}^1X|O5Vy9@@~~9Xo9kJF;iFb= ziq;Wj3lL>%m{;1-H9{SZH))*vBIyE6PX`{1S{;fU6cSf%y&SdjC=W-e)Sl}Gn$GbN zd8V1Vl`P;ldZ@f(Yv?YQO_exkevVPU7!gh!Kp1h0IG}jjsfTfJ+jngB<`<`_kjcV@ zx`K#Nt9_BIn>^Yi?Y%=`sS*PG>qM$wytcyf1s3awWh`sG-N*xN&C7vkEPqYowt>hfOD*B8balgoXvB)H;i@B zZD3Eik?wlc{JeIvJY*<+yzv(K_GF0v*F|6AkZZuZNyAjT<#}y9y9SpJx;6|7UyeE) zstgto>oC93$MFix*~;F<>W%f>HFze=yKYbzH|lt(lEt^X)bq9yxEAI<-Z(kG9!wmP znS7w)5or_9lzN@Yb3DWWt}#Tkr@xY@NI&6 zF^1)EAS=;e83HTOGhrrO=37}x73!vQIv$0c{cZWAZasUqH!k(=H-?0t0?`y#u28o~ zmfbUWmh3(OVBeVz@h|uiaP~E0JA-B1S2P@WWVJGSn2_0vZCS(b-kVEtD4Z`|0ER0g z`2f=+QZCD-a9%d6$Dg%(!C@;4uiH2Ovs=#w$M(J{B{1fhTUp%`oa>@INt2CfA;Q;D zbm^a_uV>wfkR%S_4>=vJ!Lq%|>@eP41F$1c<5*4SLUgs@$}l+qqLfjWd6JI|7;0PU zDs|H(>NKxV0kQX~?b4*u6bvD|hQ1O_d3B z|9ap=$ip2Fj&sqZrUb@XW!Huy4}7i;+hZuiVjj6p`C(9uQ-xUP5@%FL?QQUuIzJfd znM`*1;NimzI5Ipn9A*~wDtn@U6#wK!kb<5>}@iqzpT@t5;sFx^x zm(?{?k=Wbto;Vh~7S_a>i}L3zep~9-vLC*%0gofjqwm64JD_pwKt${|Pg8{_g(NHf zg0|fzCi^OA1lO9Id`|skQ~DipoyZ(Q(mUyePipMi`O%3xp@kWA>*PI-4vD*mnn><@ zhU4#ud zx)wo?&`*`)H7=MacjGn_;{0;cj61CktNmRJj0zsz7{uCz`l)--#$kBIG_UkalXso& z$y}$yQzEDA`%ssZ#=v%iC?$&7uj_Hh%rnPk!{s(&247eH7xo$<;frKU>j!qrPS-pX z-&rKZ-ttJUY3*5md6z}@V-u-|th6XO-mJohUhbEM+Qv8b_a0mmDSG_K6Wb%GM;e|p zfDK7#qC~Vo2SVbT-(y>87?#w((A>|BRLvrr<=B>^)n({9M|$XJMVW=J#uG%*>(j{E zqpv-7kD0jZd9>dQ^9Mr5&@rNNlQ&M2WAagtGZ~mGNO=mEro+aF^c60dqKn@ML36CS zD$AR43Blen;bBA@l4RWQIO`Ull3vc$jP70TqDEY9XP!8WMmivyVzF9YJ-!;Z>I}wX znrkDdXo|}7*BTYYleZkB7d?zV$L4HC=1jm$bI%NUl3IKRg(<&>#uZ&DwG!Wm^q4~PG7j(kiJL@IGC(96>&YFAQ{XriJEoa0u7fv*eqzhx&AYR7Ny8mPP4pfR2sWSGhs@eGBxf2g=s)tO+@7V zp516gzLu}`F+Eq1cAuNP6u3lWP*NEX>!=xHnB=Y~c%g z@-0LogT@eST0irRWHw6{0+1i!O&)(4{sJ_@E-k+fzrl^UV1J~r36A%}yBx&V>O4!K zIx)Uw;KaA*k=}bzS#L0zm5WnqZa9=tOUAv?SmlHks947%X(S8 zx1Ci>L@qEJy@#LBb6)q&6Xew39pfAw=<)~ht4AB&TA#pvWfV>B5oD2F+Nle z4`rKUuHqbCk12F5eX#!Mw%W{qnaii)UMu}@MlP!QGz3xd;9VjtoGf_|V)rgC3tkKB z2l_=RkzTZBX8)`vRDxO)TgI~JlulbS9x{I%?*5saVi%{tOgfy^-MwX!7ic40Y@sc4 z*v++X;<=bm@zKCxT6%^fiZ>5=+=X@(YwMEwFyyDpR-xFVK}}vkgdb4t+2p_vq(SKCfNapLRz5Y~4IF(MYA6czmN-f_DW6`~iOo91_~SjiA=F4gU;wX@%oBTGyrVQ&3g zM6ac6AiOPPquBnYlZSQ|xZfT@7qgz#VW&;Ko!od1!rV;s6RxV48r8#lWzRIKwRUTP zpC6IFwr$QR(xtbyj2Emd#+3=pWUgX*S=g+GJ2`@)3cXyn>=lcAKHEboy>#E?dY-{#fX#Okin3cA-Z*DDRQ$fnnUbCA^5J_Lu{+|8h~-b2%m}>h z+C1t+uX=1I@scu?B#D8uEL;x7kyfhKpOP$U@JUEw0%aVx3tnU3Jtfz-LX!OzrWFR##l0XYfT8sx*mF4tzjw>`UCo4UefPGK%ZY5s+0 zd|Ubkx=uH~L$lN1(ou5{enX({;no*yfx}{I{3H$3lFV^$kCR<1H&-dyS zuC>3r`#Ks)az0SWj3$FY=K57GGG|*ZEc%VYG0sOH_u9;8{6n5oAp6O~VCc_n7Pi_h zF(C|9Ta!rC8e0VVa)QbniGn1QL&JD6?-E#HIFJRcIpnBxYEk+RQ6(c^QAb;QD~IqI zDZLCE;j(B@3_9{0x>scQrHN}{_XQt3Vfcc4#{y<7oP>BK7In$8vc=r8S<`P@$R8y_ zhP7DT>XqT-D51D87slP*#|jjt$)cQeFh3`IEeME4Z-_tK8+b;-{?VQZC2$#=|ibxq{p41ckF1^@1uO> z1-`kZNc<}uq>fZ-;B8|D0zcvwTD!!%qjJ*5T3oTV)J_E+=Qwi7h}Lv1%#4u!@pq`o zn_3xe>4IW2%uA*1SG>r%(dn=AJC0q$Rg|vqZ5q8Ys%KjyC?>|EXMI_os<0@VA+M+? zdm|~Kpg5Zl#0C7EsGJw`jgAdsE-cPwKqP!iR2cA<*NOJ;`kHNi=Fux z6N^%b5;YK&O{H*tJoBSSRC*f%i3OKPXM&)n4Uy-8 zzYAA4aK-j>fp5wUFygJoRX!Hs`;TdcTZ~XLa}TCpBlPqSFF5oFlHpk1>92OQA|${r z7MIT^bTDNN#=ZPuo_9cq8&hOT>nf%QYs`{qyW_-0atH8m8iM2yx*mUc6(6pqMb+L_ zF>XgHNUCFlW1{VF*PC$hkSu80ESAwshS*_KseefxuSMW^Cl&vL_i@-Y-#OjNllOQh zQPd!uLvsNwt6f;Cj?>BP5cN^{+Trd2PTcWv2%Ex5ypyAl!2WENyYi;`HOMGI6V~IJ z`|07&#Wf}6ZJNPN(>^o8J!4uFzOUL=T~l!C%sH@ z>NC9N;f^V-S28ryUhzpDzZ_c#!O*+e2RimKqW*R1i%~@l-^6_xs(cZqz@x?Dq{kEC z%?S`;%8;DdWgjs*{TIpdDspf8k6Kq2!{72pPK2+aHcM*I4!*KOdG$)3*SZVro^upV z?k-A|AH(+538pCep|mdx`_`}v$cEV|P2$$L`rKo_qGrWXaLuyqJtt>)H*3avDn_@4 zWi?iCS%mKN#(d0{Jxk&AY)7`^lrE{#h6S}GkZnthic=ivOMJh#c5Esx!XCJhsl znef(y+tPQW{E*&0_ZR;#RH%ce*lZk8ENcH@>vcYzK4M93`nsiC`EY=Hj0`o#$h0jd zS&WB52Z3b6bgnNnC+@+?iI%--0H00~ql8}M)V7UXv4haOR)@u=OUHvqxq77@y*3Sv zK#|Rwg~dtp@OG6z8Ij2a5Tre9J9l_gHuNb>amtZ?kr9z zan}rBzhsTV8oPDzii&ZpL`>Vy_Yd5u`Y`Gkn*A;B2vPxNui8y%&BB zO}`$`hlKCd*zm@zlr3+6v6&r$YjH3kb%qQjxlad4zo^Tm^#>v!k|<&YQ>p8f456!j zxcHHj&8_NGdg)A(foru3nEFACY@KGSE-3PE3JfcQo0|KVuaInDTIqmR-@99So{({w zut*H~HDb;!&%Y&}4N7g}KH2RMn0{LAnsxH^sOPn-tM{bR@lb@-?2cEd!&aQcj8)Qj zjPo|WY8iKwRkgdcss;`1F|rw`moK=wpw55gtAtJK9r#lAk_2`h3ITjJixmnKDB?h0 zqxO|c0T8PVJz6!YCN3?Gz0y=}s&%Uw{g4OL8V52mRTX6vPxVIoVyDx5xrJ^Fu_io? zLDDgdtF`IvNMfwLj&na1P5Lzg!iFi>Beo|uJhvyDdX_U-P+5HDYbae=N)KMerq(M% zWcjBH6H*_tOOEh+>WR3imoL3xEVJ>r$!trto2)exsWB{io!A?^U^HpN6R3k2o7dx9 z7sdjFYt?=B=yu$2rOG;u9j0b)cy7B1)`y(xC|JGaZ`l+_m|;XN{=D{Uqtd0cFdF!0LNB(OHxa43Eg;-jQ7I z^J)>T0U=9Kd;+QRaP@cO6F6e z?t>Q*RrdvpbTM9&n%uVM#$6*v4a@)Ldzx82dl-CrTr@!i*_)( zxP9vky}_r4{&;B2)m#UL3*dGwqz>1QKky3GPw0!_+{_g!gLI6?9>SY zt(@h=F!q@beXPap=1*J{pI!@x;>BW(6eo%!LTcsF==-1BacjvL3BSIf%gt-?%wa;e z2{`rJrm+Oo~3a@%+P*n#m+V^(bDEBgAd zQ8qwH$4=zCbysS2Mv(any#cGh7Brs3;KA=+nqR5=gGRiMB1*P@pOqluBvYya`Mp?H?33A zHW8^)$(_lh-?jD}z{jT97-Nj&H$B$mxb^U)J;{DY84|UjvJ{Zbbj-W)O!t`AMJjD? zjYFz!eJm>QhR*&0B2^jasM0v#*l7rNHvI#~C)A-NZAWF-!j+k7n3tN2_kmnS24dk zgJ(uCcg=Ri*bw+#k;^&CM04ry)w~iErOI3J$*-mJYV%!-ZJD-869!LtdAKwSmT|AQ zm=`!KmmatVAm|cCan05YNfNj%>5SBJmugyb?|zzalg?dYLgzyl$V@;O8*F#&2o6K3 z-Exxk-QtP(;A7Inr93_*v#idBLd7R`qBLF`VVhY~{xz=wpXc3!l4Wh|3i~G$cH{e4 zWha^xrKLK@JP`*vWn%U8F2-Ikv{BVM8cHh!nceEfEG%rHL_~p%&7B_l-Dyle$@T1z z>eQ>X1LJF1X6vJPeZ#96vJE~R;)|b%R!ihN^Nnlod%Hm~i!oh6cpeN5@B?fObh~Z7 zsqtKhA##Z~g^WYwUM0PRq2yI2XSs&RN+znL59GxCZCB!C`|9?~l4=f}kwXaKitqVRLr*G+ zPIeK6!bEPpU0CZe4><03`8X!0ub>=yRUXcH$9>)O5_p`YtH$h-$JQr4{BcsmW4v)b z!P+l7NoaBQh0w(6_{?hJlRS!@R;pv;gyYeW>iFi$*Sg9^n;}((9d`{YloGUbHz>W^ z1-$C2np}N735)IwFd|P5*&H4_HZ?YK9mMQRO<6;7y0)lCLs_*GZt<8v4qHlUmYzB} zVbSm{w6)wdatbe?8rEC4e7dQ<=!)Xot=~ce3ci0k_KC*?gKFM7mY0}MHvL|jzZWPJW zDbW7_-%-`K;kfkBhm9#s$cE7&uBp`l+Q_P`r$L=uv`IEEwH{v+Jvr*4u*t>fhOo1( zV~ChVP=fz~*DGe|j!M^6AZAl`fBUB zLb#V2yVOxGiAiQKF7-BrIbGSSNZ(@2*?%0|J3bJ+9Pdxgvqb1x+<-yI>}7lfsqFL3 z#`}DUjg>LY;ZO2;(HMLT9|_ZtvvxVgU&oOT$B5iiTi_&0xo*;JnKvGA`(Og6<6i$p z<{J_F*8#qbvb?vmJA)wX$6X2YHKn~8SMD|SYB*3W%*#yn!dd%w$thSJ^e@{Q8W)oq z+bgw7#w9wZ-J{_m9Vn3~;6mH9;LYYN?e2qM9uGsjJk&4gBys_n{Os*|Q4?pn0 zj%ylzqBokf{A9ckkM^+>MbPFf(Ff^a8@0zlFG#}FW^b36$zprn-f3qIN4--Q#hqVb z(5O(iWtvexZTl#eE5EJHI!^y3WU7#YMN#Mzi{c#FCB~gqE;RY9ZC^-ajkzHnuh4E74)ci;iO$0hdUX}m!I_Vkz-i*xGcEy)*WZoTk+r5iH6~jd z_^zjHA#G^mjg$@Fh#P)N;O9ChYTRwA0VjCw$3hMpM<-R?496y3E^C3-0*5^UyAum0C$kt@;~0r2A-6E$y$r0z zD$U4uduKx}Utm8auaNuTIR0w$J@0^TN%H*TUcF*Q6x=X@u-F2vpqv{NKJOgI?IGBL zXxjsGK65+ArPRCv@QEy+C~7{*F;BeNWc<;d-#ht(W0yxg)nL<-=OZ zBX~fFx(GMAv{3VoNK0ZdXm0Q^w|S1=8L>?c{1n@&O?|D_sU?~|Pv{=Nt78A#qIl(8|NTK!c%FFj_<-HEPx&J#|5xyCBH#E#Iv z=(TZX#h|`M7)MZh>)<{Cd+iEOke%_c<@n&^GNk->Um3u4#pLcBcuwnHJxQ+92fdGa zxczT2Q|eod-AgP?T_a_I8pDuL~9EtR5&!Wp>#208rbhY4qdx4;AH>USml1!)GGKYO#n(pZMAWk{2C zJc5#kMRtRH7$rs0dw%tiw2$2?!dk`sg|EJG4RdT1>2YxI+Nh)WsrN}Gd|ki1W?E;% zqrQJo6TE@|NJiRMU*!t2(d%2a1x|l>ceW!OngExY#U|9QnCr#pe>ygBjj_t$p9;j{c2ZzGALM6N>xSX`{#`SB)C64h2@^00AU5Co^ z;q7uB=vU^ily*zOrOk88IE63qHdFic4My(ba#EueO_z;-wJ|fF^mE zZ;iNdgmv725PMGsYRcNusalmZj(Mertpy4=k>410=+dAHd78uTm4f+xqxT@pNH7wP ziy5K2?xA$aNG>Nk+0z!*B4mjnCX|3&_(6)-MTn;1(TLe<#~x~z-r$cnO?gcoe#z$W zkfo2bT(Jz6qfVVbkq<3|lejA<1?Ql&pE{3`KiPlsr4CD!2rjusBxzfq%hk>wNwDg} zh9iHy_y<&&F)ZN~*6FWf_#i^Z z5#u%`n3wxc9z4=!hQ0peF+uwN(o+s8F?a%`)SEeQ-EpMW0xOc;xjut{bFUw@@kz;9peq1=!xvecvG^+Gi51buTD0q5i4q%ZwA-k zJv9%g8Q`8t_2zA~SZNWzbi?P)3`gy4I0nRRRk-999N}2Fy`=V6^e-d%sXUELPI9!w zojGObzci@AS@IL8!$0>AmezhqcXdy}hCwhfohKHqxFztCw2z3H0YXy@9K$$io7AOw zO)>a4_tFrGN66Zm^6gu2$ z!a?kZ6K%Za3lT(v8^wFdkGECRPoc;yF@Bi-8hE`h7zF$*jOGI4n96lO_}Iv&insMV z)qoaEjgkZ3y%VKtObL#-WN)LyR6*B4_O!}RI%e@U@R5*v3>y>NDt%H0a_?Xm!FxrJ zr6AbJmjuU#sGSB_ob48Y@+%)Dtwf1;>Imd{?*g8)ue0f0ek8ZIt9@CrgeVm$=TbK+ zcyG%r;F)?9kmvPzTv*lmGINq2dVT^0fJ zwY}Bjh15eE$Q2mpY$dhV$;5>9p^XteOlx*$%)@u%VED?0-ILIe=>75%i|rShx@hnC z(IIQAA8M0g7vsz4f zzx{$y%Jb{z8-*VBun4EqgQqAf@itBs}I%F&;L|~&iL_=asVImV<1%t{`xBl zx!XL9b{;BWBB}0RoH!RA*=>KudX1y;ktA5IN>?`8V8^@8GFNmlhzx;Nm_jnC0F;=J ziz6jYSF_edSbvON+QHPw_0MKHt`61nwks_+1D!}02| z%kA|Tx*YDZQH^Hb`r9`_ZvAoO)ye#*&~}QlZboF?m$}zFue|S*>uL+Ntx~J6nRQmQ zAm;-Qj*F%Cb0gD<^(4D%Dcf*ZvuT^!3JUPi>^9w}zuv@&x%{@wsOGxV21ODdacrHu z#r6|Ax#-WIs~4r@JVxGf(ui(2Qze@`^iK3>93X9Oc%#VOE;7@IQTNne+g_@N#9_)- z-+0keX6~b_tEuedEyOm2L{{9q&3H7~l2;z@Lev)=FGWeGCcWvFV$} zXtD@BS=T(0-Q)HISFWd~O*~Zou&SL`QS)2_Wb1+*P-=94Eh%bL?&*Xh8yQNPjqzuz z!zS*bDvFktczY~_8qM00ViXXAsLd$UHZpN4*YZ z6ZblT7JUnyAzxlUmTqX-_2~78)Fc+{-X`?wc@Tg{81fE}A({)lH|?IjfO-sH8b{G*|XQ4OT7tPcstZq?H+y#oSfur=2B zTwT$dJFy-#qtza-xP(0&@Yi-rQcD^jtt}U}9a&AXK6}=xbv6>d5j4_8xCQ5 zp{>#b9x4OI;i(<*+57JojI2~9(Te2Ep7=L^(a3t5n`QI>JvTRbKHzis^QoI83EmOT zcpk~vdj46Y+*!1TH|qz`>fdA9*0JqRAl0gJ1?ibq2nkOq=31K2V;gQf`FQVzA$4$F z%8%g}BK3`!Mbq}@`gKd`~to&=NEXP|1OvM=A|Noq}XVow$s z_Ip-Vw=L7-hd@=c^dx{x%Zm z#uT!z9eg0IG>Ebo&oDYBh>2jCdRWPrDIiu$Mw2&Fe_7;7hy;0RuPees^A8v}_F%L0 z5`0#vIWe-Woa`xysV0_+#$wa3t?9;GQ@)@sZY)nnW?hR(_cwi;O@v+jCRbG`Rw6H% zF1CTkp=!LiSYqQ#4q9s=ufQ+ch$?hH5jDi?-APRBwtpE}UK9y}Mhej{Ds1zK^k{d=|VK`^4BE=%?2K`@sw9r4U0%F8j+ z?T2;5zw)~TKJv*95Ez!mMm;H}DC$DVMNyoyCRwo$&j>AbbOcR9H%sZ&Km3^{9&q;VTrn>qP3 z1jb^~HOBIQr~5{pbARmnREc~SgyOavH<<)fhlY0_j_pqfcxkVbfVeDL z$3US**7iZ`?TauG1cOS^irv@85}wOeYD|}SU8NF*-lhc6+4E91`&(49#B0xhuMqJ= zOLax-8S@#h^L&xzyI!Wl&?UO+MkvI{kUqRo3CNY7!ZRIpUpjT#$kL^GY)|F&>}ju< zi6mCHWMBU~8*rpzM8@kMBfN%Ez}Ke(V%Uvum8FB@=ITogGVJFb+u$b$Y_OI*xPiE{ z^v)myN$2=0;id6DQ%w}M4T}nE5Kq9&Tf?sA2FUcmlSkJf&qmD#*YPHkKZbkV>NKtQ z2q0ILS`Kv*KY*Wmhx8;mJS$zZKuN0YnsY3dDiwP^{0nsE`l*MwQMPWku5*qQw$!6@ zQfJJTs)p9s_ut_t)8IMwFu-4$zI``#wW0rQGlZ)#Tj2_Go<{n|z3sd%@9hUJ;tvdT zwPtBP-HmP9n^W}sG<^?WR?=Xp6kE@9bHFty#Q*KhOwtWGYr0ZY@u-v8xohqzh!X2r z<&xODxJEqSu0X;}{4xsJr;>{wiR3tEJV8sy37c9^X9Rm1@=LT{xwzbH$4k5x9W9V5 z-0akHH#^#tE`69ZZEtt0Og++G52U`Km`t2essVnM$UBmm(wHiL|Ab4c%B4YGrCnaV zEFCRHIk%DjV?ZUh>S_*Nl5%f>3K0$&c=eMj{@WN{(g$KuN@0<>hp17qZ$j^s(#fTm zQ*bgBmtlBS%~m{WO1|g!w83Mu;!!4kP0oF30}%xkst+>(F=?WY<~}sg`G0f-69m6^ znXByWpYaZY4)akf-#>eQFow+IOwm<7RB~ zVb*b|cdL7V*lbtV=I$}se`P~$LG^iz(i(kISa_V7`PBra;fE@v;j&RmmpM|+)E7L) z3tboy>dFl=lG;9`eRVQ`QPU?$*K0y3rPE16VAZK+F!Z%4ZfO^uj^oZJy-v5n6*-SF z>?aHo%=9_eVy=;$478g%_mA&eq715p8Sys|4)d4}i)e~&@>ilLf+3j-%z074OYvJSb^sdJ(w9|XZ;4O5H zu3C-D+6CmEQMh3yZj}u_T#Dw!xVgg1a_f9z=Cljg9n0it3(q zWl}1(-hbRvF|{~!URofoTOblI(>Pii3cpTNw-7*lYCcxW@%{W*ET`=*!FB7{wK->9 ztzs%z+-0)6p2KM#=VwR4L}|MFbY6dBw!0S|VrjNJR-&uCdV;_gxdt#Z#W`wo@i9kB zidG1|jG5~eMIITdd+)-v7~Q;CVobe-TpaK>(|vY|=oURbGDP=kl@s|IkTS!&=A%q9 zlX-3dd7Mqud{ociiV6|kGx(TlqWfr*<;1#Jv$HY&Zl*gT!9vE(ljkWFHuZ43ySZ+k z*)qK!`i3UR;NrGWo<$_GTiiO2Raj2p7>Rz8Wmt#reU1pwVlh4BjMV?Nw z9hk}2_-)}mpHK;+Z8qV_Dqy(kUltMFb1a@-w0A0)u$c+lBSUnDpnIMg zp&_D`L`sFGh|SY@&2(!dTbv=+6wwAxn{Y)Fr}@8-|vFyDrSi(NBPS$HJtu6OSnk5(>xag`K*zGG)T*1fs#CB?RhrsEO0T{Dsv zPi{zc7wlMx3YO|La-RO+#_mKr(9jSuD{uK39wJ`3=qu1}IE+R!V4E53hCry78WexF zcH_r?{#?s(f8-zi@LNCJhLQJv_=it_>Z&=ur18XgOfK-gZkM<5hO8_0C@UlOh{XdaE%wmzz!4TxH8pXleB4i* z3tROqO>|vZ>roQwGvh0p`>Cw;5Lld%dKB(dx6~u{8X2jF=s7%STIx|6-n7Q|{w92v zdoa>nj-T%iMk}NAh{J1IEcLJ=g78QAaX00AOCoN)PcL8Kp;CcsRAt zqhob~WgdK8U)`0eSTQ)Ac)~R$+e*WhP#dp7gEfHw{d)#02Lk1G8&IEM@HkZmY@SJxv&!V@G1*yJj&eM%PZ<)ug2R6Ja+dp zGKmIJcwLke4bJM^?W(~jHNIKpk!h3BWF+Qd@H!bsj*WtiWmo1QARwW;D0ZYJ^dSOP zG9@O%h3A~X)pXQ&5UFZbV`Ps<@NsV_lgbR}P$%s6BR^!jN9~vS!i!RV(l*6k}#9jz(=W#b0 zl5|J#6dAD>vz&w&DwUs~i5T=r>=hk%)s#-p#4 z#6vq+$^7mspxp1~QxnPykk*S0e%4+C=i z`OfW);&P2@cLgU$MPaO6csGbfC5=n`do2oM){f6N&NJA%aDjnlr8X8%Zk?JX>fre$ zb6FV418p@crGVIQbHf-Jp-0JdpDc@>_}dc4LE>CZq*1Bv%Jm`Rk?0n7puwq=zsU1= zy|wad;N=YUpCm75S?dc+XPTG$@t;5E=^lQ#4BU+p|4Tpo{?i}$ort;iyymYy{rmgl zzW~AKg>!$teZ5HVd9m~e@RkJM)I^V03yY{lh&1l!w$xxJC_c@Ec#o(C>n2|;oL(*n zGsE$XJu~8R8_!q5&n-@B^XMT>*Z$D?RwkfFlMf!0ojg=iBwvWqo?JnrQ=DKaEKSjX zEx?o)wm5pU&IHR>M6W0O-2GIpq1GN@xemV5P0Ck%Bp$bLfO{dQ1&fVGM2qCBu{cB| zBx|;op!tlhbI>yku4@FPw}R_TxVu-Q*>SQXzHZ+vak{qO;?bR;`Gm}3nfG!`SjS>} zAy^`rFv2RHPvAdRGYh{OO++822Z!q*Ibr9B;LUp$ZBi2Yh&eRprSNa%v4Do_DX&9m zV-1E4N;-aV-c5IEa2mhbpwvdfZ)xmmaWRE?zTU^+iP?s)^nP;Ut>3`x6w}ww;W?~E zurgDe5v+2!1=0vsOq`ThjbI7#c=DI&reMyS3cuQWa)+SstCqNr`i=GGq@r$H zZIhg^v+Qm1mhNHQTS=syhxNV*_qYpvD!17Ry%MRxBC-<@tNRSsJXm#P<-cAfMkuWPFZ`V9K0__; z_~dB$e?J`HbE(O|=#mQ!SHV1(_5YpAQ7!-1&v4s-J59JR-}?XFF)ignLr1{UeYpua zm>yZ?vsGLH7@zUj(C+g-*qmD!_o@vy|+a>$$ zis9}E^Qfbz!XA674be&O^DAc_9KCqHF6QCG^`A2j%@4o!!yi792cQ1HTd)m6jX&SH zeu8Zf5dO9j&&cOf_i9<$VcGUtAfcVU(G0OFBVhL_&Vt zxO~+_gFkM(p$I0>dc-%rZHaq^XAmdN^WUz_qF@@uJOk!XOfr;6=%v34{oUMWior*~-`PjkAmgL_%^b{)2<|1_OA};x-sC z6U2g}JbOZLeAQuC1KeEIhoS!ADlUH8=%Bns(?o(=&>W0m9G#PGuEE>4&dDbZ*Fh9# zWb#)j7Eq*dhF7qoDpMUbTFI~qYbO#Js@vWY6I*jl3lAD;ZfR*;F=JA}vWv*D3iELK zO2_1*?zpcFd9vaR9OC+5RaeE5$T32M#nJ*-**}f$6X^PFpOeW+rr-#evOPz z%y=f|nTfJnol+~$+ZUA)nt(XrvRxC{6TORuad{-Y$c+23rN0F0*5&LD@J4Oi6OdGA70xN zoW^X2-{#AyP8C}imNQfNEV(_#OdgTE9h$mog4WP+1v`hfF_((POUIB4hb4}^>jN(g zqBSym`4Qlv<2SZvm{%>43Q`e=$m1L=6runcr9|(UqY&sV2gmG$zf~ z_%bhkLrfnJe9@rPV)Dq--Q3W{Pxuyql*2DG9$bUxwiplYyb;0*ke29e(y%nn>KU`d zP83312}o_3!h}c|cWEh!s)hbY;WMH+_87rU9Xj2J zvE}?h5iz+(rZnLM2lQ<%?G4WaHcPAohuykkFu9er*;%R?nY$O9sP}IS%(pK9^V_ZI zUsW7>FW>znF#kV%_XOr!fByYHeL&a$^80`DOG5Vg9+vg*g9yRGk$3&Lj4VmA3*}Nh1kwITA>B?lkWIpv9GCwL` zjtuJP8=U}P*PL7?!;tdIRPc z-bHS}d>{D0d;{iB<6f(C&-Hi)aKL;oiNtp&%m-&+oiOht`~(bZ(uxPSJ7J!qan6^I zQWHIw4w#?3?)oOop9Csu`j(SB&w%;P&xX%{`NQ$>8!(?R=Q&?q2Sl!5cD{V@GrCnk zvvK9@&6nSaJbR~0B+Q4-mv;#vzRvmb{Hk!74hPn5y8KF{vsAmFxSsf?%O`qmZ@T=% zNx3&&zH%n_nJ%A!Zv`{EWIF-FrjBekT|SXY?{xW*&@VerE)vC)LYY_Pd0#hOo`chZ zVV&a4VOWRDAO3FMaQVr}1;MZydAN(}hRa6^h84B9GC1rxo6E->E+5>q~ zLE~uoIq>9pqvZwMb1}Hn7C6}DWciuM6u8Oq-1%{%<#*?rZYRs1T(W#kL;*QjesjHU zb3^xt!(Zoidmt|&nAewteTYqSlIsKU>l9r*YvE6~JnnGfOJhS%J#~q&fCAxZauEA)gs}t_Ura7r5GCi8<>O_r%*=hms_+@HL z(zsLk%iJD!-hJKtW3>Y~SwHbc{NpQi6SwI4cOM=u(fHmEms9-q(;s~U5>m^_IX|=J zI-Gj;wl&uxd3X|`Eg*|$3)=w_W%76ktq@}+aJGk!-CTm6>P#HW5;Aly)64zgHANXflo8}`8*t4$!S;;GXf5N#+tBuYQ-KuAo}*#)v9 z5~)pNMxPlYNTO@fMv%myOP&tLX|1W)L&52OiL zO^}eW6RsLtLA3ng%bZ70v1Q0k5U=j^GEMy=;}b2{L#S$^i9#p6m>DO?ncTc+E6C)a zqrkPJqgR54)I|vrGJ3(Fhn*mMbMEr{!Wep47=^6~3bMrD87DS^w4R`b>;%~y6}1m! z6pn7%333j`)vgm{CNkBlqog^OaGfA)M#>428R6^%IlO%F8bM~}7u0YhRGT}8Yy^o@ z5@e~)=|W;NsZC`k0BU zro14d@r0<$(Q(~?tss%$|F=Vbb|UIYc*t4_&eIrDV9DaOf+P;=*9wy8brA(A0G>xL zP2ul_yV^uSYFFV=L3V=d-8m=N9y)t*;9eZ0{{P}sslZCU@!1G+xYza?K{DWs(5Dz> zaHjN%^eU%3k3hi1ade?iIsx-`5OI)YO&$!^!Z|QJS4zD4;i6M>kabp0(g}T<cCl~y52LE;rp=%}a@d!Qp)*)4rU9 zi*DMN6a4O*=aGS8AG?M1z z@Zi+!+QtFDa*obvVX~;a5iyyH9-ODo?Top zZz|7sdLq=#Dn7g&o68%SMihI1d1Zw&-SmH$s=V>y+O9B7rdu{PKh~Sg(|n4bPPgn% zrMh+AF5|AX%<8T|s?3sUU>Ri%jP{DnThTF7xvzZ(A4bIGjTIZOMviss9e+P5(DCgx-k7%SP&rVyxUw)11Y~#C$!@NlIrhoUlA-h51Mzz7^B${G$ z(`sYS6wTXRmLc?XbW2pJ=%(edistj0{x3u5xm=f<{2Zb>Ij7(f;8PRD$TvilBXiv$ zstJP48LC|OWIk_I9)@5-uOxE7+bsd+5!6i}ls@%Db47b-7UcY|TYyVR5Rc(VVQzGG z4X^-N{C+yvO6N>Y>2(L+edQdKJqst=_yswrSA1djM=tyHTR*)2^xwTbl_V^>jGq}! z>4wYw#^ID0Y8;PLD&@u#is0ys7i@DL!R%3FY+yZQ0!ul-CPuX!LdkVPf}a=Hh8cdw zq>sU8?!yxFoH2b3jwhNX!nmw9Xu)jwrgAej-Aue}@*E$n(V48t$u(!wF;R(_$~ zJG^k7*fdtfBOirS;YhIP*EB`1a%)J&*0u3s;mw%GQEF!9?JF*r#n^@@pulz(e-?8AJ|;lNIDR>R70 zJ;6Ifs`CQ)cp;*vb8ex!i#`!J>7-XqoH*z;)!oAhZu_@Y%Ww|(CK*DnI42vT+24A+U73Z9aBiQ%?vK+z2eOya4Jzqe?-;9-EZ!{D`;Vl=oS#=&FD^4c3>DoDu z3A%TRaN?Dc=3^3Yr^cPy5|@p~NV%)_;0s8YX~GN0(t&#M1!Os~j{B-~pgw#7S^JS- z-Zbu%$`_FBo<4k$&eMZ0Aewd(0jEdj=|n-F03jX>qmN544PQXci^Sj;uM*$IBgA{r zd3t^A*_d8=|*Bcx0&u79>iob-Q+SmCu0hb#0LVK=~m(Ab(`th z!g76k>Gmum}(ONViJkAhv@sb^6TEtGW+3LT@A8sKMV+8|lvGzo3nDnF-Fxm?9(-^lbC}P`Cka z_=ZT3rptFk=d6c~bR%JDw2|&4{2;c{O|D!qGnwRuGRf9 z_&P`0Zl0uSFI~c}Ih|vipnR(ek3Zr=_3 zrWHncIADIQbi4DL_SlqD_)Tjo-B}zYwwF#IAos-Cm6M3QvzIPWLnmrhH$zWZ>2~LR za@D3Bu2H&Hx|1*~Rhx3g%22e49+>N-i&HXAI^7IBM9@~c-4pEY_TA7^R=TrzwOF?X zk!LG*ix4>!d!2N#xe;=dn^DG@*XFySWUO?$8xq#N<-39ZddD|If=F$?879X@hh^QI z6cq$@#NKiTo^IL%7Apvf2SD0IcUGc9FnlNQJ5~UcZUycM7JI8(f#0#hp!6#F(@m%K z;Tu8xtxh-mh7|}kPNLvaC{zZ1H;bz~f#0y(0n~|K&jHk&%Qz08Zv1`~5*0n6f;tYM z4sOgo4xsLvyTlwo{Tiz9HL$r3;6F(=_h&j-fBfeUO@}Y1sK&ehxs<8NR4`r zqyPO6|BK$xAO7$kiPW_|Y5&ZKRF`D5w~a{kK!Cq%4tLhri77B~M8$P7^xm~>cP1pb z4qO~H5tekl=RLvd&RzH7$t#aD%i;+f7Msn)-1)elI&bWKxMqNBVGKP7_rGbZUS}MP z&}po$(HEZRG*{2gg{$IqT@I4SNEP~s-%JhF+KqUmr1L3?h{y!5dvA4Y@3m}a^23|+ zDe4%Q9h{a7_Lc}qb)F%9mB*fugN5l%r`W=;61?saw}CNy&($J}usJ(i?7{(%J62E3 zYI&;0qDalu?z_g9Z70QHa$;Lg#WQg=QR`miJC`TwwK3A7fjSZmG6Ee-ojc)_?R(&D z>)7$b-;(3B=7tH(V|_`YG)U9*)}nmtyOz#tkKPm2TOxLy zGR6Z(%v|%tM9oI25w1B&vhWdAUllD7CpbN;=|KxEkFyi6dxYlkH-!4SUl}{ z-JU5<&uWtBHDR%Bk74u$U#D3j4&TI_CEpWuzt+IyqHc#4M}Z+{i{LT-Do4z2r- zUe_FP%jsDS602-(ht(j_dA3Gtb}sHj!=fgMwKz%C&C2s+&Mt_%PHsLcYlf+Eq{;p#xho_1= zjN~M!*73+d@H${RlPhD;JtD60y{xo=Qwu0hi0uou9SpUr*# z_|Knnp?~Iw_kQ^H!#`bi^CtZM<_j3cRVuvuStMrHy1d>toL8%L$J6z-rf%NdXKQNf z_!hJ?^>81|b*8RFkdU3JgU98Y!*o+{Ca-s%$rnOfQxk&aYfaUs&bMie$aV9AXnRu+ zAG5AEHF!|F<9iEt8Q7Z|6^Ec*Zz^Y6uQfGrIKQo_o!8XantE!-$Ej;g-3uFNeb$eb zs(I9XhtD^*rnXu!R&%YXd-5pY?E;9i6C9@Y+kvqtdsAoOmG0r-FpQMin(8SYukKC` z*92z?%LgWHm2RF{Ve``x@!+FiMsaGIXHnZc<37ewbsTo|ZJJYlB2vNIJ zwbOE1vFT^^15&m+78v=jo7xR_SU#w$QIR=*uu_ou^S(FY*9V=40&V zD&n#VuX*nRqfEW<=M$IJcsHR|_eb4dPoDBe&b62h-1Dax*Eb@UKUBxQ7^7U*^RJ$C z@`s1-{%D1<;u~JbDtVccHpejExG=UXUYG37SZ80*Va>g3u5J-I|jghlk+0 zRaVmsewq4ln+P(^vb}Od*|fCthOkA}YimMw>w;O|?D%y$h;?Ap$1Sscj+)`6Pw?bp zQ(dvK-qU5Xbz!W}ZL>l$GpzLLo6AzYW1Pd!k8Yg}Zcnm`ObdJ>Gg+V{?82?^QNuUtLMtD>r8rBjqiTVtkSE!>=<^-no9+ytJ^$1T8J7JTuDK zGIF#H@e2i(&q&bH!rkiPUm3eb1W_bjsDQV=6UDKD%g;%)+X^lh4xK8hO|*-fm~J~! z&T8MtXo=xp$Xns1jAo{La6s}l*0w}Wvwb6b@IYewMg$u0vRemP1ot9NVQ;~kEN*da zTUm_opB3n1>x}Pgx;LWgXc9YiPGju2A9}sk>Orh zp>Hb@nC%|h&e=wj)8kCOzU*6a#1H%DD#^L@>{v;jA(^ct-!(%{3!vvTrP%2ZYtJ)~ zyR{)4YZp7+ci~im*y%NDB9vIi_ReEHQVyV^GM83pS}3^Mf`LhTtRk=ZVQiCx6d{O(utrR`kHa#*9uiG9JJ52 zP9C9g3vUx%{9%16H%ZUpR^FDOr{@`m^Tj&7Ysli)>G;lrCrwXlOW|hOW@0VHPWQuO z^#w+)$z$#{DTyJ$Z>6~Dk?>;+ixO7N8Eu{1%hyy=`l7jWS`Bof|CG10zT)ltoLpKT ze#v+GrvHFRyCmEn{BVi1KYa7<`+Cy%e)#Q&fBN>r&%K^M>u=oW$lHr7nFey}t>2I& zvjLM^Hs*CwVs+-ehRDJXcJ9$Ri4>NnLvbWjxz}o#m@I7>EIUDWt-247H6OO|CAyKX zA1{$ler&9pJV(|=U7KTL-PuXKW2D193q=QmMA7GJoj2?a$7gE9zzMYB0fWoG1+45? zfr0nw@Y6(y)g_?#{jMFq)P#NW*!hI_Ded^YLqgC<6-P#I*tk|AtUPu0n06~V%xK^4 zg6etLci5kU@uIcuv*D$d*Dix8bb}kZ3cC%%fnFQ)0(L2KDXwKzC#K@-uA+VL`Oj%{39eEEOI;nWfYq=yp`f$wgYmEUyX%qa)vLu=}DT*f%M$a$166MORfAfmRxYf`iu*w%f zXSMghaF)KA!Wt^48<)knk?`;xOIUcKsB^LstlBngP!mOw!k757IeA?tHh!H+be>UX z&SI>>m%!t=+nI9I9f1iLcGE-Kc?^CabvV;Z6m+?_kuy$D<{@!T z*En!W!cgacPtjxe?QCL>`bfl(ZtF|A3&lk-(K-I9fk0E>$}k9eTN2hdF(jD))0@=E zZz3U}DR^d>nC2=zJJnWXh=8#hw-8O8ofCZtCISSNa3fbSE5`5H(CK+3JjL;S*%H1^ z$7fzH|HSlzCn_&tGl{BB4Fe}Z5o;ERUikvJb$}j;P|)rAV16TL7Fa9zyK>yySQECf z?qWQ=Ia|OWww}Mt{Yb&EHzk~>IN1JG_@UeGueA$4XXu1)-3m83RQJK+i$rI(fzQA? zcew@(uYSFiOyzJFyHz+~-PCX?o{Yj1XQkz>KX)6Y|C_q{o>!2>4ZQmT#GUN)h*|re;Ynf z@!$XND+$Vf;)iQ$z4p{!`{8fD`K(9wx>$d};Oj-*pLp+w-+uU~Cx!n7DBHi>Ybu9N zOs*E@?ep$UgO}&v4G^BgA50(!aQF45KSfT^0j{!!uN8C=oe9+T3sXz4bhO-v)X5iKf@f^hC~VlzL^Navn4_n`^m%ET@U zbJ`gpL%N_dm|#OJm4{!OX%Sw9uM^Ya z*_}%^bmQ)lka~pO*W9xtaExL38Q0syvSo&=!rgGdQBey$juvZP9V_~
Jf4Sq@ZXdV1gd6D^c$3Yw( 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

  • ^NnPWfvGeI6H(8n94iPM}3#nXXujr_Vwq8U2-~C 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 diff --git a/docs/draft/Jvav 24.typ b/docs/draft/Jvav 24.typ index 220fcee..57f7858 100644 --- a/docs/draft/Jvav 24.typ +++ b/docs/draft/Jvav 24.typ @@ -1,31 +1,112 @@ +#set text(font: "PT Sans") #set heading(numbering: "1.") +#set page(footer: context [ + #h(1fr) + #counter(page).display( + "1" + ) +]) #let keyword-color = eastern #let since-color = green #let user-color = blue #let bracket-color = orange -#align(center, text(17pt)[ - Jvav 24 Release +#align(center, text(24pt)[ + Working Draft, Standard for Programming Language Jvav ]) -#align(center, [ - _Released July 2024 _ -]) +#table( + columns: 2, + stroke: none +)[#text(12pt)[Date:]][#text(12pt)[2024-8-20] +][#text(12pt)[Reply-to:]][#text(12pt)[heckerpowered (#text(12pt, user-color)[heckerpowered\@icloud.com])]] + +#align(bottom)[ + This is an early release of Jvav, many if the details are have yet to be finalized, so this is just an introduction to the syntax +] + +#pagebreak() + +#show outline.entry.where( + level: 1 +): it => { + v(12pt, weak: true) + strong(it) +} +#outline( + indent: auto +) + +#pagebreak() + += Basics +== Preamble + +An _#text(user-color)[entity]_ is a _#text(user-color)[value]_, _#text(user-color)[object]_, _#text(user-color)[function]_, _#text(user-color)[class member]_. + +A name is a _#text(user-color)[identifier]_. + +Every name is introduced by a *declaration*, which is a +- _#text(user-color)[function-declaration]_ (#text(user-color)[@declaration.function]) +- _#text(user-color)[parameter-declaration]_ (#text(user-color)[@declaration.function.parameter]) +- _#text(user-color)[variable-declaration]_ (#text(user-color)[@declaration.variable]) -Jvav 24 is the first major Jvav Release, supports a few syntaxes and features. The versions of Jvav are named by year, e.g. a Jvav version released in 2024 should be called Jvav 24. +== Compilation unit -This is an early release of Jvav, many if the details are have yet to be finalized, so this is just an introduction to the syntax +A compilation unit is the smallest unit of code that can be compiled individually. -= Compilation unit +Each compilation unit has a _#text(user-color)[global scope]_, which contains the entire compilation unit. -In general, a Jvav source file corresponds to a _compilation unit_, and a _compilation unit_ contains several members. +== Phases of compilation -Members are: -- Function declaration #emph(text(since-color)[(since Jvav 24)]) -- Global statement #emph(text(since-color)[(since Jvav 24)]) +Jvav source files are processed by the compiler to produce Jvav programs. -_Global statement_ are any valid statement #emph(text(since-color)[(since Jvav 24)]) +=== Lexical analysis + +Parsing a Jvav source file into a collection of tokens using a lexical analyzer (a.k.a. lexer). + +==== Tokens + +Token is the smallest meaningful element in a compilation unit + +Tokens are: +- _#text(user-color)[identifiers]_ +- _#text(user-color)[keywords]_ +- _#text(user-color)[literals]_ +- _#text(user-color)[operators and punctuators]_ + +If any part of the source code cannot be parsed into any of the above tokens, then the part is considered to be an invalid character and the program is ill-formed. + +=== Syntactic Analysis + +Syntactic analysis is also known as parser. The collection of tokens is not yet semantic.Parser parses the collection of tokens into meaningful combinations. They are usually expressions or statements. + +#table( + columns: 4, + stroke: none, + align: (right, center, left, right) +)[Assignment expression syntax][-][_#text(user-color)[identifier]_ _#text(user-color)[equal]_ _#text(user-color)[expression]_ +][(1)][Binary expression syntax][-][_#text(user-color)[expression]_ _#text(user-color)[operator-token]_][(2) +][Block statement syntax][-][_#text(user-color)[open-brace-token]_ _#text(user-color)[statements]_ _#text(user-color)[close-brace-token]_][(3) +][Break statement syntax][-][_#text(user-color)[break-keyword]_][(4) +][Continue statement syntax][-][_#text(user-color)[continue-keyword]_][(5) +][Call expression syntax][-][_#text(user-color)[identifier]_ _#text(user-color)[open-parenthesis-token]_ _#text(user-color)[argument-list]_ _#text(user-color)[close-parenthesis-token]_][(6) +][Do-while statement syntax][-][_#text(user-color)[do-keyword]_ _#text(user-color)[statements]_ _#text(user-color)[while-keyword]_ _#text(user-color)[expression]_][(7) +][Else clause syntax][-][_#text(user-color)[else-keyword]_ _#text(user-color)[else-statements]_][(8) +][Expression statement syntax][-][_#text(user-color)[expression]_][(9) +][For statement syntax][-][_#text(user-color)[for-keyword]_ _#text(user-color)[open-parenthesis-token]_ _#text(user-color)[init-statement]_ _#text(user-color)[colon-token]_ _#text(user-color)[condition-expression]_ _#text(user-color)[colon-token]_ _#text(user-color)[expression]_ _#text(user-color)[close-parenthesis-token]_][(10) +][Function declaration syntax][-][_#text(user-color)[function-keyword]_ _#text(user-color)[identifier]_ _#text(user-color)[open-parenthesis-token]_ _#text(user-color)[parameter-list]_ _#text(user-color)[close-parenthesis-token]_ _#text(user-color)[type-clause]_ _#text(user-color)[statements]_][(11) +][Name expression][-][_#text(user-color)[identifier]_][(12) +][Parameter syntax][-][_#text(user-color)[identifier]_ _#text(user-color)[type-clause]_][(13) +][Parenthesized expression syntax][-][_#text(user-color)[open-parenthesis-token]_ _#text(user-color)[expression]_ _#text(user-color)[close-parenthesis-token]_][(14) +][Return statement syntax][-][_#text(user-color)[return-keyword]_][(15) +][Type clause syntax][-][_#text(user-color)[colon-token]_ _#text(user-color)[identifier]_][(16) +][Unary expression syntax][-][_#text(user-color)[operator-token]_ _#text(user-color)[expression]_][(17) +][Variable declaration syntax][-][_#text(user-color)[keyword]_ _#text(user-color)[identifier]_ _#text(user-color)[type-clause]#sub[optional]_ _#text(user-color)[condition-expression]_ _#text(user-color)[equals-token]_ _#text(user-color)[initializer]_][(18) +][While statement syntax][-][_#text(user-color)[while-keyword]_ _#text(user-color)[expression]_ _#text(user-color)[statements]_][(19)] + +#pagebreak() = Scope @@ -34,19 +115,6 @@ In a Jvav source file, the outermost scope are called _global scope_. When we de A _local scope_ can be created by surrounding statements with curly bracket syntax. -[Example -` -Complation unit #1: - -... - -// global scope -{ // local scope - ... -} -` --- _end example_] - == Block scope The following syntaxes introduces a _block scope_ that includes statements: @@ -150,7 +218,7 @@ A name expression holds an identifier that refers to function, variable or a con Postfix expressions group left-to-right. -==== Call expression +==== Call expression A call expression is a postfix expression followed by parentheses containing a possibly empty, comma-separated list of expressions which constitute the arguments to the function. @@ -295,7 +363,7 @@ A variable declaration is a statement that introduces and optionally initialize If the _#text(user-color)[type-clause]_ is empty, then the type of the variable is deduced from the initializer. -== Function declaration +== Function declaration A function declaration declares a function in current scope and associates the function's name, parameters and return type. @@ -319,8 +387,8 @@ A function declaration declares a function in current scope and associates the f The parameters of the function are in the same scope of the _#text(user-color)[statement]_ -=== Parameter syntax +=== Parameter syntax Parameter syntax declares a parameter of a function. -_#text(user-color)[parameter-name] _:_ #text(user-color)[type-clause]_ \ No newline at end of file +_#text(user-color)[parameter-name] _:_ #text(user-color)[type-clause]_ From 92851c7b54ff202e0886dda35ceb867f6c9cbcd0 Mon Sep 17 00:00:00 2001 From: heckerpowered <72550834+heckerpowered@users.noreply.github.com> Date: Wed, 21 Aug 2024 17:36:24 +0800 Subject: [PATCH 06/30] =?UTF-8?q?=E9=87=8D=E6=9E=84SyntaxTree?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Mamba/Code Analysis/Syntax/SyntaxTree.cpp | 194 ++---------------- src/Mamba/Code Analysis/Syntax/SyntaxTree.h | 27 ++- 2 files changed, 42 insertions(+), 179 deletions(-) diff --git a/src/Mamba/Code Analysis/Syntax/SyntaxTree.cpp b/src/Mamba/Code Analysis/Syntax/SyntaxTree.cpp index 020c943..9038fc5 100644 --- a/src/Mamba/Code Analysis/Syntax/SyntaxTree.cpp +++ b/src/Mamba/Code Analysis/Syntax/SyntaxTree.cpp @@ -1,188 +1,28 @@ #include "SyntaxTree.h" -#include "CompilationUnitSyntax.h" -#include "Diagnostic.h" -#include "Lexer.h" -#include "MambaCore.h" -#include "Parser.h" -#include "SourceText.h" -#include "SyntaxKind.h" -#include "SyntaxNode.h" -#include "SyntaxToken.h" +using namespace Mamba; -#include -#include -#include -#include - -namespace Mamba +SyntaxTree::SyntaxTree(const SourceText& SourceText) noexcept : + PrivateSourceText(SourceText) { - [[nodiscard]] String ReadFile(const StringView FileName) noexcept - { - fast_io::native_file_loader NativeFileLoader{ FileName }; - return String(NativeFileLoader.begin(), NativeFileLoader.end()); - } - - SyntaxTree::SyntaxTree(const std::shared_ptr Text) noexcept : - Text(Text) {} - - void SyntaxTree::Parse( - const std::shared_ptr SyntaxTree, - std::shared_ptr& Root, - std::vector& Diagnostics - ) noexcept - { - Parser Parser(SyntaxTree); - Root = Parser.ParseCompilationUnit(); - Diagnostics = std::move(Parser.Diagnostics); - } - - const std::shared_ptr SyntaxTree::Root() const noexcept - { - return PrivateRoot; - } - - const std::vector& SyntaxTree::Diagnostics() const noexcept - { - return PrivateDiagnostics; - } +} - SyntaxTree SyntaxTree::Load(const std::shared_ptr FileName) noexcept - { - const auto Text = std::make_shared(Hatcher([&] - { return ReadFile(*FileName); })); - const auto SourceText = - std::make_shared(Hatcher([=] - { return SourceText::From(Text, FileName); })); - return Parse(SourceText); - } - - SyntaxTree SyntaxTree::Parse(const std::shared_ptr Text) noexcept - { - const auto SourceText = - std::make_shared(Hatcher([&] - { return SourceText::From(Text); })); - return Parse(SourceText); - } - - SyntaxTree SyntaxTree::Parse(const std::shared_ptr Text) noexcept - { - using SyntaxTreeType = const std::shared_ptr; - using RootType = std::shared_ptr&; - using DiagnosticsType = std::vector&; - - using ParseFunctionType = void (&)(SyntaxTreeType, RootType, DiagnosticsType) noexcept; - - return SyntaxTree(Text, static_cast(Parse)); - } - - std::vector> - SyntaxTree::ParseTokens(const std::shared_ptr Text, const bool IncludeEndOfFile) noexcept - { - const auto SourceText = - std::make_shared(Hatcher([&] - { return SourceText::From(Text); })); - return ParseTokens(SourceText, IncludeEndOfFile); - } - - std::vector> SyntaxTree::ParseTokens( - const std::shared_ptr Text, - const bool IncludeEndOfFile - ) noexcept - { - return ParseTokens(Text, {}, IncludeEndOfFile); - } - - std::vector> SyntaxTree::ParseTokens( - const std::shared_ptr Text, - NullablePointer> Diagnostics, - const bool IncludeEndOfFile - ) noexcept - { - const auto SourceText = - std::make_shared(Hatcher([&] - { return SourceText::From(Text); })); - return ParseTokens(SourceText, Diagnostics, IncludeEndOfFile); - } - - std::vector> SyntaxTree::ParseTokens( - const std::shared_ptr Text, - NullablePointer> Diagnostics, - const bool IncludeEndOfFile - ) noexcept - { - auto Tokens = std::vector>(); - - const auto ParseTokens = [&](const std::shared_ptr SyntaxTree, - std::shared_ptr& Root, - std::vector& Diagnostics) noexcept - { - Lexer Lexer(SyntaxTree); - while (true) - { - const auto Token = Lexer.Lex(); - - if (Token->Kind() != SyntaxKind::EndOfFileToken || IncludeEndOfFile) - { - Tokens.emplace_back(Token); - } - - if (Token->Kind() == SyntaxKind::EndOfFileToken) - { - Root = std::make_shared( - SyntaxTree, - std::vector>{}, - Token - ); - break; - } - } - - Diagnostics = std::move(Lexer.Diagnostics); - }; - - ::Mamba::SyntaxTree SyntaxTree(Text, ParseTokens); - if (Diagnostics) - { - using t1 = decltype(*Diagnostics); - using t2 = decltype(SyntaxTree.Diagnostics()); - - *Diagnostics = SyntaxTree.Diagnostics(); - } - - return Tokens; - } - - NullableSharedPtr SyntaxTree::GetParent(const std::shared_ptr Node - ) const noexcept +NullablePointer SyntaxTree::Parent(const SyntaxNode& Node) const noexcept +{ + const auto Iterator = ParentsMap.find(&Node); + if (Iterator == ParentsMap.end()) { - static auto Mutex = std::mutex{}; - - const auto LockGuard = std::lock_guard(Mutex); - if (!Parents) - { - const auto Parents = CreateParentsMap(Root()); - } - - return Parents->at(Node); + return {}; } - SyntaxTree::ParentsMapType - SyntaxTree::CreateParentsMap(const std::shared_ptr Root) const noexcept - { - auto Result = ParentsMapType(); - Result.emplace(Root, nullptr); - CreateParentsMap(Result, Root); - return Result; - } + return Iterator->second; +} - void SyntaxTree::CreateParentsMap(ParentsMapType& Result, const std::shared_ptr Node) - const noexcept +void SyntaxTree::BuildParentsMap(const SyntaxNode& Node) noexcept +{ + for (auto&& Child : Node.Children()) { - for (auto&& Child : Node->Children()) - { - Result.emplace(Child, Node); - CreateParentsMap(Result, Child); - } + ParentsMap.emplace(Child, &Node); + BuildParentsMap(*Child); } -} // namespace Mamba +} diff --git a/src/Mamba/Code Analysis/Syntax/SyntaxTree.h b/src/Mamba/Code Analysis/Syntax/SyntaxTree.h index 3d6cd4c..a5d35d8 100644 --- a/src/Mamba/Code Analysis/Syntax/SyntaxTree.h +++ b/src/Mamba/Code Analysis/Syntax/SyntaxTree.h @@ -4,15 +4,38 @@ #include "CompilationUnitSyntax.h" #include "MambaCore.h" +#include "SourceText.h" namespace Mamba { + class SourceText; + class SyntaxTree { + std::optional PrivateRoot; + const SourceText& PrivateSourceText; + + friend class Compiler; + public: - CompilationUnitSyntax Root; + [[nodiscard]] SyntaxTree(const class SourceText& SourceText) noexcept; + + template + [[nodiscard]] auto&& Root(this SelfT&& Self) noexcept + { + return std::forward(Self).PrivateRoot.value(); + } + + template + [[nodiscard]] const SourceText& Text(this SelfT&& Self) noexcept + { + return std::forward(Self).PrivateSourceText; + } + + NullablePointer Parent(const SyntaxNode& Node) const noexcept; private: - std::unordered_map> ParentsMap; + void BuildParentsMap(const SyntaxNode& Root) noexcept; + std::unordered_map> ParentsMap; }; } // namespace Mamba \ No newline at end of file From c8e087ca5b0c484ce9195ce21febd8999ef5e5d5 Mon Sep 17 00:00:00 2001 From: heckerpowered <72550834+heckerpowered@users.noreply.github.com> Date: Wed, 21 Aug 2024 17:54:52 +0800 Subject: [PATCH 07/30] =?UTF-8?q?=E7=8E=B0=E4=BB=A3=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Mamba/Code Analysis/Syntax/SyntaxNode.cpp | 230 ++++-------------- src/Mamba/Code Analysis/Syntax/SyntaxNode.h | 35 ++- src/Mamba/Code Analysis/Text/SourceText.cpp | 25 +- src/Mamba/Code Analysis/Text/SourceText.h | 9 +- src/Mamba/Code Analysis/Text/TextLocation.cpp | 11 +- src/Mamba/Code Analysis/Text/TextLocation.h | 2 +- 6 files changed, 85 insertions(+), 227 deletions(-) diff --git a/src/Mamba/Code Analysis/Syntax/SyntaxNode.cpp b/src/Mamba/Code Analysis/Syntax/SyntaxNode.cpp index 8adc967..d3c66ce 100644 --- a/src/Mamba/Code Analysis/Syntax/SyntaxNode.cpp +++ b/src/Mamba/Code Analysis/Syntax/SyntaxNode.cpp @@ -1,203 +1,65 @@ ο»Ώ#include "SyntaxNode.h" -#include "fast_io.h" -#include "Literal.h" -#include "MambaCore.h" -#include "SourceText.h" -#include "SyntaxFacts.h" -#include "SyntaxKind.h" #include "SyntaxToken.h" #include "SyntaxTree.h" -#include -#include -#include -namespace Mamba -{ - SyntaxNode::SyntaxNode(const std::shared_ptr SyntaxTree) noexcept : - SyntaxTree(SyntaxTree) - { - } +using namespace Mamba; - SyntaxNode::~SyntaxNode() noexcept {} - - const std::shared_ptr SyntaxNode::Parent() const noexcept - { - return SyntaxTree->GetParent(shared_from_this()); - } - - TextSpan SyntaxNode::Span() const noexcept - { - const auto First = Children().front()->Span(); - const auto Last = Children().back()->Span(); - return TextSpan::FromBounds(First.Start, Last.End()); - } +SyntaxNode::SyntaxNode(const class SyntaxTree* SyntaxTree) noexcept : + PrivateSyntaxTree(SyntaxTree) +{ +} - TextSpan SyntaxNode::FullSpan() const noexcept - { - const auto First = Children().front()->FullSpan(); - const auto Last = Children().back()->FullSpan(); - return TextSpan::FromBounds(First.Start, Last.End()); - } +NullablePointer SyntaxNode::Parent() const noexcept +{ + return Tree()->Parent(*this); +} - TextLocation SyntaxNode::Location() const noexcept - { - return TextLocation(SyntaxTree->Text, Span()); - } +const SyntaxTree* Mamba::SyntaxNode::Tree() const noexcept +{ + return PrivateSyntaxTree; +} - std::vector> SyntaxNode::AncestorsAndSelf() const noexcept - { - auto Ancestors = std::vector>(); - auto Node = shared_from_this(); - while (Node) - { - Ancestors.emplace_back(Node); - Node = Node->Parent(); - } +StringView SyntaxNode::Text() const noexcept +{ + const auto First = Children().front()->Text(); + const auto Last = Children().back()->Text(); + return { First.begin(), Last.end() }; +} - return Ancestors; - } +TextLocation SyntaxNode::Location() const noexcept +{ + return TextLocation{ + .Text = Tree()->Text(), + .View = Text(), + }; +} - std::vector> SyntaxNode::Ancestors() const noexcept +std::vector SyntaxNode::AncestorsAndSelf() const noexcept +{ + auto Ancestors = std::vector(); + auto Node = this; + while (Node) { - return AncestorsAndSelf() | std::views::drop(1) | std::ranges::to(); + Ancestors.emplace_back(Node); + Node = Node->Parent(); } - std::shared_ptr SyntaxNode::LastToken() const noexcept - { - if (auto Token = std::dynamic_pointer_cast(shared_from_this())) - { - return Token; - } + return Ancestors; +} - // A syntax node should always contain at least 1 token. - return Children().back()->LastToken(); - } +std::vector SyntaxNode::Ancestors() const noexcept +{ + return AncestorsAndSelf() | std::views::drop(1) | std::ranges::to(); +} - String SyntaxNode::ToString() const noexcept +const SyntaxToken* SyntaxNode::LastToken() const noexcept +{ + if (auto Token = dynamic_cast(this)) { - auto Stream = std::basic_stringstream(); - PrettyPrint(Stream, shared_from_this()); - return Stream.str(); + return Token; } - void SyntaxNode::PrettyPrint( - std::basic_stringstream& Stream, - const std::shared_ptr Node, - String Indent, - const bool IsLast - ) noexcept - { - const auto Token = std::dynamic_pointer_cast(Node); - const auto TokenMarker = String(IsLast ? TEXT("└──") : TEXT("β”œβ”€β”€")); - - Stream.write(Indent.data(), Indent.size()); - Stream.write(TokenMarker.data(), TokenMarker.size()); - - const auto KindText = SyntaxFacts::ToString(Node->Kind()); - Stream.write(KindText.data(), KindText.size()); - - if (Token && Token->Value) - { - Stream.put(TEXT(' ')); - switch (Token->Value->Type) - { - case LiteralType::String: - { - const auto String = *Token->Value->StringValue; - Stream.write(String->data(), String->size()); - break; - } - case LiteralType::Character: - Stream.put(Token->Value->Value.CharacterValue); - break; - case LiteralType::UnsignedByte: - { - const auto String = Concat(static_cast(Token->Value->Value.UnsignedByteValue)); - Stream.write(String.data(), String.size()); - break; - } - case LiteralType::UnsignedShort: - { - const auto String = Concat(Token->Value->Value.UnsignedShortValue); - Stream.write(String.data(), String.size()); - break; - } - case LiteralType::UnsignedInt: - { - const auto String = Concat(Token->Value->Value.UnsignedIntValue); - Stream.write(String.data(), String.size()); - break; - } - case LiteralType::UnsignedLong: - { - const auto String = Concat(Token->Value->Value.UnsignedLongValue); - Stream.write(String.data(), String.size()); - break; - } - case LiteralType::SignedByte: - { - const auto String = Concat(static_cast(Token->Value->Value.SignedByteValue)); - Stream.write(String.data(), String.size()); - break; - } - case LiteralType::SignedShort: - { - const auto String = Concat(Token->Value->Value.SignedShortValue); - Stream.write(String.data(), String.size()); - break; - } - case LiteralType::SignedInt: - { - const auto String = Concat(Token->Value->Value.SignedIntValue); - Stream.write(String.data(), String.size()); - break; - } - case LiteralType::SignedLong: - { - const auto String = Concat(Token->Value->Value.SignedLongValue); - Stream.write(String.data(), String.size()); - break; - } - case LiteralType::Double: - { - const auto String = Concat(Token->Value->Value.DoubleValue); - Stream.write(String.data(), String.size()); - break; - } - case LiteralType::Float: - { - const auto String = Concat(Token->Value->Value.FloatValue); - Stream.write(String.data(), String.size()); - break; - } - case LiteralType::Boolean: - { - const auto String = Concat(Token->Value->Value.BooleanValue); - Stream.write(String.data(), String.size()); - break; - } - case LiteralType::Empty: - break; - } - } - - if (Node->Kind() == SyntaxKind::IdentifierToken) - { - Stream.put(TEXT(' ')); - const auto View = Node->SyntaxTree->Text->ToView(Node->Span()); - Stream.write(View.data(), View.size()); - } - - Stream.put(TEXT('\n')); - - Indent += IsLast ? TEXT(" ") : TEXT("β”‚ "); - - const auto LastChild = Node->Children().size() == 0 ? nullptr : Node->Children().back(); - - for (auto Child : Node->Children()) - { - PrettyPrint(Stream, Child, Indent, Child == LastChild); - } - } -} // namespace Mamba \ No newline at end of file + // A syntax node should always contain at least 1 token. + return Children().back()->LastToken(); +} \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/SyntaxNode.h b/src/Mamba/Code Analysis/Syntax/SyntaxNode.h index 9b45bee..a1e7648 100644 --- a/src/Mamba/Code Analysis/Syntax/SyntaxNode.h +++ b/src/Mamba/Code Analysis/Syntax/SyntaxNode.h @@ -2,7 +2,6 @@ #include "SyntaxKind.h" #include "TextLocation.h" -#include "TextSpan.h" #include #include @@ -10,27 +9,31 @@ namespace Mamba { + class SyntaxTree; + class SyntaxToken; + class SyntaxNode { - public: - std::shared_ptr SyntaxTree; + const class SyntaxTree* PrivateSyntaxTree; - virtual ~SyntaxNode() noexcept; + public: + [[nodiscard]] SyntaxNode(const class SyntaxTree* SyntaxTree) noexcept; + virtual ~SyntaxNode() noexcept = default; - [[nodiscard]] const NullableSharedPtr Parent() const noexcept; + [[nodiscard]] NullablePointer Parent() const noexcept; + [[nodiscard]] const SyntaxTree* Tree() const noexcept; [[nodiscard]] virtual SyntaxKind Kind() const noexcept = 0; - [[nodiscard]] virtual TextSpan Span() const noexcept; - [[nodiscard]] virtual TextSpan FullSpan() const noexcept; + [[nodiscard]] virtual StringView Text() const noexcept; [[nodiscard]] TextLocation Location() const noexcept; // Gets all children of the node, children are member variables of types that indirectly or directly derived // from SyntaxNode, when implementing, the result sequence of children should conform to the sequence in which // they were defined within the type. If the member variable is a container whose element type is, or directly // or indirectly derived from SyntaxNode, it should be expanded and inserted in its original sequence. - [[nodiscard]] virtual std::vector> Children() const noexcept = 0; - [[nodiscard]] std::vector> AncestorsAndSelf() const noexcept; - [[nodiscard]] std::vector> Ancestors() const noexcept; + [[nodiscard]] virtual std::vector Children() const noexcept = 0; + [[nodiscard]] std::vector AncestorsAndSelf() const noexcept; + [[nodiscard]] std::vector Ancestors() const noexcept; #if defined(__cpp_lib_ranges_to_container) && __cpp_lib_ranges_to_container >= 202202L template typename ContainerType> @@ -40,16 +43,6 @@ namespace Mamba } #endif - [[nodiscard]] std::shared_ptr LastToken() const noexcept; - - String ToString() const noexcept; - - private: - static void PrettyPrint( - std::basic_stringstream& Stream, - const std::shared_ptr Node, - String Indent = TEXT(""), - const bool IsLast = true - ) noexcept; + [[nodiscard]] const SyntaxToken* LastToken() const noexcept; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Text/SourceText.cpp b/src/Mamba/Code Analysis/Text/SourceText.cpp index 41824df..734e7af 100644 --- a/src/Mamba/Code Analysis/Text/SourceText.cpp +++ b/src/Mamba/Code Analysis/Text/SourceText.cpp @@ -62,17 +62,12 @@ std::size_t SourceText::LineIndex(const std::size_t Position) const noexcept return Lower - 1; } -String SourceText::ToString(const std::size_t Start, const std::size_t Length) const noexcept +const std::vector& SourceText::Lines() const noexcept { - return PrivateInfo.Text.substr(Start, Length); + return PrivateLines; } -String SourceText::ToString(const TextSpan Span) const noexcept -{ - return ToString(Span.Start, Span.Length); -} - -StringView SourceText::ToView(const std::size_t Start, const std::size_t Length) const noexcept +StringView SourceText::SubView(const std::size_t Start, const std::size_t Length) const noexcept { const auto End = Start + Length; const auto ViewBegin = PrivateInfo.Text.data() + Start; @@ -81,9 +76,19 @@ StringView SourceText::ToView(const std::size_t Start, const std::size_t Length) return StringView(ViewBegin, ViewEnd); } -StringView SourceText::ToView(const TextSpan Span) const noexcept +StringView SourceText::SubView(const TextSpan Span) const noexcept +{ + return SubView(Span.Start, Span.Length); +} + +std::size_t SourceText::RelativeBegin(const StringView View) const noexcept +{ + return View.data() - PrivateInfo.Text.data(); +} + +std::size_t SourceText::RelativeEnd(const StringView View) const noexcept { - return ToView(Span.Start, Span.Length); + return RelativeBegin(View) + View.length(); } SourceText::SourceText(const SourceTextInfo& Info) noexcept : diff --git a/src/Mamba/Code Analysis/Text/SourceText.h b/src/Mamba/Code Analysis/Text/SourceText.h index 96f3ef6..2b3cde3 100644 --- a/src/Mamba/Code Analysis/Text/SourceText.h +++ b/src/Mamba/Code Analysis/Text/SourceText.h @@ -32,6 +32,7 @@ namespace Mamba [[nodiscard]] std::size_t Length() const noexcept; [[nodiscard]] std::size_t LineIndex(const std::size_t Position) const noexcept; + [[nodiscard]] const std::vector& Lines() const noexcept; template [[nodiscard]] auto&& ToString(this SelfT&& Self) noexcept @@ -39,11 +40,11 @@ namespace Mamba return std::forward_like(Self.PrivateInfo.Text); } - [[nodiscard]] String ToString(const std::size_t Start, const std::size_t Length) const noexcept; - [[nodiscard]] String ToString(const TextSpan Span) const noexcept; + [[nodiscard]] StringView SubView(const std::size_t Start, const std::size_t Length) const noexcept; + [[nodiscard]] StringView SubView(const TextSpan Span) const noexcept; - [[nodiscard]] StringView ToView(const std::size_t Start, const std::size_t Length) const noexcept; - [[nodiscard]] StringView ToView(const TextSpan Span) const noexcept; + [[nodiscard]] std::size_t RelativeBegin(const StringView View) const noexcept; + [[nodiscard]] std::size_t RelativeEnd(const StringView View) const noexcept; private: static std::vector SplitLines(const SourceTextInfo& Info); diff --git a/src/Mamba/Code Analysis/Text/TextLocation.cpp b/src/Mamba/Code Analysis/Text/TextLocation.cpp index 13c4181..180b2c5 100644 --- a/src/Mamba/Code Analysis/Text/TextLocation.cpp +++ b/src/Mamba/Code Analysis/Text/TextLocation.cpp @@ -1,27 +1,24 @@ #include "TextLocation.h" - #include "SourceText.h" -#include "TextLine.h" -#include "TextSpan.h" using namespace Mamba; std::size_t TextLocation::StartLine() const noexcept { - return Text.LineIndex(Span.Start); + return Text.LineIndex(Text.RelativeBegin(View)); } std::size_t TextLocation::StartCharacter() const noexcept { - return Span.Start - Text.Lines()[StartLine()].Start; + return Text.RelativeBegin(View) - Text.Lines()[StartLine()].Start; } std::size_t TextLocation::EndLine() const noexcept { - return Text.LineIndex(Span.End()); + return Text.LineIndex(Text.RelativeEnd(View)); } std::size_t TextLocation::EndCharacter() const noexcept { - return Span.End() - Text.Lines()[EndLine()].Start; + return Text.RelativeEnd(View) - Text.Lines()[EndLine()].Start; } \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Text/TextLocation.h b/src/Mamba/Code Analysis/Text/TextLocation.h index b1bd685..aebd3cd 100644 --- a/src/Mamba/Code Analysis/Text/TextLocation.h +++ b/src/Mamba/Code Analysis/Text/TextLocation.h @@ -8,7 +8,7 @@ namespace Mamba struct TextLocation { SourceText Text; - TextSpan Span; + StringView View; template [[nodiscard]] decltype(auto) FileName(this SelfT&& Self) noexcept From bed0d0f6f8ca40222ba9ac6ac5fdca37f8e658cc Mon Sep 17 00:00:00 2001 From: heckerpowered <72550834+heckerpowered@users.noreply.github.com> Date: Thu, 22 Aug 2024 23:41:33 +0800 Subject: [PATCH 08/30] =?UTF-8?q?=E7=A7=BB=E9=99=A4shared=5Fptr?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Mamba/Code Analysis/Binding/Binder.cpp | 2 +- src/Mamba/Code Analysis/Binding/Binder.h | 4 +- .../Code Analysis/Binding/BoundConstant.h | 2 +- .../Syntax/AssignmentExpressionSyntax.cpp | 42 +- .../Syntax/AssignmentExpressionSyntax.h | 19 +- .../Syntax/BinaryExpressionSyntax.cpp | 43 +- .../Syntax/BinaryExpressionSyntax.h | 21 +- .../Syntax/BlockStatementSyntax.cpp | 78 +- .../Syntax/BlockStatementSyntax.h | 25 +- .../Syntax/BreakStatementSyntax.cpp | 28 +- .../Syntax/BreakStatementSyntax.h | 9 +- .../Syntax/CallExpressionSyntax.cpp | 78 +- .../Syntax/CallExpressionSyntax.h | 24 +- .../Syntax/CompilationUnitSyntax.cpp | 59 +- .../Syntax/CompilationUnitSyntax.h | 22 +- src/Mamba/Code Analysis/Syntax/Constant.h | 51 + .../Syntax/ContinueStatementSyntax.cpp | 29 +- .../Syntax/ContinueStatementSyntax.h | 10 +- .../Syntax/DoWhileStatementSyntax.cpp | 44 +- .../Syntax/DoWhileStatementSyntax.h | 27 +- .../Code Analysis/Syntax/ElseClauseSyntax.cpp | 39 +- .../Code Analysis/Syntax/ElseClauseSyntax.h | 19 +- .../Syntax/ExpressionStatementSyntax.cpp | 37 +- .../Syntax/ExpressionStatementSyntax.h | 14 +- .../Code Analysis/Syntax/ExpressionSyntax.cpp | 2 +- .../Code Analysis/Syntax/ExpressionSyntax.h | 2 +- .../Syntax/ForStatementSyntax.cpp | 77 +- .../Code Analysis/Syntax/ForStatementSyntax.h | 46 +- .../Syntax/FunctionDeclarationSyntax.cpp | 96 +- .../Syntax/FunctionDeclarationSyntax.h | 40 +- .../Syntax/GlobalStatementSyntax.cpp | 37 +- .../Syntax/GlobalStatementSyntax.h | 14 +- .../Syntax/IfStatementSyntax.cpp | 115 +-- .../Code Analysis/Syntax/IfStatementSyntax.h | 33 +- src/Mamba/Code Analysis/Syntax/Lexer.cpp | 2 +- src/Mamba/Code Analysis/Syntax/Lexer.h | 4 +- src/Mamba/Code Analysis/Syntax/Literal.h | 129 +-- .../Syntax/LiteralExpressionSyntax.cpp | 51 +- .../Syntax/LiteralExpressionSyntax.h | 23 +- .../Code Analysis/Syntax/MemberSyntax.cpp | 3 +- src/Mamba/Code Analysis/Syntax/MemberSyntax.h | 4 +- .../Syntax/NameExpressionSyntax.cpp | 33 +- .../Syntax/NameExpressionSyntax.h | 9 +- .../Code Analysis/Syntax/ParameterSyntax.cpp | 40 +- .../Code Analysis/Syntax/ParameterSyntax.h | 16 +- .../Syntax/ParenthesizedExpressionSyntax.cpp | 48 +- .../Syntax/ParenthesizedExpressionSyntax.h | 19 +- src/Mamba/Code Analysis/Syntax/Parser.cpp | 898 ++++++++---------- src/Mamba/Code Analysis/Syntax/Parser.h | 108 ++- .../Syntax/ReturnStatementSyntax.cpp | 41 +- .../Syntax/ReturnStatementSyntax.h | 18 +- .../Syntax/SeperatedSyntaxList.h | 35 +- .../Code Analysis/Syntax/StatementSyntax.cpp | 2 +- .../Code Analysis/Syntax/StatementSyntax.h | 2 +- src/Mamba/Code Analysis/Syntax/SyntaxNode.cpp | 11 - src/Mamba/Code Analysis/Syntax/SyntaxNode.h | 14 +- .../Code Analysis/Syntax/SyntaxToken.cpp | 58 +- src/Mamba/Code Analysis/Syntax/SyntaxToken.h | 34 +- .../Code Analysis/Syntax/TypeClauseSyntax.cpp | 35 +- .../Code Analysis/Syntax/TypeClauseSyntax.h | 15 +- .../Syntax/UnaryExpressionSyntax.cpp | 40 +- .../Syntax/UnaryExpressionSyntax.h | 15 +- .../Syntax/VariableDeclarationSyntax.cpp | 59 +- .../Syntax/VariableDeclarationSyntax.h | 31 +- .../Syntax/WhileStatementSyntax.cpp | 42 +- .../Syntax/WhileStatementSyntax.h | 22 +- 66 files changed, 1501 insertions(+), 1548 deletions(-) create mode 100644 src/Mamba/Code Analysis/Syntax/Constant.h diff --git a/src/Mamba/Code Analysis/Binding/Binder.cpp b/src/Mamba/Code Analysis/Binding/Binder.cpp index df44f72..6b6aad9 100644 --- a/src/Mamba/Code Analysis/Binding/Binder.cpp +++ b/src/Mamba/Code Analysis/Binding/Binder.cpp @@ -530,7 +530,7 @@ void Binder::DeclareBuiltinFunctions() noexcept { } -Binder::Binder(const std::shared_ptr SyntaxTree) noexcept : +Binder::Binder(const class SyntaxTree* SyntaxTree) noexcept : Scope(std::make_shared(nullptr)), SyntaxTree(SyntaxTree) { } diff --git a/src/Mamba/Code Analysis/Binding/Binder.h b/src/Mamba/Code Analysis/Binding/Binder.h index 92af963..0f6c8e3 100644 --- a/src/Mamba/Code Analysis/Binding/Binder.h +++ b/src/Mamba/Code Analysis/Binding/Binder.h @@ -33,7 +33,7 @@ namespace Mamba std::shared_ptr BindExpression(const std::shared_ptr Expression) noexcept; std::shared_ptr BindVariableDeclaration(const std::shared_ptr VariableDeclaration) noexcept; std::shared_ptr BindVariableDeclaration( - const std::shared_ptr Identifier, + const SyntaxToken* Identifier, const bool IsReadOnly, const std::shared_ptr Type, const NullableSharedPtr Constant @@ -60,7 +60,7 @@ namespace Mamba void DeclareBuiltinFunction(); public: - [[nodiscard]] Binder(const std::shared_ptr SyntaxTree) noexcept; + [[nodiscard]] Binder(const class SyntaxTree* SyntaxTree) noexcept; std::shared_ptr BindCompilationUnit() noexcept; }; diff --git a/src/Mamba/Code Analysis/Binding/BoundConstant.h b/src/Mamba/Code Analysis/Binding/BoundConstant.h index 9f83012..ea89fca 100644 --- a/src/Mamba/Code Analysis/Binding/BoundConstant.h +++ b/src/Mamba/Code Analysis/Binding/BoundConstant.h @@ -12,6 +12,6 @@ namespace Mamba const std::shared_ptr Value; - const LiteralValue* operator->() const noexcept; + const Literal* operator->() const noexcept; }; }; // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/AssignmentExpressionSyntax.cpp b/src/Mamba/Code Analysis/Syntax/AssignmentExpressionSyntax.cpp index a69820b..e72abb6 100644 --- a/src/Mamba/Code Analysis/Syntax/AssignmentExpressionSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/AssignmentExpressionSyntax.cpp @@ -1,24 +1,28 @@ #include "AssignmentExpressionSyntax.h" -namespace Mamba +using namespace Mamba; + +AssignmentExpressionSyntax::AssignmentExpressionSyntax( + const class SyntaxTree* SyntaxTree, + const SyntaxToken* IdentifierToken, + const SyntaxToken* AssignmentToken, + const ExpressionSyntax* Expression +) noexcept : + Super(SyntaxTree), IdentifierToken(IdentifierToken), AssignmentToken(AssignmentToken), Expression(Expression) { - AssignmentExpressionSyntax::AssignmentExpressionSyntax( - const std::shared_ptr SyntaxTree, - const std::shared_ptr IdentifierToken, - const std::shared_ptr AssignmentToken, - const std::shared_ptr Expression - ) noexcept : - Super(SyntaxTree), IdentifierToken(IdentifierToken), AssignmentToken(AssignmentToken), Expression(Expression) - { - } +} - std::vector> AssignmentExpressionSyntax::Children() const noexcept - { - return { IdentifierToken, AssignmentToken, Expression }; - } +AssignmentExpressionSyntax::~AssignmentExpressionSyntax() noexcept +{ + delete Expression; +} - SyntaxKind AssignmentExpressionSyntax::Kind() const noexcept - { - return SyntaxKind::AssignmentExpression; - } -} // namespace Mamba \ No newline at end of file +std::vector AssignmentExpressionSyntax::Children() const noexcept +{ + return { IdentifierToken, AssignmentToken, Expression }; +} + +SyntaxKind AssignmentExpressionSyntax::Kind() const noexcept +{ + return SyntaxKind::AssignmentExpression; +} \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/AssignmentExpressionSyntax.h b/src/Mamba/Code Analysis/Syntax/AssignmentExpressionSyntax.h index 4de09da..855f911 100644 --- a/src/Mamba/Code Analysis/Syntax/AssignmentExpressionSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/AssignmentExpressionSyntax.h @@ -3,7 +3,6 @@ #include "ExpressionSyntax.h" #include "SyntaxKind.h" #include "SyntaxToken.h" -#include #include namespace Mamba @@ -14,17 +13,19 @@ namespace Mamba using Super = ExpressionSyntax; [[nodiscard]] AssignmentExpressionSyntax( - const std::shared_ptr SyntaxTree, - const std::shared_ptr IdentifierToken, - const std::shared_ptr AssignmentToken, - const std::shared_ptr Expression + const class SyntaxTree* SyntaxTree, + const SyntaxToken* IdentifierToken, + const SyntaxToken* AssignmentToken, + const ExpressionSyntax* Expression ) noexcept; - std::vector> Children() const noexcept override; + ~AssignmentExpressionSyntax() noexcept override; + + std::vector Children() const noexcept override; SyntaxKind Kind() const noexcept override; - const std::shared_ptr IdentifierToken; - const std::shared_ptr AssignmentToken; - const std::shared_ptr Expression; + const SyntaxToken* IdentifierToken; + const SyntaxToken* AssignmentToken; + const ExpressionSyntax* Expression; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/BinaryExpressionSyntax.cpp b/src/Mamba/Code Analysis/Syntax/BinaryExpressionSyntax.cpp index b87e33e..18f6bee 100644 --- a/src/Mamba/Code Analysis/Syntax/BinaryExpressionSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/BinaryExpressionSyntax.cpp @@ -1,24 +1,29 @@ #include "BinaryExpressionSyntax.h" -namespace Mamba +using namespace Mamba; + +BinaryExpressionSyntax::BinaryExpressionSyntax( + const class SyntaxTree* SyntaxTree, + const ExpressionSyntax* Left, + const SyntaxToken* OperatorToken, + const ExpressionSyntax* Right +) noexcept : + Super(SyntaxTree), Left(Left), OperatorToken(OperatorToken), Right(Right) { - BinaryExpressionSyntax::BinaryExpressionSyntax( - const std::shared_ptr SyntaxTree, - const std::shared_ptr Left, - const std::shared_ptr OperatorToken, - const std::shared_ptr Right - ) noexcept : - Super(SyntaxTree), Left(Left), OperatorToken(OperatorToken), Right(Right) - { - } +} - SyntaxKind BinaryExpressionSyntax::Kind() const noexcept - { - return SyntaxKind::BinaryExpression; - } +BinaryExpressionSyntax::~BinaryExpressionSyntax() noexcept +{ + delete Left; + delete Right; +} - std::vector> BinaryExpressionSyntax::Children() const noexcept - { - return { Left, OperatorToken, Right }; - } -} // namespace Mamba \ No newline at end of file +SyntaxKind BinaryExpressionSyntax::Kind() const noexcept +{ + return SyntaxKind::BinaryExpression; +} + +std::vector BinaryExpressionSyntax::Children() const noexcept +{ + return { Left, OperatorToken, Right }; +} \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/BinaryExpressionSyntax.h b/src/Mamba/Code Analysis/Syntax/BinaryExpressionSyntax.h index 95e4a5e..113417e 100644 --- a/src/Mamba/Code Analysis/Syntax/BinaryExpressionSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/BinaryExpressionSyntax.h @@ -3,7 +3,6 @@ #include "ExpressionSyntax.h" #include "SyntaxKind.h" #include "SyntaxToken.h" -#include namespace Mamba { @@ -12,16 +11,20 @@ namespace Mamba public: using Super = ExpressionSyntax; - [[nodiscard]] BinaryExpressionSyntax(const std::shared_ptr SyntaxTree, - const std::shared_ptr Left, - const std::shared_ptr OperatorToken, - const std::shared_ptr Right) noexcept; + [[nodiscard]] BinaryExpressionSyntax( + const class SyntaxTree* SyntaxTree, + const ExpressionSyntax* Left, + const SyntaxToken* OperatorToken, + const ExpressionSyntax* Right + ) noexcept; + + ~BinaryExpressionSyntax() noexcept override; SyntaxKind Kind() const noexcept override; - std::vector> Children() const noexcept override; + std::vector Children() const noexcept override; - std::shared_ptr Left; - std::shared_ptr OperatorToken; - std::shared_ptr Right; + const ExpressionSyntax* Left; + const SyntaxToken* OperatorToken; + const ExpressionSyntax* Right; }; } // namespace Mamba diff --git a/src/Mamba/Code Analysis/Syntax/BlockStatementSyntax.cpp b/src/Mamba/Code Analysis/Syntax/BlockStatementSyntax.cpp index 6de956a..5f77261 100644 --- a/src/Mamba/Code Analysis/Syntax/BlockStatementSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/BlockStatementSyntax.cpp @@ -1,54 +1,50 @@ #include "BlockStatementSyntax.h" -#include "SyntaxNode.h" -#include "SyntaxToken.h" - -#include +using namespace Mamba; + +BlockStatementSyntax::BlockStatementSyntax( + const class SyntaxTree* SyntaxTree, + const SyntaxToken* OpenBraceToken, + std::vector&& Statements, + const SyntaxToken* CloseBraceToken +) noexcept : + Super(SyntaxTree), + OpenBraceToken(OpenBraceToken), + Statements(std::move(Statements)), + CloseBraceToken(CloseBraceToken) +{ +} -namespace Mamba +BlockStatementSyntax::~BlockStatementSyntax() noexcept { - BlockStatementSyntax::BlockStatementSyntax( - const std::shared_ptr SyntaxTree, - const std::shared_ptr OpenBraceToken, - const std::vector>& Statements, - const std::shared_ptr CloseBraceToken) noexcept : - Super(SyntaxTree), OpenBraceToken(OpenBraceToken), Statements(Statements), CloseBraceToken(CloseBraceToken) + for (auto&& Statement : Statements) { + delete Statement; } +} - BlockStatementSyntax::BlockStatementSyntax(const std::shared_ptr SyntaxTree, - const std::shared_ptr OpenBraceToken, - std::vector>&& Statements, - const std::shared_ptr CloseBraceToken) noexcept - : - Super(SyntaxTree), - OpenBraceToken(OpenBraceToken), - Statements(std::move(Statements)), - CloseBraceToken(CloseBraceToken) - { - } +SyntaxKind BlockStatementSyntax::Kind() const noexcept +{ + return SyntaxKind::BlockStatement; +} - SyntaxKind BlockStatementSyntax::Kind() const noexcept - { - return SyntaxKind::BlockStatement; - } +std::vector BlockStatementSyntax::Children() const noexcept +{ + auto Result = std::vector(); + Result.reserve(Statements.size() + 2); - std::vector> BlockStatementSyntax::Children() const noexcept - { - auto Result = std::vector>(); - Result.reserve(Statements.size() + 2); + Result.emplace_back(OpenBraceToken); - Result.emplace_back(OpenBraceToken); -#if __cpp_lib_containers_ranges == 202202L - Result.append_range(Statements); +#if defined(__cpp_lib_containers_ranges) && __cpp_lib_containers_ranges >= 202202L + Result.append_range(Statements); #else - for (auto&& Statement : Statements) - { - Result.emplace_back(std::forward(Statement)); - } + for (auto Statement : Statements) + { + Result.emplace_back(Statement); + } #endif - Result.emplace_back(CloseBraceToken); - return Result; - } -} // namespace Mamba \ No newline at end of file + Result.emplace_back(CloseBraceToken); + + return Result; +} \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/BlockStatementSyntax.h b/src/Mamba/Code Analysis/Syntax/BlockStatementSyntax.h index b5f000e..fbb2419 100644 --- a/src/Mamba/Code Analysis/Syntax/BlockStatementSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/BlockStatementSyntax.h @@ -2,8 +2,8 @@ #include "StatementSyntax.h" #include "SyntaxKind.h" +#include "SyntaxToken.h" -#include #include namespace Mamba @@ -13,21 +13,20 @@ namespace Mamba public: using Super = StatementSyntax; - [[nodiscard]] BlockStatementSyntax(const std::shared_ptr SyntaxTree, - const std::shared_ptr OpenBraceToken, - const std::vector>& Statements, - const std::shared_ptr CloseBraceToken) noexcept; + [[nodiscard]] BlockStatementSyntax( + const class SyntaxTree* SyntaxTree, + const SyntaxToken* OpenBraceToken, + std::vector&& Statements, + const SyntaxToken* CloseBraceToken + ) noexcept; - [[nodiscard]] BlockStatementSyntax(const std::shared_ptr SyntaxTree, - const std::shared_ptr OpenBraceToken, - std::vector>&& Statements, - const std::shared_ptr CloseBraceToken) noexcept; + ~BlockStatementSyntax() noexcept override; SyntaxKind Kind() const noexcept override; - std::vector> Children() const noexcept override; + std::vector Children() const noexcept override; - const std::shared_ptr OpenBraceToken; - const std::vector> Statements; - const std::shared_ptr CloseBraceToken; + const SyntaxToken* OpenBraceToken; + std::vector Statements; + const SyntaxToken* CloseBraceToken; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/BreakStatementSyntax.cpp b/src/Mamba/Code Analysis/Syntax/BreakStatementSyntax.cpp index 6ae3f0b..bc252fb 100644 --- a/src/Mamba/Code Analysis/Syntax/BreakStatementSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/BreakStatementSyntax.cpp @@ -2,21 +2,19 @@ #include "SyntaxToken.h" -namespace Mamba +using namespace Mamba; + +BreakStatementSyntax::BreakStatementSyntax(const class SyntaxTree* SyntaxTree, const SyntaxToken* Keyword) noexcept : + Super(SyntaxTree), Keyword(Keyword) { - BreakStatementSyntax::BreakStatementSyntax(const std::shared_ptr SyntaxTree, - const std::shared_ptr Keyword) noexcept : - Super(SyntaxTree), Keyword(Keyword) - { - } +} - SyntaxKind BreakStatementSyntax::Kind() const noexcept - { - return SyntaxKind::BreakStatement; - } +SyntaxKind BreakStatementSyntax::Kind() const noexcept +{ + return SyntaxKind::BreakStatement; +} - std::vector> BreakStatementSyntax::Children() const noexcept - { - return { Keyword }; - } -} // namespace Mamba \ No newline at end of file +std::vector BreakStatementSyntax::Children() const noexcept +{ + return { Keyword }; +} \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/BreakStatementSyntax.h b/src/Mamba/Code Analysis/Syntax/BreakStatementSyntax.h index 335edb5..9490675 100644 --- a/src/Mamba/Code Analysis/Syntax/BreakStatementSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/BreakStatementSyntax.h @@ -1,7 +1,7 @@ #pragma once #include "StatementSyntax.h" -#include +#include "SyntaxToken.h" namespace Mamba { @@ -10,12 +10,11 @@ namespace Mamba public: using Super = StatementSyntax; - [[nodiscard]] BreakStatementSyntax(const std::shared_ptr SyntaxTree, - const std::shared_ptr Keyword) noexcept; + [[nodiscard]] BreakStatementSyntax(const class SyntaxTree* SyntaxTree, const SyntaxToken* Keyword) noexcept; SyntaxKind Kind() const noexcept override; - std::vector> Children() const noexcept override; + std::vector Children() const noexcept override; - const std::shared_ptr Keyword; + const SyntaxToken* Keyword; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/CallExpressionSyntax.cpp b/src/Mamba/Code Analysis/Syntax/CallExpressionSyntax.cpp index 8a39a3f..7d29976 100644 --- a/src/Mamba/Code Analysis/Syntax/CallExpressionSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/CallExpressionSyntax.cpp @@ -1,44 +1,54 @@ #include "CallExpressionSyntax.h" -namespace Mamba +using namespace Mamba; + +CallExpressionSyntax::CallExpressionSyntax( + const class SyntaxTree* SyntaxTree, + const SyntaxToken* Identifier, + const SyntaxToken* OpenParenthesisToken, + SeperatedSyntaxList Arguments, + const SyntaxToken* CloseParenthesisToken +) noexcept : + Super(SyntaxTree), + Identifier(Identifier), + OpenParenthesisToken(OpenParenthesisToken), + Arguments(Arguments), + CloseParenthesisToken(CloseParenthesisToken) { - CallExpressionSyntax::CallExpressionSyntax( - const std::shared_ptr SyntaxTree, - const std::shared_ptr Identifier, - const std::shared_ptr OpenParenthesisToken, - const std::shared_ptr>> Arguments, - const std::shared_ptr CloseParenthesisToken) noexcept : - Super(SyntaxTree), - Identifier(Identifier), - OpenParenthesisToken(OpenParenthesisToken), - Arguments(Arguments), - CloseParenthesisToken(CloseParenthesisToken) - { - } +} - SyntaxKind CallExpressionSyntax::Kind() const noexcept +CallExpressionSyntax::~CallExpressionSyntax() noexcept +{ + for (auto Argument : Arguments.Nodes()) { - return SyntaxKind::CallExpression; + delete Argument; } +} - std::vector> CallExpressionSyntax::Children() const noexcept - { - auto Result = std::vector>(); - - // Arguments->Count() returns nodes count, so multiply by 2 to count with separators - Result.reserve(2 + Arguments->Count() * 2); - Result.emplace_back(Identifier); - Result.emplace_back(OpenParenthesisToken); -#if __cpp_lib_containers_ranges == 202202L - Result.append_range(Arguments->WithSeperators()); +SyntaxKind CallExpressionSyntax::Kind() const noexcept +{ + return SyntaxKind::CallExpression; +} + +std::vector CallExpressionSyntax::Children() const noexcept +{ + auto Result = std::vector(); + + // Arguments->Count() returns nodes count, so multiply by 2 to count with separators + Result.reserve(2 + Arguments.Count() * 2); + Result.emplace_back(Identifier); + Result.emplace_back(OpenParenthesisToken); + +#if defined(__cpp_lib_containers_ranges) && __cpp_lib_containers_ranges >= 202202L + Result.append_range(Arguments.WithSeperators()); #else - for (auto&& Argument : Arguments->WithSeperators()) - { - Result.emplace_back(std::forward(Argument)); - } + for (auto Argument : Arguments.WithSeperators()) + { + Result.emplace_back(std::forward(Argument)); + } #endif - Result.emplace_back(CloseParenthesisToken); - return Result; - } -} // namespace Mamba \ No newline at end of file + Result.emplace_back(CloseParenthesisToken); + + return Result; +} \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/CallExpressionSyntax.h b/src/Mamba/Code Analysis/Syntax/CallExpressionSyntax.h index 729032c..2e5fa22 100644 --- a/src/Mamba/Code Analysis/Syntax/CallExpressionSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/CallExpressionSyntax.h @@ -4,7 +4,6 @@ #include "SeperatedSyntaxList.h" #include "SyntaxNode.h" #include "SyntaxToken.h" -#include namespace Mamba { @@ -14,18 +13,21 @@ namespace Mamba using Super = ExpressionSyntax; [[nodiscard]] CallExpressionSyntax( - const std::shared_ptr SyntaxTree, - const std::shared_ptr Identifier, - const std::shared_ptr OpenParenthesisToken, - const std::shared_ptr>> Arguments, - const std::shared_ptr CloseParenthesisToken) noexcept; + const class SyntaxTree* SyntaxTree, + const SyntaxToken* Identifier, + const SyntaxToken* OpenParenthesisToken, + SeperatedSyntaxList Arguments, + const SyntaxToken* CloseParenthesisToken + ) noexcept; + + ~CallExpressionSyntax() noexcept override; SyntaxKind Kind() const noexcept override; - std::vector> Children() const noexcept override; + std::vector Children() const noexcept override; - const std::shared_ptr Identifier; - const std::shared_ptr OpenParenthesisToken; - const std::shared_ptr>> Arguments; - const std::shared_ptr CloseParenthesisToken; + const SyntaxToken* Identifier; + const SyntaxToken* OpenParenthesisToken; + SeperatedSyntaxList Arguments; + const SyntaxToken* CloseParenthesisToken; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/CompilationUnitSyntax.cpp b/src/Mamba/Code Analysis/Syntax/CompilationUnitSyntax.cpp index c3da19f..24146a9 100644 --- a/src/Mamba/Code Analysis/Syntax/CompilationUnitSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/CompilationUnitSyntax.cpp @@ -1,44 +1,39 @@ #include "CompilationUnitSyntax.h" -#include "MemberSyntax.h" -#include "SyntaxNode.h" -#include "SyntaxToken.h" -namespace Mamba +using namespace Mamba; + +CompilationUnitSyntax::CompilationUnitSyntax(const SyntaxTree* SyntaxTree, std::vector&& Members, const SyntaxToken* EndOfFileToken) noexcept : + Super(SyntaxTree), Members(std::move(Members)), EndOfFileToken(EndOfFileToken) { +} - CompilationUnitSyntax::CompilationUnitSyntax(const std::shared_ptr SyntaxTree, - const std::vector>& Members, - std::shared_ptr EndOfFileToken) noexcept : - Super(SyntaxTree), Members(Members), EndOfFileToken(EndOfFileToken) +CompilationUnitSyntax::~CompilationUnitSyntax() noexcept +{ + for (auto&& Member : Members) { + delete Member; } +} - CompilationUnitSyntax::CompilationUnitSyntax(const std::shared_ptr SyntaxTree, - std::vector>&& Members, - std::shared_ptr EndOfFileToken) noexcept : - Super(SyntaxTree), Members(std::move(Members)), EndOfFileToken(EndOfFileToken) - { - } +SyntaxKind CompilationUnitSyntax::Kind() const noexcept +{ + return SyntaxKind::CompilationUnit; +} - SyntaxKind CompilationUnitSyntax::Kind() const noexcept - { - return SyntaxKind::CompilationUnit; - } +std::vector CompilationUnitSyntax::Children() const noexcept +{ + auto Children = std::vector(); + Children.reserve(Members.size() + 1); - std::vector> CompilationUnitSyntax::Children() const noexcept - { - auto Children = std::vector>(); - Children.reserve(Members.size() + 1); -#if __cpp_lib_containers_ranges == 202202L - Children.append_range(Members); +#if defined(__cpp_lib_containers_ranges) && __cpp_lib_containers_ranges >= 202202L + Children.append_range(Members); #else - for (auto&& Member : Members) - { - Children.emplace_back(std::forward(Member)); - } -#endif - Children.emplace_back(EndOfFileToken); - return Children; + for (auto&& Member : Members) + { + Children.emplace_back(Member); } +#endif -} // namespace Mamba + Children.emplace_back(EndOfFileToken); + return Children; +} \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/CompilationUnitSyntax.h b/src/Mamba/Code Analysis/Syntax/CompilationUnitSyntax.h index a33ce58..b17904c 100644 --- a/src/Mamba/Code Analysis/Syntax/CompilationUnitSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/CompilationUnitSyntax.h @@ -1,8 +1,8 @@ #pragma once +#include "MemberSyntax.h" #include "SyntaxNode.h" - -#include +#include "SyntaxToken.h" namespace Mamba { @@ -12,19 +12,19 @@ namespace Mamba public: using Super = SyntaxNode; - [[nodiscard]] CompilationUnitSyntax(const std::shared_ptr SyntaxTree, - const std::vector>& Members, - std::shared_ptr EndOfFileToken) noexcept; + [[nodiscard]] CompilationUnitSyntax( + const class SyntaxTree* SyntaxTree, + std::vector&& Members, + const SyntaxToken* EndOfFileToken + ) noexcept; - [[nodiscard]] CompilationUnitSyntax(const std::shared_ptr SyntaxTree, - std::vector>&& Members, - std::shared_ptr EndOfFileToken) noexcept; + ~CompilationUnitSyntax() noexcept override; SyntaxKind Kind() const noexcept override; - std::vector> Children() const noexcept override; + std::vector Children() const noexcept override; - const std::vector> Members; - std::shared_ptr EndOfFileToken; + std::vector Members; + const SyntaxToken* EndOfFileToken; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/Constant.h b/src/Mamba/Code Analysis/Syntax/Constant.h new file mode 100644 index 0000000..a2a0c17 --- /dev/null +++ b/src/Mamba/Code Analysis/Syntax/Constant.h @@ -0,0 +1,51 @@ +#pragma once + +#include "MambaCore.h" +#include +#include + +namespace Mamba +{ + struct ConstantType + { + using String = StringView; + using Char = char; + + using Boolean = bool; + + using Float = float; + using Double = double; + + using Byte = std::byte; + using Short = std::int16_t; + using Int = std::int32_t; + using Long = std::int64_t; + + using UByte = std::uint8_t; + using UShort = std::uint16_t; + using UInt = std::uint32_t; + using ULong = std::uint64_t; + + using Empty = std::monostate; + }; + + struct Constant + { + using ValueType = std::variant; + + [[nodiscard]] constexpr Constant() noexcept = default; + template T> + + [[nodiscard]] constexpr Constant(T Value) noexcept : + Value(Value){}; + + template + [[nodiscard]] constexpr T Get() const noexcept + { + return std::get(Value); + } + + private: + ValueType Value; + }; +} // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/ContinueStatementSyntax.cpp b/src/Mamba/Code Analysis/Syntax/ContinueStatementSyntax.cpp index 75af896..7169025 100644 --- a/src/Mamba/Code Analysis/Syntax/ContinueStatementSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/ContinueStatementSyntax.cpp @@ -2,22 +2,19 @@ #include "SyntaxToken.h" -namespace Mamba -{ - ContinueStatementSyntax::ContinueStatementSyntax(const std::shared_ptr SyntaxTree, - const std::shared_ptr Keyword) noexcept : - Super(SyntaxTree), Keyword(Keyword) - { - } +using namespace Mamba; - SyntaxKind ContinueStatementSyntax::Kind() const noexcept - { - return SyntaxKind::ContinueStatement; - } +ContinueStatementSyntax::ContinueStatementSyntax(const class SyntaxTree* SyntaxTree, const SyntaxToken* Keyword) noexcept : + Super(SyntaxTree), Keyword(Keyword) +{ +} - std::vector> ContinueStatementSyntax::Children() const noexcept - { - return { Keyword }; - } +SyntaxKind ContinueStatementSyntax::Kind() const noexcept +{ + return SyntaxKind::ContinueStatement; +} -} // namespace Mamba \ No newline at end of file +std::vector ContinueStatementSyntax::Children() const noexcept +{ + return { Keyword }; +} \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/ContinueStatementSyntax.h b/src/Mamba/Code Analysis/Syntax/ContinueStatementSyntax.h index 62fdd87..8830fe5 100644 --- a/src/Mamba/Code Analysis/Syntax/ContinueStatementSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/ContinueStatementSyntax.h @@ -1,8 +1,7 @@ #pragma once #include "StatementSyntax.h" - -#include +#include "SyntaxToken.h" namespace Mamba { @@ -11,12 +10,11 @@ namespace Mamba public: using Super = StatementSyntax; - [[nodiscard]] ContinueStatementSyntax(const std::shared_ptr SyntaxTree, - const std::shared_ptr Keyword) noexcept; + [[nodiscard]] ContinueStatementSyntax(const class SyntaxTree* SyntaxTree, const SyntaxToken* Keyword) noexcept; SyntaxKind Kind() const noexcept override; - std::vector> Children() const noexcept override; + std::vector Children() const noexcept override; - const std::shared_ptr Keyword; + const SyntaxToken* Keyword; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/DoWhileStatementSyntax.cpp b/src/Mamba/Code Analysis/Syntax/DoWhileStatementSyntax.cpp index 7263bfd..b865aad 100644 --- a/src/Mamba/Code Analysis/Syntax/DoWhileStatementSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/DoWhileStatementSyntax.cpp @@ -1,28 +1,30 @@ #include "DoWhileStatementSyntax.h" -#include "SyntaxToken.h" +using namespace Mamba; -namespace Mamba +DoWhileStatementSyntax::DoWhileStatementSyntax( + const class SyntaxTree* SyntaxTree, + const SyntaxToken* DoKeyword, + const StatementSyntax* Body, + const SyntaxToken* WhileKeyword, + const ExpressionSyntax* Condition +) noexcept : + Super(SyntaxTree), DoKeyword(DoKeyword), Body(Body), WhileKeyword(WhileKeyword), Condition(Condition) { - DoWhileStatementSyntax::DoWhileStatementSyntax( - const std::shared_ptr SyntaxTree, - const std::shared_ptr DoKeyword, - const std::shared_ptr Body, - const std::shared_ptr WhileKeyword, - const std::shared_ptr Condition - ) noexcept : - Super(SyntaxTree), DoKeyword(DoKeyword), Body(Body), WhileKeyword(WhileKeyword), Condition(Condition) - { - } +} - SyntaxKind DoWhileStatementSyntax::Kind() const noexcept - { - return SyntaxKind::DoWhileStatement; - } +DoWhileStatementSyntax::~DoWhileStatementSyntax() noexcept +{ + delete Body; + delete Condition; +} - std::vector> DoWhileStatementSyntax::Children() const noexcept - { - return { DoKeyword, Body, WhileKeyword, Condition }; - } +SyntaxKind DoWhileStatementSyntax::Kind() const noexcept +{ + return SyntaxKind::DoWhileStatement; +} -} // namespace Mamba \ No newline at end of file +std::vector DoWhileStatementSyntax::Children() const noexcept +{ + return { DoKeyword, Body, WhileKeyword, Condition }; +} \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/DoWhileStatementSyntax.h b/src/Mamba/Code Analysis/Syntax/DoWhileStatementSyntax.h index faefc41..188f162 100644 --- a/src/Mamba/Code Analysis/Syntax/DoWhileStatementSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/DoWhileStatementSyntax.h @@ -3,8 +3,7 @@ #include "ExpressionSyntax.h" #include "StatementSyntax.h" #include "SyntaxKind.h" - -#include +#include "SyntaxToken.h" namespace Mamba { @@ -13,18 +12,22 @@ namespace Mamba public: using Super = StatementSyntax; - [[nodiscard]] DoWhileStatementSyntax(const std::shared_ptr SyntaxTree, - const std::shared_ptr DoKeyword, - const std::shared_ptr Body, - const std::shared_ptr WhileKeyword, - const std::shared_ptr Condition) noexcept; + [[nodiscard]] DoWhileStatementSyntax( + const class SyntaxTree* SyntaxTree, + const SyntaxToken* DoKeyword, + const StatementSyntax* Body, + const SyntaxToken* WhileKeyword, + const ExpressionSyntax* Condition + ) noexcept; + + ~DoWhileStatementSyntax() noexcept override; SyntaxKind Kind() const noexcept override; - std::vector> Children() const noexcept override; + std::vector Children() const noexcept override; - const std::shared_ptr DoKeyword; - const std::shared_ptr Body; - const std::shared_ptr WhileKeyword; - const std::shared_ptr Condition; + const SyntaxToken* DoKeyword; + const StatementSyntax* Body; + const SyntaxToken* WhileKeyword; + const ExpressionSyntax* Condition; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/ElseClauseSyntax.cpp b/src/Mamba/Code Analysis/Syntax/ElseClauseSyntax.cpp index de7eba2..825e9c4 100644 --- a/src/Mamba/Code Analysis/Syntax/ElseClauseSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/ElseClauseSyntax.cpp @@ -1,24 +1,27 @@ #include "ElseClauseSyntax.h" -#include "StatementSyntax.h" -#include "SyntaxToken.h" +using namespace Mamba; -namespace Mamba +ElseClauseSyntax::ElseClauseSyntax( + const class SyntaxTree* SyntaxTree, + const SyntaxToken* ElseKeyword, + const StatementSyntax* ElseStatement +) noexcept : + Super(SyntaxTree), ElseKeyword(ElseKeyword), ElseStatement(ElseStatement) { - ElseClauseSyntax::ElseClauseSyntax(const std::shared_ptr SyntaxTree, - const std::shared_ptr ElseKeyword, - const std::shared_ptr ElseStatement) noexcept : - Super(SyntaxTree), ElseKeyword(ElseKeyword), ElseStatement(ElseStatement) - { - } +} - SyntaxKind ElseClauseSyntax::Kind() const noexcept - { - return SyntaxKind::ElseClause; - } +ElseClauseSyntax::~ElseClauseSyntax() noexcept +{ + delete ElseStatement; +} + +SyntaxKind ElseClauseSyntax::Kind() const noexcept +{ + return SyntaxKind::ElseClause; +} - std::vector> ElseClauseSyntax::Children() const noexcept - { - return { ElseKeyword, ElseStatement }; - } -} // namespace Mamba \ No newline at end of file +std::vector ElseClauseSyntax::Children() const noexcept +{ + return { ElseKeyword, ElseStatement }; +} \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/ElseClauseSyntax.h b/src/Mamba/Code Analysis/Syntax/ElseClauseSyntax.h index 6b2ce08..b57b248 100644 --- a/src/Mamba/Code Analysis/Syntax/ElseClauseSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/ElseClauseSyntax.h @@ -1,10 +1,9 @@ #pragma once +#include "StatementSyntax.h" #include "SyntaxNode.h" #include "SyntaxToken.h" -#include - namespace Mamba { class ElseClauseSyntax : public SyntaxNode @@ -12,14 +11,18 @@ namespace Mamba public: using Super = SyntaxNode; - [[nodiscard]] ElseClauseSyntax(const std::shared_ptr SyntaxTree, - const std::shared_ptr ElseKeyword, - const std::shared_ptr ElseStatement) noexcept; + [[nodiscard]] ElseClauseSyntax( + const class SyntaxTree* SyntaxTree, + const SyntaxToken* ElseKeyword, + const StatementSyntax* ElseStatement + ) noexcept; + + ~ElseClauseSyntax() noexcept override; SyntaxKind Kind() const noexcept override; - std::vector> Children() const noexcept override; + std::vector Children() const noexcept override; - const std::shared_ptr ElseKeyword; - const std::shared_ptr ElseStatement; + const SyntaxToken* ElseKeyword; + const StatementSyntax* ElseStatement; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/ExpressionStatementSyntax.cpp b/src/Mamba/Code Analysis/Syntax/ExpressionStatementSyntax.cpp index 38f0302..a991012 100644 --- a/src/Mamba/Code Analysis/Syntax/ExpressionStatementSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/ExpressionStatementSyntax.cpp @@ -2,22 +2,27 @@ #include "ExpressionSyntax.h" -namespace Mamba +using namespace Mamba; + +ExpressionStatementSyntax::ExpressionStatementSyntax( + const class SyntaxTree* SyntaxTree, + const ExpressionSyntax* Expression +) noexcept : + Super(SyntaxTree), Expression(Expression) { - ExpressionStatementSyntax::ExpressionStatementSyntax( - const std::shared_ptr SyntaxTree, - const std::shared_ptr Expression) noexcept : - Super(SyntaxTree), Expression(Expression) - { - } +} - SyntaxKind ExpressionStatementSyntax::Kind() const noexcept - { - return SyntaxKind::ExpressionStatement; - } +ExpressionStatementSyntax::~ExpressionStatementSyntax() noexcept +{ + delete Expression; +} - std::vector> ExpressionStatementSyntax::Children() const noexcept - { - return { Expression }; - } -} // namespace Mamba \ No newline at end of file +SyntaxKind ExpressionStatementSyntax::Kind() const noexcept +{ + return SyntaxKind::ExpressionStatement; +} + +std::vector ExpressionStatementSyntax::Children() const noexcept +{ + return { Expression }; +} \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/ExpressionStatementSyntax.h b/src/Mamba/Code Analysis/Syntax/ExpressionStatementSyntax.h index ce80445..c3d121f 100644 --- a/src/Mamba/Code Analysis/Syntax/ExpressionStatementSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/ExpressionStatementSyntax.h @@ -1,10 +1,9 @@ #pragma once +#include "ExpressionSyntax.h" #include "StatementSyntax.h" #include "SyntaxKind.h" -#include - namespace Mamba { class ExpressionStatementSyntax : public StatementSyntax @@ -13,12 +12,15 @@ namespace Mamba using Super = StatementSyntax; [[nodiscard]] ExpressionStatementSyntax( - const std::shared_ptr SyntaxTree, - const std::shared_ptr Expression) noexcept; + const class SyntaxTree* SyntaxTree, + const ExpressionSyntax* Expression + ) noexcept; + + ~ExpressionStatementSyntax() noexcept override; SyntaxKind Kind() const noexcept override; - std::vector> Children() const noexcept override; + std::vector Children() const noexcept override; - const std::shared_ptr Expression; + const ExpressionSyntax* Expression; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/ExpressionSyntax.cpp b/src/Mamba/Code Analysis/Syntax/ExpressionSyntax.cpp index fc212c9..d516806 100644 --- a/src/Mamba/Code Analysis/Syntax/ExpressionSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/ExpressionSyntax.cpp @@ -4,7 +4,7 @@ namespace Mamba { - ExpressionSyntax::ExpressionSyntax(const std::shared_ptr SyntaxTree) noexcept : + ExpressionSyntax::ExpressionSyntax(const class SyntaxTree* SyntaxTree) noexcept : Super(SyntaxTree) { } diff --git a/src/Mamba/Code Analysis/Syntax/ExpressionSyntax.h b/src/Mamba/Code Analysis/Syntax/ExpressionSyntax.h index 60f6329..6411c37 100644 --- a/src/Mamba/Code Analysis/Syntax/ExpressionSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/ExpressionSyntax.h @@ -10,6 +10,6 @@ namespace Mamba using Super = SyntaxNode; protected: - [[nodiscard]] ExpressionSyntax(const std::shared_ptr SyntaxTree) noexcept; + [[nodiscard]] ExpressionSyntax(const class SyntaxTree* SyntaxTree) noexcept; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/ForStatementSyntax.cpp b/src/Mamba/Code Analysis/Syntax/ForStatementSyntax.cpp index 6f64827..24a3bba 100644 --- a/src/Mamba/Code Analysis/Syntax/ForStatementSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/ForStatementSyntax.cpp @@ -3,42 +3,47 @@ #include "ExpressionSyntax.h" #include "StatementSyntax.h" -namespace Mamba +using namespace Mamba; + +ForStatementSyntax::ForStatementSyntax( + const class SyntaxTree* SyntaxTree, + const SyntaxToken* Keyword, + const SyntaxToken* OpenParenthesisToken, + const StatementSyntax* InitStatement, + const SyntaxToken* InitStatementColonToken, + const ExpressionSyntax* Condition, + const SyntaxToken* ConditionColonToken, + const ExpressionSyntax* Expression, + const SyntaxToken* CloseParenthesisToken, + const StatementSyntax* Body +) noexcept : + Super(SyntaxTree), + Keyword(Keyword), + OpenParenthesisToken(OpenParenthesisToken), + InitStatement(InitStatement), + InitStatementColonToken(InitStatementColonToken), + Condition(Condition), + ConditionColonToken(ConditionColonToken), + Expression(Expression), + CloseParenthesisToken(CloseParenthesisToken), + Body(Body) { - ForStatementSyntax::ForStatementSyntax( - const std::shared_ptr SyntaxTree, - const std::shared_ptr Keyword, - const std::shared_ptr OpenParenthesisToken, - const std::shared_ptr InitStatement, - const std::shared_ptr InitStatementColonToken, - const std::shared_ptr Condition, - const std::shared_ptr ConditionColonToken, - const std::shared_ptr Expression, - const std::shared_ptr CloseParenthesisToken, - const std::shared_ptr Body - ) noexcept : - Super(SyntaxTree), - Keyword(Keyword), - OpenParenthesisToken(OpenParenthesisToken), - InitStatement(InitStatement), - InitStatementColonToken(InitStatementColonToken), - Condition(Condition), - ConditionColonToken(ConditionColonToken), - Expression(Expression), - CloseParenthesisToken(CloseParenthesisToken), - Body(Body) - { - } +} - SyntaxKind ForStatementSyntax::Kind() const noexcept - { - return SyntaxKind::ForStatement; - } +ForStatementSyntax::~ForStatementSyntax() noexcept +{ + delete InitStatement; + delete Condition; + delete Expression; + delete Body; +} - std::vector> ForStatementSyntax::Children() const noexcept - { - return { Keyword, OpenParenthesisToken, InitStatement, InitStatementColonToken, - Condition, ConditionColonToken, Expression, CloseParenthesisToken, - Body }; - } -} // namespace Mamba \ No newline at end of file +SyntaxKind ForStatementSyntax::Kind() const noexcept +{ + return SyntaxKind::ForStatement; +} + +std::vector ForStatementSyntax::Children() const noexcept +{ + return { Keyword, OpenParenthesisToken, InitStatement, InitStatementColonToken, Condition, ConditionColonToken, Expression, CloseParenthesisToken, Body }; +} \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/ForStatementSyntax.h b/src/Mamba/Code Analysis/Syntax/ForStatementSyntax.h index 4ab8371..2823e78 100644 --- a/src/Mamba/Code Analysis/Syntax/ForStatementSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/ForStatementSyntax.h @@ -1,9 +1,9 @@ #pragma once +#include "ExpressionSyntax.h" #include "StatementSyntax.h" #include "SyntaxToken.h" #include "SyntaxTree.h" -#include namespace Mamba { @@ -14,28 +14,32 @@ namespace Mamba public: using Super = StatementSyntax; - [[nodiscard]] ForStatementSyntax(const std::shared_ptr SyntaxTree, - const std::shared_ptr Keyword, - const std::shared_ptr OpenParenthesisToken, - const std::shared_ptr InitStatement, - const std::shared_ptr InitStatementColonToken, - const std::shared_ptr Condition, - const std::shared_ptr ConditionColonToken, - const std::shared_ptr Expression, - const std::shared_ptr CloseParenthesisToken, - const std::shared_ptr Body) noexcept; + [[nodiscard]] ForStatementSyntax( + const class SyntaxTree* SyntaxTree, + const SyntaxToken* Keyword, + const SyntaxToken* OpenParenthesisToken, + const StatementSyntax* InitStatement, + const SyntaxToken* InitStatementColonToken, + const ExpressionSyntax* Condition, + const SyntaxToken* ConditionColonToken, + const ExpressionSyntax* Expression, + const SyntaxToken* CloseParenthesisToken, + const StatementSyntax* Body + ) noexcept; + + ~ForStatementSyntax() noexcept override; SyntaxKind Kind() const noexcept override; - std::vector> Children() const noexcept override; + std::vector Children() const noexcept override; - const std::shared_ptr Keyword; - const std::shared_ptr OpenParenthesisToken; - const std::shared_ptr InitStatement; - const std::shared_ptr InitStatementColonToken; - const std::shared_ptr Condition; - const std::shared_ptr ConditionColonToken; - const std::shared_ptr Expression; - const std::shared_ptr CloseParenthesisToken; - const std::shared_ptr Body; + const SyntaxToken* Keyword; + const SyntaxToken* OpenParenthesisToken; + const StatementSyntax* InitStatement; + const SyntaxToken* InitStatementColonToken; + const ExpressionSyntax* Condition; + const SyntaxToken* ConditionColonToken; + const ExpressionSyntax* Expression; + const SyntaxToken* CloseParenthesisToken; + const StatementSyntax* Body; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/FunctionDeclarationSyntax.cpp b/src/Mamba/Code Analysis/Syntax/FunctionDeclarationSyntax.cpp index 52530c0..77e8b25 100644 --- a/src/Mamba/Code Analysis/Syntax/FunctionDeclarationSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/FunctionDeclarationSyntax.cpp @@ -1,57 +1,61 @@ #include "FunctionDeclarationSyntax.h" -#include "BlockStatementSyntax.h" -#include "ParameterSyntax.h" -#include "SyntaxToken.h" -#include "TypeClauseSyntax.h" +using namespace Mamba; -namespace Mamba +FunctionDeclarationSyntax::FunctionDeclarationSyntax( + const class SyntaxTree* SyntaxTree, + const SyntaxToken* FunctionKeyword, + const SyntaxToken* Identifier, + const SyntaxToken* OpenParenthesisToken, + SeperatedSyntaxList&& Parameters, + const SyntaxToken* CloseParenthesisToken, + NullablePointer Type, + const BlockStatementSyntax* Body +) noexcept : + Super(SyntaxTree), + FunctionKeyword(FunctionKeyword), + Identifier(Identifier), + OpenParenthesisToken(OpenParenthesisToken), + Parameters(std::move(Parameters)), + CloseParenthesisToken(CloseParenthesisToken), + Type(Type), + Body(Body) { - FunctionDeclarationSyntax::FunctionDeclarationSyntax( - const std::shared_ptr SyntaxTree, - const std::shared_ptr FunctionKeyword, - const std::shared_ptr Identifier, - const std::shared_ptr OpenParenthesisToken, - const std::shared_ptr>> Parameters, - const std::shared_ptr CloseParenthesisToken, - const NullableSharedPtr Type, - const std::shared_ptr Body - ) noexcept : - Super(SyntaxTree), - FunctionKeyword(FunctionKeyword), - Identifier(Identifier), - OpenParenthesisToken(OpenParenthesisToken), - Parameters(Parameters), - CloseParenthesisToken(CloseParenthesisToken), - Type(Type), - Body(Body) - { - } +} - SyntaxKind FunctionDeclarationSyntax::Kind() const noexcept +FunctionDeclarationSyntax::~FunctionDeclarationSyntax() noexcept +{ + for (auto&& Parameter : Parameters.Nodes()) { - return SyntaxKind::FunctionDeclaration; + delete Parameter; } + delete Type; + delete Body; +} - std::vector> FunctionDeclarationSyntax::Children() const noexcept - { - auto Children = std::vector>(); - Children.reserve(6 + Parameters->Count() * 2); +SyntaxKind FunctionDeclarationSyntax::Kind() const noexcept +{ + return SyntaxKind::FunctionDeclaration; +} - Children.emplace_back(FunctionKeyword); - Children.emplace_back(Identifier); - Children.emplace_back(OpenParenthesisToken); - for (auto Parameter : Parameters->Nodes()) - { - Children.emplace_back(Parameter); - } - Children.emplace_back(CloseParenthesisToken); - if (Type) - { - Children.emplace_back(Type); - } - Children.emplace_back(Body); +std::vector FunctionDeclarationSyntax::Children() const noexcept +{ + auto Children = std::vector(); + Children.reserve(6 + Parameters.Count() * 2); - return Children; + Children.emplace_back(FunctionKeyword); + Children.emplace_back(Identifier); + Children.emplace_back(OpenParenthesisToken); + for (auto Parameter : Parameters.Nodes()) + { + Children.emplace_back(Parameter); } -} // namespace Mamba \ No newline at end of file + Children.emplace_back(CloseParenthesisToken); + if (Type) + { + Children.emplace_back(Type); + } + Children.emplace_back(Body); + + return Children; +} \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/FunctionDeclarationSyntax.h b/src/Mamba/Code Analysis/Syntax/FunctionDeclarationSyntax.h index ec0465e..80712f4 100644 --- a/src/Mamba/Code Analysis/Syntax/FunctionDeclarationSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/FunctionDeclarationSyntax.h @@ -1,10 +1,12 @@ #pragma once +#include "BlockStatementSyntax.h" #include "MemberSyntax.h" +#include "ParameterSyntax.h" #include "SeperatedSyntaxList.h" #include "SyntaxKind.h" - -#include +#include "SyntaxToken.h" +#include "TypeClauseSyntax.h" namespace Mamba { @@ -14,25 +16,27 @@ namespace Mamba using Super = MemberSyntax; [[nodiscard]] FunctionDeclarationSyntax( - const std::shared_ptr SyntaxTree, - const std::shared_ptr FunctionKeyword, - const std::shared_ptr Identifier, - const std::shared_ptr OpenParenthesisToken, - const std::shared_ptr>> Parameters, - const std::shared_ptr CloseParenthesisToken, - const NullableSharedPtr Type, - const std::shared_ptr Body + const class SyntaxTree* SyntaxTree, + const SyntaxToken* FunctionKeyword, + const SyntaxToken* Identifier, + const SyntaxToken* OpenParenthesisToken, + SeperatedSyntaxList&& Parameters, + const SyntaxToken* CloseParenthesisToken, + NullablePointer Type, + const BlockStatementSyntax* Body ) noexcept; + ~FunctionDeclarationSyntax() noexcept override; + SyntaxKind Kind() const noexcept override; - std::vector> Children() const noexcept override; + std::vector Children() const noexcept override; - const std::shared_ptr FunctionKeyword; - const std::shared_ptr Identifier; - const std::shared_ptr OpenParenthesisToken; - const std::shared_ptr>> Parameters; - const std::shared_ptr CloseParenthesisToken; - const NullableSharedPtr Type; - const std::shared_ptr Body; + const SyntaxToken* FunctionKeyword; + const SyntaxToken* Identifier; + const SyntaxToken* OpenParenthesisToken; + SeperatedSyntaxList Parameters; + const SyntaxToken* CloseParenthesisToken; + NullablePointer Type; + const BlockStatementSyntax* Body; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/GlobalStatementSyntax.cpp b/src/Mamba/Code Analysis/Syntax/GlobalStatementSyntax.cpp index e9f8f47..ef37c5c 100644 --- a/src/Mamba/Code Analysis/Syntax/GlobalStatementSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/GlobalStatementSyntax.cpp @@ -2,22 +2,27 @@ #include "StatementSyntax.h" -namespace Mamba +using namespace Mamba; + +GlobalStatementSyntax::GlobalStatementSyntax( + const class SyntaxTree* SyntaxTree, + const StatementSyntax* Statement +) noexcept : + Super(SyntaxTree), Statement(Statement) { - GlobalStatementSyntax::GlobalStatementSyntax(const std::shared_ptr SyntaxTree, - const std::shared_ptr Statement) noexcept - : - Super(SyntaxTree), Statement(Statement) - { - } +} - SyntaxKind GlobalStatementSyntax::Kind() const noexcept - { - return SyntaxKind::GlobalStatement; - } +GlobalStatementSyntax::~GlobalStatementSyntax() noexcept +{ + delete Statement; +} - std::vector> GlobalStatementSyntax::Children() const noexcept - { - return { Statement }; - } -} // namespace Mamba \ No newline at end of file +SyntaxKind GlobalStatementSyntax::Kind() const noexcept +{ + return SyntaxKind::GlobalStatement; +} + +std::vector GlobalStatementSyntax::Children() const noexcept +{ + return { Statement }; +} \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/GlobalStatementSyntax.h b/src/Mamba/Code Analysis/Syntax/GlobalStatementSyntax.h index ef21eac..b7ef2a6 100644 --- a/src/Mamba/Code Analysis/Syntax/GlobalStatementSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/GlobalStatementSyntax.h @@ -1,8 +1,8 @@ #pragma once #include "MemberSyntax.h" +#include "StatementSyntax.h" #include "SyntaxTree.h" -#include namespace Mamba { @@ -11,12 +11,16 @@ namespace Mamba public: using Super = MemberSyntax; - [[nodiscard]] GlobalStatementSyntax(const std::shared_ptr SyntaxTree, - const std::shared_ptr Statement) noexcept; + [[nodiscard]] GlobalStatementSyntax( + const class SyntaxTree* SyntaxTree, + const StatementSyntax* Statement + ) noexcept; + + ~GlobalStatementSyntax() noexcept override; SyntaxKind Kind() const noexcept override; - std::vector> Children() const noexcept override; + std::vector Children() const noexcept override; - const std::shared_ptr Statement; + const StatementSyntax* Statement; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/IfStatementSyntax.cpp b/src/Mamba/Code Analysis/Syntax/IfStatementSyntax.cpp index c4f5d99..909bd86 100644 --- a/src/Mamba/Code Analysis/Syntax/IfStatementSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/IfStatementSyntax.cpp @@ -1,69 +1,70 @@ #include "IfStatementSyntax.h" -#include "ElseClauseSyntax.h" -#include "ExpressionSyntax.h" +using namespace Mamba; -namespace Mamba +IfStatementSyntax::IfStatementSyntax( + const class SyntaxTree* SyntaxTree, + const SyntaxToken* IfKeyword, + const ExpressionSyntax* Condition, + const StatementSyntax* ThenStatement, + NullablePointer ElseClause +) noexcept : + Super(SyntaxTree), + IfKeyword(IfKeyword), + Condition(Condition), + ThenStatement(ThenStatement), + ElseClause(ElseClause) { - IfStatementSyntax::IfStatementSyntax(const std::shared_ptr SyntaxTree, - const std::shared_ptr IfKeyword, - const NullableSharedPtr OpenParenthesisToken, - const std::shared_ptr Condition, - const NullableSharedPtr CloseParenthesisToken, - const std::shared_ptr ThenStatement, - const NullableSharedPtr ElseClause) noexcept : - Super(SyntaxTree), - IfKeyword(IfKeyword), - OpenParenthesisToken(OpenParenthesisToken), - Condition(Condition), - CloseParenthesisToken(CloseParenthesisToken), - ThenStatement(ThenStatement), - ElseClause(ElseClause) +} + +IfStatementSyntax::~IfStatementSyntax() noexcept +{ + delete Condition; + delete ThenStatement; + delete ElseClause; +} + +SyntaxKind IfStatementSyntax::Kind() const noexcept +{ + return SyntaxKind::IfStatement; +} + +std::vector IfStatementSyntax::Children() const noexcept +{ + // Calculates the number of children, in for statement, parentheses and else clause are optional, + // so there are at least 3 children + auto ChildrenCount = 3; + if (OpenParenthesisToken) { + ++ChildrenCount; } - - SyntaxKind IfStatementSyntax::Kind() const noexcept + if (CloseParenthesisToken) { - return SyntaxKind::IfStatement; + ++ChildrenCount; } - - std::vector> IfStatementSyntax::Children() const noexcept + if (ElseClause) { - // Calculates the number of children, in for statement, parentheses and else clause are optional, - // so there are at least 3 children - auto ChildrenCount = 3; - if (OpenParenthesisToken) - { - ++ChildrenCount; - } - if (CloseParenthesisToken) - { - ++ChildrenCount; - } - if (ElseClause) - { - ++ChildrenCount; - } - - auto Children = std::vector>(); - Children.reserve(ChildrenCount); + ++ChildrenCount; + } - Children.emplace_back(IfKeyword); - if (OpenParenthesisToken) - { - Children.emplace_back(OpenParenthesisToken); - } - Children.emplace_back(Condition); - if (CloseParenthesisToken) - { - Children.emplace_back(CloseParenthesisToken); - } - Children.emplace_back(ThenStatement); - if (ElseClause) - { - Children.emplace_back(ElseClause); - } + auto Children = std::vector(); + Children.reserve(ChildrenCount); - return Children; + Children.emplace_back(IfKeyword); + if (OpenParenthesisToken) + { + Children.emplace_back(OpenParenthesisToken); + } + Children.emplace_back(Condition); + if (CloseParenthesisToken) + { + Children.emplace_back(CloseParenthesisToken); + } + Children.emplace_back(ThenStatement); + if (ElseClause) + { + Children.emplace_back(ElseClause); } -} // namespace Mamba \ No newline at end of file + + return Children; +} \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/IfStatementSyntax.h b/src/Mamba/Code Analysis/Syntax/IfStatementSyntax.h index bef92d9..4ca7219 100644 --- a/src/Mamba/Code Analysis/Syntax/IfStatementSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/IfStatementSyntax.h @@ -1,8 +1,9 @@ #pragma once +#include "ElseClauseSyntax.h" +#include "ExpressionSyntax.h" #include "StatementSyntax.h" - -#include +#include "SyntaxToken.h" namespace Mamba { @@ -11,22 +12,22 @@ namespace Mamba public: using Super = StatementSyntax; - [[nodiscard]] IfStatementSyntax(const std::shared_ptr SyntaxTree, - const std::shared_ptr IfKeyword, - const NullableSharedPtr OpenParenthesisToken, - const std::shared_ptr Condition, - const NullableSharedPtr CloseParenthesisToken, - const std::shared_ptr ThenStatement, - const NullableSharedPtr ElseClause) noexcept; + [[nodiscard]] IfStatementSyntax( + const class SyntaxTree* SyntaxTree, + const SyntaxToken* IfKeyword, + const ExpressionSyntax* Condition, + const StatementSyntax* ThenStatement, + NullablePointer ElseClause + ) noexcept; + + ~IfStatementSyntax() noexcept override; SyntaxKind Kind() const noexcept override; - std::vector> Children() const noexcept override; + std::vector Children() const noexcept override; - const std::shared_ptr IfKeyword; - const NullableSharedPtr OpenParenthesisToken; - const std::shared_ptr Condition; - const NullableSharedPtr CloseParenthesisToken; - const std::shared_ptr ThenStatement; - const NullableSharedPtr ElseClause; + const SyntaxToken* IfKeyword; + const ExpressionSyntax* Condition; + const StatementSyntax* ThenStatement; + NullablePointer ElseClause; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/Lexer.cpp b/src/Mamba/Code Analysis/Syntax/Lexer.cpp index c19616b..e4cec9e 100644 --- a/src/Mamba/Code Analysis/Syntax/Lexer.cpp +++ b/src/Mamba/Code Analysis/Syntax/Lexer.cpp @@ -16,7 +16,7 @@ namespace Mamba { - Lexer::Lexer(const std::shared_ptr SyntaxTree) : + Lexer::Lexer(const class SyntaxTree* SyntaxTree) : SyntaxTree(SyntaxTree), Text(SyntaxTree->Text), Position(), Start(), Kind(SyntaxKind::BadToken) { } diff --git a/src/Mamba/Code Analysis/Syntax/Lexer.h b/src/Mamba/Code Analysis/Syntax/Lexer.h index b026e46..a45fb7e 100644 --- a/src/Mamba/Code Analysis/Syntax/Lexer.h +++ b/src/Mamba/Code Analysis/Syntax/Lexer.h @@ -12,7 +12,7 @@ namespace Mamba { class Lexer { - const std::shared_ptr SyntaxTree; + const class SyntaxTree* SyntaxTree; const std::shared_ptr Text; std::size_t Position; @@ -24,7 +24,7 @@ namespace Mamba public: DiagnosticBag Diagnostics; - [[nodiscard]] Lexer(const std::shared_ptr SyntaxTree); + [[nodiscard]] Lexer(const class SyntaxTree* SyntaxTree); [[nodiscard]] std::shared_ptr Lex() noexcept; diff --git a/src/Mamba/Code Analysis/Syntax/Literal.h b/src/Mamba/Code Analysis/Syntax/Literal.h index a9b9ece..db98558 100644 --- a/src/Mamba/Code Analysis/Syntax/Literal.h +++ b/src/Mamba/Code Analysis/Syntax/Literal.h @@ -1,122 +1,41 @@ #pragma once #include "MambaCore.h" - -#include -#include -#include +#include namespace Mamba { - union LiteralValue + struct LiteralType { - StringView StringValue; - Char CharacterValue; - - std::uint8_t UnsignedByteValue; - std::uint16_t UnsignedShortValue; - std::uint32_t UnsignedIntValue; - std::uint64_t UnsignedLongValue; - - std::int8_t SignedByteValue; - std::int16_t SignedShortValue; - std::int32_t SignedIntValue; - std::int64_t SignedLongValue; - - double DoubleValue; - float FloatValue; - - bool BooleanValue; - - LiteralValue() noexcept; - LiteralValue(const StringView String) noexcept; - LiteralValue(const std::int8_t Integer) noexcept; - LiteralValue(const std::int16_t Integer) noexcept; - LiteralValue(const std::int32_t Integer) noexcept; - LiteralValue(const std::int64_t Integer) noexcept; - LiteralValue(const std::uint8_t Integer) noexcept; - LiteralValue(const std::uint16_t Integer) noexcept; - LiteralValue(const std::uint32_t Integer) noexcept; - LiteralValue(const std::uint64_t Integer) noexcept; - LiteralValue(const float Value) noexcept; - LiteralValue(const double Value) noexcept; - LiteralValue(const bool Value) noexcept; - - private: - // In general, for some types of literal such as strings, this type only stores a view of the value, and the - // value is generally stored in the objects that holds this object. To ensure the validity of the view, this - // object can only be copied when the object that holds this object is copied. - // - // For example, Literal has a StringValue member variable, then the StringValue of this type is its view. This - // object can be only copied if the Literal object is copied. - LiteralValue(const LiteralValue&) = default; - LiteralValue(LiteralValue&&) = default; - - friend struct Literal; - }; - - enum class LiteralType - { - String, - Character, - - UnsignedByte, - UnsignedShort, - UnsignedInt, - UnsignedLong, - - SignedByte, - SignedShort, - SignedInt, - SignedLong, - - Double, - Float, - - Boolean, - - Empty + using String = StringView; + using FloatingPoint = double; + using Number = std::uint64_t; + using Boolean = bool; + using Empty = std::monostate; }; struct Literal { - LiteralValue Value; - LiteralType Type; + using ValueType = std::variant; - ::std::optional> StringValue; + [[nodiscard]] constexpr Literal() noexcept = default; - [[nodiscard]] Literal() noexcept; - [[nodiscard]] Literal(const std::shared_ptr String) noexcept; - [[nodiscard]] Literal(const std::int8_t Integer) noexcept; - [[nodiscard]] Literal(const std::int32_t Integer) noexcept; - [[nodiscard]] Literal(const std::int64_t Integer) noexcept; - [[nodiscard]] Literal(const std::uint8_t Integer) noexcept; - [[nodiscard]] Literal(const std::uint16_t Integer) noexcept; - [[nodiscard]] Literal(const std::uint32_t Integer) noexcept; - [[nodiscard]] Literal(const std::uint64_t Integer) noexcept; - [[nodiscard]] Literal(const Char Character) noexcept; - [[nodiscard]] Literal(const float Value) noexcept; - [[nodiscard]] Literal(const double Value) noexcept; - [[nodiscard]] Literal(const bool Value) noexcept; + template + requires std::constructible_from + [[nodiscard]] constexpr Literal(T Value) noexcept : + Value(Value) + { + } - static NullableSharedPtr Negative(const Literal& Literal) noexcept; - static NullableSharedPtr LogicalNegative(const Literal& Literal) noexcept; - static NullableSharedPtr OnesComplement(const Literal& Literal) noexcept; + template + [[nodiscard]] constexpr T Get() const noexcept + { + return std::get(Value); + } - NullableSharedPtr operator+(const Literal& Other) const noexcept; - NullableSharedPtr operator-(const Literal& Other) const noexcept; - NullableSharedPtr operator*(const Literal& Other) const noexcept; - NullableSharedPtr operator/(const Literal& Other) const noexcept; - NullableSharedPtr operator&(const Literal& Other) const noexcept; - NullableSharedPtr operator|(const Literal& Other) const noexcept; - NullableSharedPtr operator^(const Literal& Other) const noexcept; - NullableSharedPtr operator&&(const Literal& Other) const noexcept; - NullableSharedPtr operator||(const Literal& Other) const noexcept; - NullableSharedPtr operator==(const Literal& Other) const noexcept; - NullableSharedPtr operator!=(const Literal& Other) const noexcept; - NullableSharedPtr operator<(const Literal& Other) const noexcept; - NullableSharedPtr operator<=(const Literal& Other) const noexcept; - NullableSharedPtr operator>(const Literal& Other) const noexcept; - NullableSharedPtr operator>=(const Literal& Other) const noexcept; + private: + ValueType Value; }; + + static_assert(std::constructible_from); } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/LiteralExpressionSyntax.cpp b/src/Mamba/Code Analysis/Syntax/LiteralExpressionSyntax.cpp index 10cf809..1093a3d 100644 --- a/src/Mamba/Code Analysis/Syntax/LiteralExpressionSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/LiteralExpressionSyntax.cpp @@ -1,35 +1,30 @@ #include "LiteralExpressionSyntax.h" -#include "Literal.h" -#include "SyntaxToken.h" -#include "SyntaxTree.h" +using namespace Mamba; -namespace Mamba +LiteralExpressionSyntax::LiteralExpressionSyntax( + const SyntaxTree* SyntaxTree, + const SyntaxToken* LiteralToken +) noexcept : + Super(SyntaxTree), LiteralToken(LiteralToken), Value(LiteralToken->Value()) { - LiteralExpressionSyntax::LiteralExpressionSyntax( - const std::shared_ptr SyntaxTree, - const std::shared_ptr LiteralToken - ) noexcept : - Super(SyntaxTree), LiteralToken(LiteralToken), Value(LiteralToken->Value) - { - } +} - LiteralExpressionSyntax::LiteralExpressionSyntax( - const std::shared_ptr SyntaxTree, - const std::shared_ptr LiteralToken, - const std::shared_ptr Value - ) noexcept : - Super(SyntaxTree), LiteralToken(LiteralToken), Value(Value) - { - } +LiteralExpressionSyntax::LiteralExpressionSyntax( + const class SyntaxTree* SyntaxTree, + const SyntaxToken* LiteralToken, + Literal Value +) noexcept : + Super(SyntaxTree), LiteralToken(LiteralToken), Value(Value) +{ +} - SyntaxKind LiteralExpressionSyntax::Kind() const noexcept - { - return SyntaxKind::LiteralExpression; - } +SyntaxKind LiteralExpressionSyntax::Kind() const noexcept +{ + return SyntaxKind::LiteralExpression; +} - std::vector> LiteralExpressionSyntax::Children() const noexcept - { - return { LiteralToken }; - } -} // namespace Mamba \ No newline at end of file +std::vector LiteralExpressionSyntax::Children() const noexcept +{ + return { LiteralToken }; +} \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/LiteralExpressionSyntax.h b/src/Mamba/Code Analysis/Syntax/LiteralExpressionSyntax.h index 5c75653..08ade75 100644 --- a/src/Mamba/Code Analysis/Syntax/LiteralExpressionSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/LiteralExpressionSyntax.h @@ -1,35 +1,30 @@ #pragma once #include "ExpressionSyntax.h" - -#include +#include "SyntaxToken.h" namespace Mamba { - // A expression that represents a literal value, empty values are disallowed class LiteralExpressionSyntax : public ExpressionSyntax { public: using Super = ExpressionSyntax; [[nodiscard]] LiteralExpressionSyntax( - const std::shared_ptr SyntaxTree, - const std::shared_ptr LiteralToken + const class SyntaxTree* SyntaxTree, + const SyntaxToken* LiteralToken ) noexcept; [[nodiscard]] LiteralExpressionSyntax( - const std::shared_ptr SyntaxTree, - const std::shared_ptr LiteralToken, - // use class in this elaborated-type-specifier is valid, but may cause linker error under Microsoft ABI - // https://eel.is/c++draft/dcl.dcl#dcl.type.elab-7 - // https://zh.cppreference.com/w/cpp/language/elaborated_type_specifier - const std::shared_ptr Value + const class SyntaxTree* SyntaxTree, + const SyntaxToken* LiteralToken, + const Literal Value ) noexcept; SyntaxKind Kind() const noexcept override; - std::vector> Children() const noexcept override; + std::vector Children() const noexcept override; - const std::shared_ptr LiteralToken; - const std::shared_ptr Value; + const SyntaxToken* LiteralToken; + Literal Value; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/MemberSyntax.cpp b/src/Mamba/Code Analysis/Syntax/MemberSyntax.cpp index caa0085..ad25249 100644 --- a/src/Mamba/Code Analysis/Syntax/MemberSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/MemberSyntax.cpp @@ -2,5 +2,6 @@ namespace Mamba { - MemberSyntax::MemberSyntax(const std::shared_ptr SyntaxTree) noexcept : Super(SyntaxTree) {} + MemberSyntax::MemberSyntax(const class SyntaxTree* SyntaxTree) noexcept : + Super(SyntaxTree) {} } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/MemberSyntax.h b/src/Mamba/Code Analysis/Syntax/MemberSyntax.h index b452034..ef52136 100644 --- a/src/Mamba/Code Analysis/Syntax/MemberSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/MemberSyntax.h @@ -2,8 +2,6 @@ #include "SyntaxNode.h" -#include - namespace Mamba { class MemberSyntax : public SyntaxNode @@ -12,6 +10,6 @@ namespace Mamba using Super = SyntaxNode; protected: - MemberSyntax(const std::shared_ptr SyntaxTree) noexcept; + MemberSyntax(const class SyntaxTree* SyntaxTree) noexcept; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/NameExpressionSyntax.cpp b/src/Mamba/Code Analysis/Syntax/NameExpressionSyntax.cpp index 1b800c8..1a2bc48 100644 --- a/src/Mamba/Code Analysis/Syntax/NameExpressionSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/NameExpressionSyntax.cpp @@ -1,22 +1,21 @@ #include "NameExpressionSyntax.h" -namespace Mamba +using namespace Mamba; + +NameExpressionSyntax::NameExpressionSyntax( + const class SyntaxTree* SyntaxTree, + const SyntaxToken* IdentifierToken +) noexcept : + Super(SyntaxTree), IdentifierToken(IdentifierToken) { - NameExpressionSyntax::NameExpressionSyntax( - const std::shared_ptr SyntaxTree, - const std::shared_ptr IdentifierToken - ) noexcept : - Super(SyntaxTree), IdentifierToken(IdentifierToken) - { - } +} - SyntaxKind NameExpressionSyntax::Kind() const noexcept - { - return SyntaxKind::NameExpression; - } +SyntaxKind NameExpressionSyntax::Kind() const noexcept +{ + return SyntaxKind::NameExpression; +} - std::vector> NameExpressionSyntax::Children() const noexcept - { - return { IdentifierToken }; - } -} // namespace Mamba \ No newline at end of file +std::vector NameExpressionSyntax::Children() const noexcept +{ + return { IdentifierToken }; +} \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/NameExpressionSyntax.h b/src/Mamba/Code Analysis/Syntax/NameExpressionSyntax.h index c4cc39f..cc5b1cb 100644 --- a/src/Mamba/Code Analysis/Syntax/NameExpressionSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/NameExpressionSyntax.h @@ -3,7 +3,6 @@ #include "ExpressionSyntax.h" #include "SyntaxToken.h" #include "SyntaxTree.h" -#include namespace Mamba { @@ -13,13 +12,13 @@ namespace Mamba using Super = ExpressionSyntax; [[nodiscard]] NameExpressionSyntax( - const std::shared_ptr SyntaxTree, - const std::shared_ptr IdentifierToken + const class SyntaxTree* SyntaxTree, + const SyntaxToken* IdentifierToken ) noexcept; SyntaxKind Kind() const noexcept override; - std::vector> Children() const noexcept override; + std::vector Children() const noexcept override; - const std::shared_ptr IdentifierToken; + const SyntaxToken* IdentifierToken; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/ParameterSyntax.cpp b/src/Mamba/Code Analysis/Syntax/ParameterSyntax.cpp index bbcef70..d39b095 100644 --- a/src/Mamba/Code Analysis/Syntax/ParameterSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/ParameterSyntax.cpp @@ -2,24 +2,28 @@ #include "TypeClauseSyntax.h" -namespace Mamba +using namespace Mamba; + +ParameterSyntax::ParameterSyntax( + const class SyntaxTree* SyntaxTree, + const SyntaxToken* Identifier, + const TypeClauseSyntax* Type +) noexcept : + Super(SyntaxTree), Identifier(Identifier), Type(Type) { - ParameterSyntax::ParameterSyntax( - const std::shared_ptr SyntaxTree, - const std::shared_ptr Identifier, - const std::shared_ptr Type - ) noexcept : - Super(SyntaxTree), Identifier(Identifier), Type(Type) - { - } +} - SyntaxKind ParameterSyntax::Kind() const noexcept - { - return SyntaxKind::Parameter; - } +ParameterSyntax::~ParameterSyntax() noexcept +{ + delete Type; +} - std::vector> ParameterSyntax::Children() const noexcept - { - return { Identifier, Type }; - } -} // namespace Mamba \ No newline at end of file +SyntaxKind ParameterSyntax::Kind() const noexcept +{ + return SyntaxKind::Parameter; +} + +std::vector ParameterSyntax::Children() const noexcept +{ + return { Identifier, Type }; +} \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/ParameterSyntax.h b/src/Mamba/Code Analysis/Syntax/ParameterSyntax.h index 81c15c1..5e0a20d 100644 --- a/src/Mamba/Code Analysis/Syntax/ParameterSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/ParameterSyntax.h @@ -3,7 +3,7 @@ #include "SyntaxNode.h" #include "SyntaxToken.h" #include "SyntaxTree.h" -#include +#include "TypeClauseSyntax.h" namespace Mamba { @@ -13,15 +13,17 @@ namespace Mamba using Super = SyntaxNode; [[nodiscard]] ParameterSyntax( - const std::shared_ptr SyntaxTree, - const std::shared_ptr Identifier, - const std::shared_ptr Type + const class SyntaxTree* SyntaxTree, + const SyntaxToken* Identifier, + const TypeClauseSyntax* Type ) noexcept; + ~ParameterSyntax() noexcept override; + SyntaxKind Kind() const noexcept override; - std::vector> Children() const noexcept override; + std::vector Children() const noexcept override; - const std::shared_ptr Identifier; - const std::shared_ptr Type; + const SyntaxToken* Identifier; + const class TypeClauseSyntax* Type; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/ParenthesizedExpressionSyntax.cpp b/src/Mamba/Code Analysis/Syntax/ParenthesizedExpressionSyntax.cpp index 73bbfe5..347669b 100644 --- a/src/Mamba/Code Analysis/Syntax/ParenthesizedExpressionSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/ParenthesizedExpressionSyntax.cpp @@ -1,27 +1,31 @@ #include "ParenthesizedExpressionSyntax.h" -namespace Mamba +using namespace Mamba; + +ParenthesizedExpressionSyntax::ParenthesizedExpressionSyntax( + const class SyntaxTree* SyntaxTree, + const SyntaxToken* OpenParenthesisToken, + const ExpressionSyntax* Expression, + const SyntaxToken* CloseParenthesisToken +) noexcept : + Super(SyntaxTree), + OpenParenthesisToken(OpenParenthesisToken), + Expression(Expression), + CloseParenthesisToken(CloseParenthesisToken) { - ParenthesizedExpressionSyntax::ParenthesizedExpressionSyntax( - const std::shared_ptr SyntaxTree, - const std::shared_ptr OpenParenthesisToken, - const std::shared_ptr Expression, - const std::shared_ptr CloseParenthesisToken - ) noexcept : - Super(SyntaxTree), - OpenParenthesisToken(OpenParenthesisToken), - Expression(Expression), - CloseParenthesisToken(CloseParenthesisToken) - { - } +} - SyntaxKind ParenthesizedExpressionSyntax::Kind() const noexcept - { - return SyntaxKind::ParenthesizedExpression; - } +ParenthesizedExpressionSyntax::~ParenthesizedExpressionSyntax() noexcept +{ + delete Expression; +} - std::vector> ParenthesizedExpressionSyntax::Children() const noexcept - { - return { OpenParenthesisToken, Expression, CloseParenthesisToken }; - } -} // namespace Mamba \ No newline at end of file +SyntaxKind ParenthesizedExpressionSyntax::Kind() const noexcept +{ + return SyntaxKind::ParenthesizedExpression; +} + +std::vector ParenthesizedExpressionSyntax::Children() const noexcept +{ + return { OpenParenthesisToken, Expression, CloseParenthesisToken }; +} \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/ParenthesizedExpressionSyntax.h b/src/Mamba/Code Analysis/Syntax/ParenthesizedExpressionSyntax.h index 1b75e2a..3e5f2eb 100644 --- a/src/Mamba/Code Analysis/Syntax/ParenthesizedExpressionSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/ParenthesizedExpressionSyntax.h @@ -3,7 +3,6 @@ #include "ExpressionSyntax.h" #include "SyntaxToken.h" #include "SyntaxTree.h" -#include namespace Mamba { @@ -13,17 +12,19 @@ namespace Mamba using Super = ExpressionSyntax; [[nodiscard]] ParenthesizedExpressionSyntax( - const std::shared_ptr SyntaxTree, - const std::shared_ptr OpenParenthesisToken, - const std::shared_ptr Expression, - const std::shared_ptr CloseParenthesisToken + const class SyntaxTree* SyntaxTree, + const SyntaxToken* OpenParenthesisToken, + const ExpressionSyntax* Expression, + const SyntaxToken* CloseParenthesisToken ) noexcept; + ~ParenthesizedExpressionSyntax() noexcept override; + SyntaxKind Kind() const noexcept override; - std::vector> Children() const noexcept override; + std::vector Children() const noexcept override; - const std::shared_ptr OpenParenthesisToken; - const std::shared_ptr Expression; - const std::shared_ptr CloseParenthesisToken; + const SyntaxToken* OpenParenthesisToken; + const ExpressionSyntax* Expression; + const SyntaxToken* CloseParenthesisToken; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/Parser.cpp b/src/Mamba/Code Analysis/Syntax/Parser.cpp index 1a51e90..17a9ae5 100644 --- a/src/Mamba/Code Analysis/Syntax/Parser.cpp +++ b/src/Mamba/Code Analysis/Syntax/Parser.cpp @@ -1,591 +1,505 @@ #include "Parser.h" -#include - -#include "AssignmentExpressionSyntax.h" -#include "BinaryExpressionSyntax.h" -#include "BlockStatementSyntax.h" -#include "BreakStatementSyntax.h" -#include "CallExpressionSyntax.h" -#include "CompilationUnitSyntax.h" -#include "ContinueStatementSyntax.h" -#include "DoWhileStatementSyntax.h" -#include "ElseClauseSyntax.h" -#include "ExpressionStatementSyntax.h" -#include "ExpressionSyntax.h" -#include "fast_io.h" -#include "ForStatementSyntax.h" -#include "FunctionDeclarationSyntax.h" -#include "GlobalStatementSyntax.h" -#include "IfStatementSyntax.h" -#include "Lexer.h" -#include "Literal.h" -#include "LiteralExpressionSyntax.h" -#include "MambaCore.h" -#include "NameExpressionSyntax.h" -#include "ParameterSyntax.h" -#include "ParenthesizedExpressionSyntax.h" -#include "ReturnStatementSyntax.h" -#include "StatementSyntax.h" #include "SyntaxFacts.h" -#include "SyntaxKind.h" -#include "SyntaxNode.h" -#include "SyntaxToken.h" -#include "SyntaxTree.h" -#include "TypeClauseSyntax.h" #include "UnaryExpressionSyntax.h" -#include "VariableDeclarationSyntax.h" -#include "WhileStatementSyntax.h" -namespace Mamba +using namespace Mamba; + +Parser::Parser(const class SyntaxTree* SyntaxTree, std::span Tokens) noexcept : + SyntaxTree(SyntaxTree), Tokens(Tokens), Position(0) +{ +} + +const SyntaxToken* Parser::Peek(std::size_t Offset) noexcept { - Parser::Parser(const std::shared_ptr SyntaxTree) noexcept : - SyntaxTree(SyntaxTree), Text(SyntaxTree->Text), Position() + auto Index = Position + Offset; + if (Index >= Tokens.size()) { - auto Lexer = ::Mamba::Lexer(SyntaxTree); - auto Token = std::shared_ptr(); - do - { - Token = Lexer.Lex(); - - if (Token->Kind() != SyntaxKind::BadToken && Token->Kind() != SyntaxKind::WhitespaceToken) - { - Tokens.emplace_back(Token); - } - } while (Token->Kind() != SyntaxKind::EndOfFileToken); - Diagnostics = std::move(Lexer.Diagnostics); + return &Tokens.back(); } - std::shared_ptr Parser::Peek(const std::size_t Offset) noexcept - { - const auto Index = Position + Offset; - if (Index >= Tokens.size()) - { - return Tokens.back(); - } + return &Tokens[Index]; +} - return Tokens[Index]; - } +const SyntaxToken* Parser::Current() noexcept +{ + return Peek(0); +} - std::shared_ptr Parser::Current() noexcept - { - return Peek(0); - } +const SyntaxToken* Parser::NextToken() noexcept +{ + const auto Current = this->Current(); + ++Position; + return Current; +} - std::shared_ptr Parser::NextToken() noexcept +const SyntaxToken* Parser::MatchToken(SyntaxKind Kind) noexcept +{ + if (Current()->Kind() == Kind) { - const auto Current = this->Current(); - ++Position; - return Current; + return NextToken(); } - std::shared_ptr Parser::MatchToken(const SyntaxKind Kind) noexcept - { - if (Current()->Kind() == Kind) - { - return NextToken(); - } + Diagnostics.ReportUnexpectedToken(Current()->Location(), Current()->Kind(), Kind); + return Peek(1); +} - Diagnostics.ReportUnexpectedToken(Current()->Location(), Current()->Kind(), Kind); - return std::make_shared( - SyntaxTree, - Kind, - Current()->Position, - std::make_shared(), - nullptr - ); - } +CompilationUnitSyntax* Parser::ParseCompilationUnit() noexcept +{ + auto Members = ParseMembers(); + auto EndOfFileToken = MatchToken(SyntaxKind::EndOfFileToken); + return new CompilationUnitSyntax(SyntaxTree, std::move(Members), EndOfFileToken); +} - std::shared_ptr Parser::ParseCompilationUnit() noexcept - { - const auto Members = ParseMembers(); - const auto EndOfFileToken = MatchToken(SyntaxKind::EndOfFileToken); - return std::make_shared(SyntaxTree, std::move(Members), EndOfFileToken); - } +std::vector Parser::ParseMembers() noexcept +{ + auto Members = std::vector(); - std::vector> Parser::ParseMembers() noexcept + while (Current()->Kind() != SyntaxKind::EndOfFileToken) { - auto Members = std::vector>(); + auto StartToken = Current(); - while (Current()->Kind() != SyntaxKind::EndOfFileToken) - { - const auto StartToken = Current(); - - const auto Member = ParseMember(); - Members.emplace_back(Member); - - // If ParseMember() did not consume any tokens, - // we need to skip the current token and continue - // in order to avoid an infinite loop. - // - // We don't need to report an error, because we'll - // already tried to parse an expression statement - // and reported one. - if (Current() == StartToken) - { - NextToken(); - } - } + auto Member = ParseMember(); + Members.emplace_back(Member); - return Members; - } - - std::shared_ptr Parser::ParseMember() noexcept - { - if (Current()->Kind() == SyntaxKind::FunctionKeyword) + // If ParseMember() did not consume any tokens, + // we need to skip the current token and continue + // in order to avoid an infinite loop. + // + // We don't need to report an error, because we'll + // already tried to parse an expression statement + // and reported one. + if (Current() == StartToken) { - return ParseFunctionDeclaration(); + NextToken(); } - - return ParseGlobalStatement(); } - std::shared_ptr Parser::ParseFunctionDeclaration() noexcept + return Members; +} + +MemberSyntax* Parser::ParseMember() noexcept +{ + if (Current()->Kind() == SyntaxKind::FunctionKeyword) { - const auto FunctionKeyword = MatchToken(SyntaxKind::FunctionKeyword); - const auto IdentifierToken = MatchToken(SyntaxKind::IdentifierToken); - const auto OpenParenthesisToken = MatchToken(SyntaxKind::OpenParenthesisToken); - const auto Parameters = ParseParameterList(); - const auto CloseParenthesisToken = MatchToken(SyntaxKind::CloseParenthesisToken); - const auto Type = ParseOptionalTypeClause(); - const auto Body = ParseBlockStatement(); - - return std::make_shared( - SyntaxTree, - FunctionKeyword, - IdentifierToken, - OpenParenthesisToken, - Parameters, - CloseParenthesisToken, - Type, - Body - ); + return ParseFunctionDeclaration(); } - std::shared_ptr>> Parser::ParseParameterList() noexcept + return ParseGlobalStatement(); +} + +FunctionDeclarationSyntax* Parser::ParseFunctionDeclaration() noexcept +{ + auto FunctionKeyword = MatchToken(SyntaxKind::FunctionKeyword); + auto IdentifierToken = MatchToken(SyntaxKind::IdentifierToken); + auto OpenParenthesisToken = MatchToken(SyntaxKind::OpenParenthesisToken); + auto Parameters = ParseParameterList(); + auto CloseParenthesisToken = MatchToken(SyntaxKind::CloseParenthesisToken); + auto Type = ParseOptionalTypeClause(); + auto Body = ParseBlockStatement(); + + return new FunctionDeclarationSyntax( + SyntaxTree, + FunctionKeyword, + IdentifierToken, + OpenParenthesisToken, + std::move(Parameters), + CloseParenthesisToken, + Type, + Body + ); +} + +SeperatedSyntaxList Parser::ParseParameterList() noexcept +{ + auto NodesAndSeperators = std::vector(); + + auto ParseNextParameter = true; + while (ParseNextParameter && + Current()->Kind() != SyntaxKind::CloseParenthesisToken && + Current()->Kind() != SyntaxKind::EndOfFileToken) { - auto NodesAndSeperators = std::vector>(); + auto Parameter = ParseParameter(); + NodesAndSeperators.emplace_back(Parameter); - auto ParseNextParameter = true; - while (ParseNextParameter && Current()->Kind() != SyntaxKind::CloseParenthesisToken && Current()->Kind() != SyntaxKind::EndOfFileToken) + if (Current()->Kind() == SyntaxKind::CommaToken) { - NodesAndSeperators.emplace_back( - Hatcher([&] - { return std::dynamic_pointer_cast(ParseParameter()); }) - ); - - if (Current()->Kind() == SyntaxKind::CommaToken) - { - NodesAndSeperators.emplace_back(Hatcher( - [&] - { return std::dynamic_pointer_cast(MatchToken(SyntaxKind::CommaToken)); } - )); - } - else - { - ParseNextParameter = false; - } + auto Seperator = MatchToken(SyntaxKind::CommaToken); + NodesAndSeperators.emplace_back(Seperator); + } + else + { + ParseNextParameter = false; } - - return std::make_shared>>( - std::move(NodesAndSeperators) - ); } - std::shared_ptr Parser::ParseParameter() noexcept - { - const auto Identifier = MatchToken(SyntaxKind::IdentifierToken); - const auto Type = ParseTypeClause(); - return std::make_shared(SyntaxTree, Identifier, Type); - } + return SeperatedSyntaxList(std::move(NodesAndSeperators)); +} - std::shared_ptr Parser::ParseGlobalStatement() noexcept - { - const auto Statement = ParseStatement(); - return std::make_shared(SyntaxTree, Statement); - } +ParameterSyntax* Parser::ParseParameter() noexcept +{ + auto Identifier = MatchToken(SyntaxKind::IdentifierToken); + auto Type = ParseTypeClause(); + return new ParameterSyntax(SyntaxTree, Identifier, Type); +} - std::shared_ptr Parser::ParseStatement() noexcept - { - switch (Current()->Kind()) - { - case SyntaxKind::OpenBraceToken: - return ParseBlockStatement(); - case SyntaxKind::LetKeyword: - case SyntaxKind::VarKeyword: - return ParseVariableDeclaration(); - case SyntaxKind::IfKeyword: - return ParseIfStatement(); - case SyntaxKind::WhileKeyword: - return ParseWhileStatement(); - case SyntaxKind::DoKeyword: - return ParseDoWhileStatement(); - case SyntaxKind::ForKeyword: - return ParseForStatement(); - case SyntaxKind::BreakKeyword: - return ParseBreakStatement(); - case SyntaxKind::ContinueKeyword: - return ParseContinueStatement(); - case SyntaxKind::ReturnKeyword: - return ParseReturnStatement(); - default: - return ParseExpressionStatement(); - } - } +MemberSyntax* Parser::ParseGlobalStatement() noexcept +{ + const auto Statement = ParseStatement(); + return new GlobalStatementSyntax(SyntaxTree, Statement); +} - std::shared_ptr Parser::ParseBlockStatement() noexcept +StatementSyntax* Parser::ParseStatement() noexcept +{ + switch (Current()->Kind()) + { + case SyntaxKind::OpenBraceToken: + return ParseBlockStatement(); + case SyntaxKind::LetKeyword: + case SyntaxKind::VarKeyword: + return ParseVariableDeclaration(); + case SyntaxKind::IfKeyword: + return ParseIfStatement(); + case SyntaxKind::WhileKeyword: + return ParseWhileStatement(); + case SyntaxKind::DoKeyword: + return ParseDoWhileStatement(); + case SyntaxKind::ForKeyword: + return ParseForStatement(); + case SyntaxKind::BreakKeyword: + return ParseBreakStatement(); + case SyntaxKind::ContinueKeyword: + return ParseContinueStatement(); + case SyntaxKind::ReturnKeyword: + return ParseReturnStatement(); + default: + return ParseExpressionStatement(); + } +} + +BlockStatementSyntax* Parser::ParseBlockStatement() noexcept +{ + auto Statements = std::vector(); + + auto OpenBraceToken = MatchToken(SyntaxKind::OpenBraceToken); + + while (Current()->Kind() != SyntaxKind::EndOfFileToken && + Current()->Kind() != SyntaxKind::CloseBraceToken) { - auto Statements = std::vector>(); + auto StartToken = Current(); - const auto OpenBraceToken = MatchToken(SyntaxKind::OpenBraceToken); + auto Statement = ParseStatement(); + Statements.emplace_back(Statement); - while (Current()->Kind() != SyntaxKind::EndOfFileToken && Current()->Kind() != SyntaxKind::CloseBraceToken) + // If ParseStatement() did not consume any tokens, + // we need to skip the current token and continue + // in order to avoid an infinite loop. + // + // We don't need to report an error, because we'll + // already tried to parse an expression statement + // and reported one. + if (Current() == StartToken) { - const auto StartToken = Current(); - - Statements.emplace_back(Hatcher([&] - { return ParseStatement(); })); - - // If ParseStatement() did not consume any tokens, - // we need to skip the current token and continue - // in order to avoid an infinite loop. - // - // We don't need to report an error, because we'll - // already tried to parse an expression statement - // and reported one. - if (Current() == StartToken) - { - NextToken(); - } + NextToken(); } - - const auto CloseBraceToken = MatchToken(SyntaxKind::CloseBraceToken); - return std::make_shared( - SyntaxTree, - OpenBraceToken, - std::move(Statements), - CloseBraceToken - ); } - std::shared_ptr Parser::ParseVariableDeclaration() noexcept + auto CloseBraceToken = MatchToken(SyntaxKind::CloseBraceToken); + return new BlockStatementSyntax(SyntaxTree, OpenBraceToken, std::move(Statements), CloseBraceToken); +} + +VariableDeclarationSyntax* Parser::ParseVariableDeclaration() noexcept +{ + auto Expected = Current()->Kind() == SyntaxKind::LetKeyword ? SyntaxKind::LetKeyword : SyntaxKind::VarKeyword; + auto Keyword = MatchToken(Expected); + auto Identifier = MatchToken(SyntaxKind::IdentifierToken); + auto TypeClause = ParseOptionalTypeClause(); + auto Equals = MatchToken(SyntaxKind::EqualsToken); + auto Initializer = ParseExpression(); + return new VariableDeclarationSyntax(SyntaxTree, Keyword, Identifier, TypeClause, Equals, Initializer); +} + +NullablePointer Parser::ParseOptionalTypeClause() noexcept +{ + if (Current()->Kind() != SyntaxKind::ColonToken) { - const auto Expected = - Current()->Kind() == SyntaxKind::LetKeyword ? SyntaxKind::LetKeyword : SyntaxKind::VarKeyword; - const auto Keyword = MatchToken(Expected); - const auto Identifier = MatchToken(SyntaxKind::IdentifierToken); - const auto TypeClause = ParseOptionalTypeClause(); - const auto Equals = MatchToken(SyntaxKind::EqualsToken); - const auto Initializer = ParseExpression(); - return std::make_shared( - SyntaxTree, - Keyword, - Identifier, - TypeClause, - Equals, - Initializer - ); + return {}; } - NullableSharedPtr Parser::ParseOptionalTypeClause() noexcept - { - if (Current()->Kind() != SyntaxKind::ColonToken) - { - return nullptr; - } + return ParseTypeClause(); +} - return ParseTypeClause(); - } +TypeClauseSyntax* Parser::ParseTypeClause() noexcept +{ + auto ColonToken = MatchToken(SyntaxKind::ColonToken); + auto Identifier = MatchToken(SyntaxKind::IdentifierToken); + return new TypeClauseSyntax(SyntaxTree, ColonToken, Identifier); +} - std::shared_ptr Parser::ParseTypeClause() noexcept +IfStatementSyntax* Parser::ParseIfStatement() noexcept +{ + auto Keyword = MatchToken(SyntaxKind::IfKeyword); + auto Condition = ParseExpression(); + auto Statement = ParseStatement(); + auto ElseClause = ParseOptionalElseClause(); + return new IfStatementSyntax(SyntaxTree, Keyword, Condition, Statement, ElseClause); +} + +NullablePointer Parser::ParseOptionalElseClause() noexcept +{ + if (Current()->Kind() != SyntaxKind::ElseKeyword) { - const auto ColonToken = MatchToken(SyntaxKind::ColonToken); - const auto Identifier = MatchToken(SyntaxKind::IdentifierToken); - return std::make_shared(SyntaxTree, ColonToken, Identifier); + return nullptr; } - std::shared_ptr Parser::ParseIfStatement() noexcept - { - const auto Keyword = MatchToken(SyntaxKind::IfKeyword); - const auto Condition = ParseExpression(); - const auto OpenParenthesisToken = Current()->Kind() == SyntaxKind::OpenParenthesisToken - ? MatchToken(SyntaxKind::OpenParenthesisToken) - : nullptr; - const auto Statement = ParseStatement(); - const auto CloseParenthesisToken = - OpenParenthesisToken ? MatchToken(SyntaxKind::CloseParenthesisToken) : nullptr; - const auto ElseClause = ParseOptionalElseClause(); - return std::make_shared( - SyntaxTree, - Keyword, - OpenParenthesisToken, - Condition, - CloseParenthesisToken, - Statement, - ElseClause - ); - } + auto Keyword = MatchToken(SyntaxKind::ElseKeyword); + auto Statement = ParseStatement(); + return new ElseClauseSyntax(SyntaxTree, Keyword, Statement); +} - NullableSharedPtr Parser::ParseOptionalElseClause() noexcept - { - if (Current()->Kind() != SyntaxKind::ElseKeyword) - { - return nullptr; - } +WhileStatementSyntax* Parser::ParseWhileStatement() noexcept +{ + auto Keyword = MatchToken(SyntaxKind::WhileKeyword); + auto Condition = ParseExpression(); + auto Body = ParseStatement(); + return new WhileStatementSyntax(SyntaxTree, Keyword, Condition, Body); +} - const auto Keyword = MatchToken(SyntaxKind::ElseKeyword); - const auto Statement = ParseStatement(); - return std::make_shared(SyntaxTree, Keyword, Statement); - } +DoWhileStatementSyntax* Parser::ParseDoWhileStatement() noexcept +{ + auto DoKeyword = MatchToken(SyntaxKind::DoKeyword); + auto Body = ParseStatement(); + auto WhileKeyword = MatchToken(SyntaxKind::WhileKeyword); + auto Condition = ParseExpression(); + return new DoWhileStatementSyntax(SyntaxTree, DoKeyword, Body, WhileKeyword, Condition); +} + +ForStatementSyntax* Parser::ParseForStatement() noexcept +{ + auto Keyword = MatchToken(SyntaxKind::ForKeyword); + auto OpenParenthesisToken = MatchToken(SyntaxKind::OpenParenthesisToken); + auto InitStatement = ParseStatement(); + auto InitStatementColonToken = MatchToken(SyntaxKind::ColonToken); + auto Condition = ParseExpression(); + auto ConditionColonToken = MatchToken(SyntaxKind::ColonToken); + auto Expression = ParseExpression(); + auto CloseParenthesisToken = MatchToken(SyntaxKind::CloseParenthesisToken); + auto Body = ParseStatement(); + return new ForStatementSyntax( + SyntaxTree, + Keyword, + OpenParenthesisToken, + InitStatement, + InitStatementColonToken, + Condition, + ConditionColonToken, + Expression, + CloseParenthesisToken, + Body + ); +} + +BreakStatementSyntax* Parser::ParseBreakStatement() noexcept +{ + auto Keyword = MatchToken(SyntaxKind::BreakKeyword); + return new BreakStatementSyntax(SyntaxTree, Keyword); +} - std::shared_ptr Parser::ParseWhileStatement() noexcept - { - const auto Keyword = MatchToken(SyntaxKind::WhileKeyword); - const auto Condition = ParseExpression(); - const auto Body = ParseStatement(); - return std::make_shared(SyntaxTree, Keyword, Condition, Body); - } +ContinueStatementSyntax* Parser::ParseContinueStatement() noexcept +{ + auto Keyword = MatchToken(SyntaxKind::ContinueKeyword); + return new ContinueStatementSyntax(SyntaxTree, Keyword); +} - std::shared_ptr Parser::ParseDoWhileStatement() noexcept - { - const auto DoKeyword = MatchToken(SyntaxKind::DoKeyword); - const auto Body = ParseStatement(); - const auto WhileKeyword = MatchToken(SyntaxKind::WhileKeyword); - const auto Condition = ParseExpression(); - return std::make_shared(SyntaxTree, DoKeyword, Body, WhileKeyword, Condition); - } +ReturnStatementSyntax* Parser::ParseReturnStatement() noexcept +{ + auto Text = SyntaxTree->Text(); + + auto Keyword = MatchToken(SyntaxKind::ReturnKeyword); + auto KeywordLine = Text.LineIndex(Text.RelativeBegin(Keyword->Text())); + auto CurrentLine = Text.LineIndex(Text.RelativeBegin(Current()->Text())); + auto IsEOF = Current()->Kind() == SyntaxKind::EndOfFileToken; + auto SameLine = !IsEOF && KeywordLine == CurrentLine; + auto Expression = SameLine ? ParseExpression() : nullptr; + return new ReturnStatementSyntax(SyntaxTree, Keyword, Expression); +} + +ExpressionStatementSyntax* Parser::ParseExpressionStatement() noexcept +{ + auto Expression = ParseExpression(); + return new ExpressionStatementSyntax(SyntaxTree, Expression); +} - std::shared_ptr Parser::ParseForStatement() noexcept - { - const auto Keyword = MatchToken(SyntaxKind::ForKeyword); - const auto OpenParenthesisToken = MatchToken(SyntaxKind::OpenParenthesisToken); - const auto InitStatement = ParseStatement(); - const auto InitStatementColonToken = MatchToken(SyntaxKind::ColonToken); - const auto Condition = ParseExpression(); - const auto ConditionColonToken = MatchToken(SyntaxKind::ColonToken); - const auto Expression = ParseExpression(); - const auto CloseParenthesisToken = MatchToken(SyntaxKind::CloseParenthesisToken); - const auto Body = ParseStatement(); - return std::make_shared( - SyntaxTree, - Keyword, - OpenParenthesisToken, - InitStatement, - InitStatementColonToken, - Condition, - ConditionColonToken, - Expression, - CloseParenthesisToken, - Body - ); - } +ExpressionSyntax* Parser::ParseExpression() noexcept +{ + return ParseAssignmentExpression(); +} - std::shared_ptr Parser::ParseBreakStatement() noexcept +ExpressionSyntax* Parser::ParseAssignmentExpression() noexcept +{ + if (Current()->Kind() != SyntaxKind::IdentifierToken) { - const auto Keyword = MatchToken(SyntaxKind::BreakKeyword); - return std::make_shared(SyntaxTree, Keyword); + return ParseBinaryExpression(); } - std::shared_ptr Parser::ParseContinueStatement() noexcept + switch (Peek(1)->Kind()) { - const auto Keyword = MatchToken(SyntaxKind::ContinueKeyword); - return std::make_shared(SyntaxTree, Keyword); + case SyntaxKind::PlusEqualsToken: + case SyntaxKind::MinusEqualsToken: + case SyntaxKind::StarEqualsToken: + case SyntaxKind::SlashEqualsToken: + case SyntaxKind::AmpersandEqualsToken: + case SyntaxKind::PipeEqualsToken: + case SyntaxKind::HatEqualsToken: + case SyntaxKind::EqualsToken: + { + const auto IdentifierToken = NextToken(); + const auto OperatorToken = NextToken(); + const auto Right = ParseAssignmentExpression(); + return new AssignmentExpressionSyntax(SyntaxTree, IdentifierToken, OperatorToken, Right); + } + default: + break; } - std::shared_ptr Parser::ParseReturnStatement() noexcept - { - const auto Keyword = MatchToken(SyntaxKind::ReturnKeyword); - const auto KeywordLine = Text->GetLineIndex(Keyword->Span().Start); - const auto CurrentLine = Text->GetLineIndex(Current()->Span().Start); - const auto IsEOF = Current()->Kind() == SyntaxKind::EndOfFileToken; - const auto SameLine = !IsEOF && KeywordLine == CurrentLine; - const auto Expression = SameLine ? ParseExpression() : nullptr; - return std::make_shared(SyntaxTree, Keyword, Expression); - } + return ParseBinaryExpression(); +} - std::shared_ptr Parser::ParseExpressionStatement() noexcept +ExpressionSyntax* Parser::ParseUnaryOrPrimaryExpression(std::size_t ParentPrecedence) noexcept +{ + auto UnaryOperatorPrecedence = SyntaxFacts::GetUnaryOperatorPrecedence(Current()->Kind()); + if (UnaryOperatorPrecedence != 0 && UnaryOperatorPrecedence >= ParentPrecedence) { - const auto Expression = ParseExpression(); - return std::make_shared(SyntaxTree, Expression); + auto OperatorToken = NextToken(); + auto Operand = ParseBinaryExpression(UnaryOperatorPrecedence); + return new UnaryExpressionSyntax(SyntaxTree, OperatorToken, Operand); } - - std::shared_ptr Parser::ParseExpression() noexcept + else { - return ParseAssignmentExpression(); + return ParsePrimaryExpression(); } +} - std::shared_ptr Parser::ParseAssignmentExpression() noexcept +ExpressionSyntax* Parser::ParseBinaryExpression(std::size_t ParentPrecedence) noexcept +{ + auto Left = ParseUnaryOrPrimaryExpression(); + while (true) { - if (Current()->Kind() != SyntaxKind::IdentifierToken) + auto Precedence = SyntaxFacts::GetBinaryOperatorPrecedence(Current()->Kind()); + if (Precedence == 0 || Precedence <= ParentPrecedence) { - return ParseBinaryExpression(); + break; } - switch (Peek(1)->Kind()) - { - case SyntaxKind::PlusEqualsToken: - case SyntaxKind::MinusEqualsToken: - case SyntaxKind::StarEqualsToken: - case SyntaxKind::SlashEqualsToken: - case SyntaxKind::AmpersandEqualsToken: - case SyntaxKind::PipeEqualsToken: - case SyntaxKind::HatEqualsToken: - case SyntaxKind::EqualsToken: - { - const auto IdentifierToken = NextToken(); - const auto OperatorToken = NextToken(); - const auto Right = ParseAssignmentExpression(); - return std::make_shared(SyntaxTree, IdentifierToken, OperatorToken, Right); - } - default: - break; - } - - return ParseBinaryExpression(); + auto OperatorToken = NextToken(); + auto Right = ParseBinaryExpression(Precedence); + Left = new BinaryExpressionSyntax(SyntaxTree, Left, OperatorToken, Right); } - std::shared_ptr Parser::ParseBinaryExpression(const std::size_t ParentPrecedence) noexcept + return Left; +} + +ExpressionSyntax* Parser::ParsePrimaryExpression() noexcept +{ + switch (Current()->Kind()) { - auto Left = std::shared_ptr(); - const auto UnaryOperatorPrecedence = SyntaxFacts::GetUnaryOperatorPrecedence(Current()->Kind()); - if (UnaryOperatorPrecedence != 0 && UnaryOperatorPrecedence >= ParentPrecedence) - { - const auto OperatorToken = NextToken(); - const auto Operand = ParseBinaryExpression(UnaryOperatorPrecedence); - Left = std::make_shared(SyntaxTree, OperatorToken, Operand); - } - else - { - Left = ParsePrimaryExpression(); - } + case SyntaxKind::OpenParenthesisToken: + return ParseParenthesizedExpression(); - while (true) - { - const auto Precedence = SyntaxFacts::GetBinaryOperatorPrecedence(Current()->Kind()); - if (Precedence == 0 || Precedence <= ParentPrecedence) - { - break; - } + case SyntaxKind::FalseKeyword: + case SyntaxKind::TrueKeyword: + return ParseBooleanLiteral(); - const auto OperatorToken = NextToken(); - const auto Right = ParseBinaryExpression(Precedence); - Left = std::make_shared(SyntaxTree, Left, OperatorToken, Right); - } + case SyntaxKind::NumberToken: + return ParseNumericLiteral(); - return Left; - } + case SyntaxKind::StringToken: + return ParseStringLiteral(); - std::shared_ptr Parser::ParsePrimaryExpression() noexcept - { - switch (Current()->Kind()) - { - case SyntaxKind::OpenParenthesisToken: - return ParseParenthesizedExpression(); + case SyntaxKind::IdentifierToken: + default: + return ParseNameOrCallExpression(); + } +} - case SyntaxKind::FalseKeyword: - case SyntaxKind::TrueKeyword: - return ParseBooleanLiteral(); +ParenthesizedExpressionSyntax* Parser::ParseParenthesizedExpression() noexcept +{ + auto Left = MatchToken(SyntaxKind::OpenParenthesisToken); + auto Expression = ParseExpression(); + auto Right = MatchToken(SyntaxKind::CloseParenthesisToken); + return new ParenthesizedExpressionSyntax(SyntaxTree, Left, Expression, Right); +} - case SyntaxKind::NumberToken: - return ParseNumericLiteral(); +LiteralExpressionSyntax* Parser::ParseBooleanLiteral() noexcept +{ + auto IsTrue = Current()->Kind() == SyntaxKind::TrueKeyword; + auto KeywordToken = MatchToken(IsTrue ? SyntaxKind::TrueKeyword : SyntaxKind::FalseKeyword); + return new LiteralExpressionSyntax(SyntaxTree, KeywordToken, IsTrue); +} - case SyntaxKind::StringToken: - return ParseStringLiteral(); +LiteralExpressionSyntax* Parser::ParseNumericLiteral() noexcept +{ + auto NumberToken = MatchToken(SyntaxKind::NumberToken); + return new LiteralExpressionSyntax(SyntaxTree, NumberToken); +} - case SyntaxKind::IdentifierToken: - default: - return ParseNameOrCallExpression(); - } - } +LiteralExpressionSyntax* Parser::ParseStringLiteral() noexcept +{ + auto StringToken = MatchToken(SyntaxKind::StringToken); + return new LiteralExpressionSyntax(SyntaxTree, StringToken); +} - std::shared_ptr Parser::ParseParenthesizedExpression() noexcept +ExpressionSyntax* Parser::ParseNameOrCallExpression() noexcept +{ + if (Peek(0)->Kind() == SyntaxKind::IdentifierToken && Peek(1)->Kind() == SyntaxKind::OpenParenthesisToken) { - const auto Left = MatchToken(SyntaxKind::OpenParenthesisToken); - const auto Expression = ParseExpression(); - const auto Right = MatchToken(SyntaxKind::CloseParenthesisToken); - return std::make_shared(SyntaxTree, Left, Expression, Right); + return ParseCallExpression(); } - std::shared_ptr Parser::ParseBooleanLiteral() noexcept - { - const auto IsTrue = Current()->Kind() == SyntaxKind::TrueKeyword; - const auto KeywordToken = MatchToken(IsTrue ? SyntaxKind::TrueKeyword : SyntaxKind::FalseKeyword); - return std::make_shared( - SyntaxTree, - KeywordToken, - std::make_shared(IsTrue) - ); - } + return ParseNameExpression(); +} - std::shared_ptr Parser::ParseNumericLiteral() noexcept - { - const auto NumberToken = MatchToken(SyntaxKind::NumberToken); - return std::make_shared(SyntaxTree, NumberToken); - } +CallExpressionSyntax* Parser::ParseCallExpression() noexcept +{ + auto Identifier = MatchToken(SyntaxKind::IdentifierToken); + auto OpenParenthesisToken = MatchToken(SyntaxKind::OpenParenthesisToken); + auto Arguments = ParseArguments(); + auto CloseParenthesisToken = MatchToken(SyntaxKind::CloseParenthesisToken); + return new CallExpressionSyntax( + SyntaxTree, + Identifier, + OpenParenthesisToken, + std::move(Arguments), + CloseParenthesisToken + ); +} + +SeperatedSyntaxList Parser::ParseArguments() noexcept +{ + auto NodesAndSeperators = std::vector(); - std::shared_ptr Parser::ParseStringLiteral() noexcept + auto ParseNextArgument = true; + while (ParseNextArgument && Current()->Kind() != SyntaxKind::CloseParenthesisToken && Current()->Kind() != SyntaxKind::EndOfFileToken) { - const auto StringToken = MatchToken(SyntaxKind::StringToken); - return std::make_shared(SyntaxTree, StringToken); - } + auto Expression = ParseExpression(); + NodesAndSeperators.emplace_back(Expression); - std::shared_ptr Parser::ParseNameOrCallExpression() noexcept - { - if (Peek(0)->Kind() == SyntaxKind::IdentifierToken && Peek(1)->Kind() == SyntaxKind::OpenParenthesisToken) + if (Current()->Kind() == SyntaxKind::CommaToken) { - return ParseCallExpression(); + auto Seperator = MatchToken(SyntaxKind::CommaToken); + NodesAndSeperators.emplace_back(Seperator); } - - return ParseNameExpression(); - } - - std::shared_ptr Parser::ParseCallExpression() noexcept - { - const auto Identifier = MatchToken(SyntaxKind::IdentifierToken); - const auto OpenParenthesisToken = MatchToken(SyntaxKind::OpenParenthesisToken); - const auto Arguments = ParseArguments(); - const auto CloseParenthesisToken = MatchToken(SyntaxKind::CloseParenthesisToken); - return std::make_shared( - SyntaxTree, - Identifier, - OpenParenthesisToken, - Arguments, - CloseParenthesisToken - ); - } - - std::shared_ptr>> - Parser::ParseArguments() noexcept - { - auto NodesAndSeperators = std::vector>(); - - auto ParseNextArgument = true; - while (ParseNextArgument && Current()->Kind() != SyntaxKind::CloseParenthesisToken && Current()->Kind() != SyntaxKind::EndOfFileToken) + else { - NodesAndSeperators.emplace_back( - Hatcher([&] - { return std::dynamic_pointer_cast(ParseExpression()); }) - ); - - if (Current()->Kind() == SyntaxKind::CommaToken) - { - NodesAndSeperators.emplace_back(Hatcher( - [&] - { return std::dynamic_pointer_cast(MatchToken(SyntaxKind::CommaToken)); } - )); - } - else - { - ParseNextArgument = false; - } + ParseNextArgument = false; } - - return std::make_shared>>(std::move(NodesAndSeperators)); } - std::shared_ptr Parser::ParseNameExpression() noexcept - { - const auto IdentifierToken = MatchToken(SyntaxKind::IdentifierToken); - return std::make_shared(SyntaxTree, IdentifierToken); - } -} // namespace Mamba \ No newline at end of file + return SeperatedSyntaxList(std::move(NodesAndSeperators)); +} + +NameExpressionSyntax* Parser::ParseNameExpression() noexcept +{ + const auto IdentifierToken = MatchToken(SyntaxKind::IdentifierToken); + return new NameExpressionSyntax(SyntaxTree, IdentifierToken); +} \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/Parser.h b/src/Mamba/Code Analysis/Syntax/Parser.h index 2167da7..4b60f5f 100644 --- a/src/Mamba/Code Analysis/Syntax/Parser.h +++ b/src/Mamba/Code Analysis/Syntax/Parser.h @@ -1,71 +1,87 @@ #pragma once -#include #include +#include "AssignmentExpressionSyntax.h" +#include "BinaryExpressionSyntax.h" +#include "BreakStatementSyntax.h" +#include "CallExpressionSyntax.h" +#include "CompilationUnitSyntax.h" +#include "ContinueStatementSyntax.h" #include "DiagnosticBag.h" +#include "DoWhileStatementSyntax.h" +#include "ElseClauseSyntax.h" +#include "ExpressionStatementSyntax.h" +#include "ForStatementSyntax.h" +#include "FunctionDeclarationSyntax.h" +#include "GlobalStatementSyntax.h" +#include "IfStatementSyntax.h" +#include "LiteralExpressionSyntax.h" +#include "NameExpressionSyntax.h" +#include "ParameterSyntax.h" +#include "ParenthesizedExpressionSyntax.h" +#include "ReturnStatementSyntax.h" #include "SeperatedSyntaxList.h" +#include "SyntaxToken.h" +#include "VariableDeclarationSyntax.h" +#include "WhileStatementSyntax.h" namespace Mamba { class Parser { - const std::shared_ptr SyntaxTree; - const std::shared_ptr Text; - std::vector> Tokens; + const class SyntaxTree* SyntaxTree; + std::span Tokens; std::size_t Position; public: DiagnosticBag Diagnostics; - [[nodiscard]] Parser(const std::shared_ptr SyntaxTree) noexcept; - [[nodiscard]] Parser(const std::shared_ptr SyntaxTree) noexcept; + [[nodiscard]] Parser(const class SyntaxTree* SyntaxTree, std::span Tokens) noexcept; private: - [[nodiscard]] std::shared_ptr Peek(const std::size_t Offset) noexcept; - [[nodiscard]] std::shared_ptr Current() noexcept; - std::shared_ptr NextToken() noexcept; - [[nodiscard]] std::shared_ptr MatchToken(const SyntaxKind Kind) noexcept; + [[nodiscard]] const SyntaxToken* Peek(std::size_t Offset) noexcept; + [[nodiscard]] const SyntaxToken* Current() noexcept; + const SyntaxToken* NextToken() noexcept; + [[nodiscard]] const SyntaxToken* MatchToken(SyntaxKind Kind) noexcept; public: - [[nodiscard]] std::shared_ptr ParseCompilationUnit() noexcept; + [[nodiscard]] CompilationUnitSyntax* ParseCompilationUnit() noexcept; private: - [[nodiscard]] std::vector> ParseMembers() noexcept; - [[nodiscard]] std::shared_ptr ParseMember() noexcept; - [[nodiscard]] std::shared_ptr ParseFunctionDeclaration() noexcept; - [[nodiscard]] std::shared_ptr>> - ParseParameterList() noexcept; - [[nodiscard]] std::shared_ptr ParseParameter() noexcept; - [[nodiscard]] std::shared_ptr ParseGlobalStatement() noexcept; - [[nodiscard]] std::shared_ptr ParseStatement() noexcept; - [[nodiscard]] std::shared_ptr ParseBlockStatement() noexcept; - [[nodiscard]] std::shared_ptr ParseVariableDeclaration() noexcept; - [[nodiscard]] NullableSharedPtr ParseOptionalTypeClause() noexcept; - [[nodiscard]] std::shared_ptr ParseTypeClause() noexcept; - [[nodiscard]] std::shared_ptr ParseIfStatement() noexcept; - [[nodiscard]] NullableSharedPtr ParseOptionalElseClause() noexcept; - [[nodiscard]] std::shared_ptr ParseWhileStatement() noexcept; - [[nodiscard]] std::shared_ptr ParseDoWhileStatement() noexcept; - [[nodiscard]] std::shared_ptr ParseForStatement() noexcept; - [[nodiscard]] std::shared_ptr ParseBreakStatement() noexcept; - [[nodiscard]] std::shared_ptr ParseContinueStatement() noexcept; - [[nodiscard]] std::shared_ptr ParseReturnStatement() noexcept; - [[nodiscard]] std::shared_ptr ParseExpressionStatement() noexcept; - [[nodiscard]] std::shared_ptr ParseExpression() noexcept; - [[nodiscard]] std::shared_ptr ParseAssignmentExpression() noexcept; - [[nodiscard]] std::shared_ptr - ParseBinaryExpression(const std::size_t ParentPrecedence = 0) noexcept; - [[nodiscard]] std::shared_ptr ParsePrimaryExpression() noexcept; - [[nodiscard]] std::shared_ptr ParseParenthesizedExpression() noexcept; - [[nodiscard]] std::shared_ptr ParseBooleanLiteral() noexcept; - [[nodiscard]] std::shared_ptr ParseNumericLiteral() noexcept; - [[nodiscard]] std::shared_ptr ParseStringLiteral() noexcept; - [[nodiscard]] std::shared_ptr ParseNameOrCallExpression() noexcept; - [[nodiscard]] std::shared_ptr ParseCallExpression() noexcept; - [[nodiscard]] std::shared_ptr>> - ParseArguments() noexcept; - [[nodiscard]] std::shared_ptr ParseNameExpression() noexcept; + [[nodiscard]] ExpressionSyntax* ParseUnaryOrPrimaryExpression(std::size_t ParentPrecedence = 0) noexcept; + [[nodiscard]] ExpressionSyntax* ParseBinaryExpression(std::size_t ParentPrecedence = 0) noexcept; + [[nodiscard]] ParenthesizedExpressionSyntax* ParseParenthesizedExpression() noexcept; + [[nodiscard]] SeperatedSyntaxList ParseParameterList() noexcept; + [[nodiscard]] NullablePointer ParseOptionalTypeClause() noexcept; + [[nodiscard]] NullablePointer ParseOptionalElseClause() noexcept; + [[nodiscard]] SeperatedSyntaxList ParseArguments() noexcept; + [[nodiscard]] FunctionDeclarationSyntax* ParseFunctionDeclaration() noexcept; + [[nodiscard]] VariableDeclarationSyntax* ParseVariableDeclaration() noexcept; + [[nodiscard]] ExpressionStatementSyntax* ParseExpressionStatement() noexcept; + [[nodiscard]] ContinueStatementSyntax* ParseContinueStatement() noexcept; + [[nodiscard]] DoWhileStatementSyntax* ParseDoWhileStatement() noexcept; + [[nodiscard]] LiteralExpressionSyntax* ParseNumericLiteral() noexcept; + [[nodiscard]] LiteralExpressionSyntax* ParseBooleanLiteral() noexcept; + [[nodiscard]] ExpressionSyntax* ParseAssignmentExpression() noexcept; + [[nodiscard]] ExpressionSyntax* ParseNameOrCallExpression() noexcept; + [[nodiscard]] LiteralExpressionSyntax* ParseStringLiteral() noexcept; + [[nodiscard]] ReturnStatementSyntax* ParseReturnStatement() noexcept; + [[nodiscard]] CallExpressionSyntax* ParseCallExpression() noexcept; + [[nodiscard]] BlockStatementSyntax* ParseBlockStatement() noexcept; + [[nodiscard]] WhileStatementSyntax* ParseWhileStatement() noexcept; + [[nodiscard]] BreakStatementSyntax* ParseBreakStatement() noexcept; + [[nodiscard]] NameExpressionSyntax* ParseNameExpression() noexcept; + [[nodiscard]] ExpressionSyntax* ParsePrimaryExpression() noexcept; + [[nodiscard]] std::vector ParseMembers() noexcept; + [[nodiscard]] ForStatementSyntax* ParseForStatement() noexcept; + [[nodiscard]] IfStatementSyntax* ParseIfStatement() noexcept; + [[nodiscard]] MemberSyntax* ParseGlobalStatement() noexcept; + [[nodiscard]] ExpressionSyntax* ParseExpression() noexcept; + [[nodiscard]] TypeClauseSyntax* ParseTypeClause() noexcept; + [[nodiscard]] ParameterSyntax* ParseParameter() noexcept; + [[nodiscard]] StatementSyntax* ParseStatement() noexcept; + [[nodiscard]] MemberSyntax* ParseMember() noexcept; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/ReturnStatementSyntax.cpp b/src/Mamba/Code Analysis/Syntax/ReturnStatementSyntax.cpp index bbda6c6..41deaff 100644 --- a/src/Mamba/Code Analysis/Syntax/ReturnStatementSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/ReturnStatementSyntax.cpp @@ -1,26 +1,27 @@ #include "ReturnStatementSyntax.h" -#include "ExpressionSyntax.h" -#include "SyntaxToken.h" +using namespace Mamba; -namespace Mamba +ReturnStatementSyntax::ReturnStatementSyntax( + const class SyntaxTree* SyntaxTree, + const SyntaxToken* ReturnKeyword, + NullablePointer Expression +) noexcept : + Super(SyntaxTree), ReturnKeyword(ReturnKeyword), Expression(Expression) { - ReturnStatementSyntax::ReturnStatementSyntax( - const std::shared_ptr SyntaxTree, - const std::shared_ptr ReturnKeyword, - const NullableSharedPtr Expression - ) noexcept : - Super(SyntaxTree), ReturnKeyword(ReturnKeyword), Expression(Expression) - { - } +} - SyntaxKind ReturnStatementSyntax::Kind() const noexcept - { - return SyntaxKind::ReturnStatement; - } +ReturnStatementSyntax::~ReturnStatementSyntax() noexcept +{ + delete Expression; +} + +SyntaxKind ReturnStatementSyntax::Kind() const noexcept +{ + return SyntaxKind::ReturnStatement; +} - std::vector> ReturnStatementSyntax::Children() const noexcept - { - return { ReturnKeyword, Expression }; - } -} // namespace Mamba \ No newline at end of file +std::vector ReturnStatementSyntax::Children() const noexcept +{ + return { ReturnKeyword, Expression }; +} \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/ReturnStatementSyntax.h b/src/Mamba/Code Analysis/Syntax/ReturnStatementSyntax.h index c48f45b..103c247 100644 --- a/src/Mamba/Code Analysis/Syntax/ReturnStatementSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/ReturnStatementSyntax.h @@ -1,8 +1,8 @@ #pragma once +#include "ExpressionSyntax.h" #include "StatementSyntax.h" - -#include +#include "SyntaxToken.h" namespace Mamba { @@ -12,15 +12,17 @@ namespace Mamba using Super = StatementSyntax; [[nodiscard]] ReturnStatementSyntax( - const std::shared_ptr SyntaxTree, - const std::shared_ptr ReturnKeyword, - const NullableSharedPtr Expression + const class SyntaxTree* SyntaxTree, + const SyntaxToken* ReturnKeyword, + NullablePointer Expression ) noexcept; + ~ReturnStatementSyntax() noexcept override; + SyntaxKind Kind() const noexcept override; - std::vector> Children() const noexcept override; + std::vector Children() const noexcept override; - const std::shared_ptr ReturnKeyword; - const NullableSharedPtr Expression; + const SyntaxToken* ReturnKeyword; + NullablePointer Expression; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/SeperatedSyntaxList.h b/src/Mamba/Code Analysis/Syntax/SeperatedSyntaxList.h index 35c53f4..8e76cea 100644 --- a/src/Mamba/Code Analysis/Syntax/SeperatedSyntaxList.h +++ b/src/Mamba/Code Analysis/Syntax/SeperatedSyntaxList.h @@ -1,50 +1,57 @@ #pragma once +#include #include #include #include +#include "SyntaxNode.h" + namespace Mamba { template typename Container = std::vector> - class SeperatedSyntaxList : Container + requires requires { + std::is_pointer_v; + std::derived_from::element_type, SyntaxNode>; + } + class SeperatedSyntaxList : public Container { - [[nodiscard]] constexpr Container SkipSeperators(const Container& NodesAndSeparators) const noexcept + [[nodiscard]] constexpr Container SkipSeperators(const Container& NodesAndSeparators) const noexcept { -#if __cpp_lib_ranges_enumerate == 202302L +#if defined(__cpp_lib_ranges_enumerate) && __cpp_lib_ranges_enumerate >= 202302L // NodesAndSeparators | std::views::enumerate; #endif - if (NodesAndSeparators.size() == 1) { - return Container{ NodesAndSeparators.front() }; + return Container{ static_cast(NodesAndSeparators.front()) }; } auto Result = Container(NodesAndSeparators.size() / 2); -#if __cpp_size_t_suffix == 202011L +#if defined(__cpp_size_t_suffix) && __cpp_size_t_suffix >= 202011L for (auto Index = 0uz; Index < NodesAndSeparators.size() / 2; ++Index) #else for (auto Index = std::size_t(); Index < NodesAndSeparators.size() / 2; ++Index) #endif { - Result[Index] = NodesAndSeparators[Index * 2]; + Result[Index] = static_cast(NodesAndSeparators[Index * 2]); } return Result; } public: - using Super = Container; + using Super = Container; + using ValueType = std::decay_t; - [[nodiscard]] constexpr SeperatedSyntaxList(Container&& NodesAndSeparators) noexcept : - Super(std::forward>(NodesAndSeparators)) + [[nodiscard]] constexpr SeperatedSyntaxList(Container&& NodesAndSeparators) noexcept : + Super(std::forward>(NodesAndSeparators)) { } template - [[nodiscard]] auto operator[](this SelfType&& Self, const std::size_t Index) + [[nodiscard]] auto operator[](this SelfType&& Self, std::size_t Index) noexcept(noexcept(std::forward(Self).Super::operator[](Index)) ) -> decltype(std::forward(Self).Super::operator[](Index)) { - return std::forward(Self).Super::operator[](Index * 2); + return static_cast(std::forward(Self).Super::operator[](Index * 2)); } [[nodiscard]] constexpr std::size_t Count() const noexcept @@ -63,13 +70,13 @@ namespace Mamba return (*this)[Index * 2 + 1]; } - [[nodiscard]] constexpr const Container& WithSeperators() const noexcept + [[nodiscard]] constexpr const Container& WithSeperators() const noexcept { return *this; } template typename ToContainer> - [[nodiscard]] constexpr ToContainer WithSeperators() const noexcept + [[nodiscard]] constexpr ToContainer WithSeperators() const noexcept { return *this | std::ranges::to(); } diff --git a/src/Mamba/Code Analysis/Syntax/StatementSyntax.cpp b/src/Mamba/Code Analysis/Syntax/StatementSyntax.cpp index 8cd9509..411c942 100644 --- a/src/Mamba/Code Analysis/Syntax/StatementSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/StatementSyntax.cpp @@ -2,7 +2,7 @@ namespace Mamba { - StatementSyntax::StatementSyntax(const std::shared_ptr SyntaxTree) noexcept : + StatementSyntax::StatementSyntax(const class SyntaxTree* SyntaxTree) noexcept : Super(SyntaxTree) { } diff --git a/src/Mamba/Code Analysis/Syntax/StatementSyntax.h b/src/Mamba/Code Analysis/Syntax/StatementSyntax.h index eb28ab8..8c0ce28 100644 --- a/src/Mamba/Code Analysis/Syntax/StatementSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/StatementSyntax.h @@ -12,6 +12,6 @@ namespace Mamba using Super = SyntaxNode; protected: - [[nodiscard]] StatementSyntax(const std::shared_ptr SyntaxTree) noexcept; + [[nodiscard]] StatementSyntax(const class SyntaxTree* SyntaxTree) noexcept; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/SyntaxNode.cpp b/src/Mamba/Code Analysis/Syntax/SyntaxNode.cpp index d3c66ce..b4e5b05 100644 --- a/src/Mamba/Code Analysis/Syntax/SyntaxNode.cpp +++ b/src/Mamba/Code Analysis/Syntax/SyntaxNode.cpp @@ -51,15 +51,4 @@ std::vector SyntaxNode::AncestorsAndSelf() const noexcept std::vector SyntaxNode::Ancestors() const noexcept { return AncestorsAndSelf() | std::views::drop(1) | std::ranges::to(); -} - -const SyntaxToken* SyntaxNode::LastToken() const noexcept -{ - if (auto Token = dynamic_cast(this)) - { - return Token; - } - - // A syntax node should always contain at least 1 token. - return Children().back()->LastToken(); } \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/SyntaxNode.h b/src/Mamba/Code Analysis/Syntax/SyntaxNode.h index a1e7648..74a9820 100644 --- a/src/Mamba/Code Analysis/Syntax/SyntaxNode.h +++ b/src/Mamba/Code Analysis/Syntax/SyntaxNode.h @@ -3,15 +3,14 @@ #include "SyntaxKind.h" #include "TextLocation.h" -#include #include #include namespace Mamba { class SyntaxTree; - class SyntaxToken; + // SyntaxNode is the minimum meaingful unit in the compilation, represents a syntactic element in the source code. class SyntaxNode { const class SyntaxTree* PrivateSyntaxTree; @@ -24,7 +23,12 @@ namespace Mamba [[nodiscard]] const SyntaxTree* Tree() const noexcept; [[nodiscard]] virtual SyntaxKind Kind() const noexcept = 0; + + // Gets the text of the node in the source code, containing the whole node, including all its children. [[nodiscard]] virtual StringView Text() const noexcept; + + // Gets the text location of the node in the source code, starts from the first child's beginning and + // ends at the last child's end. [[nodiscard]] TextLocation Location() const noexcept; // Gets all children of the node, children are member variables of types that indirectly or directly derived @@ -32,7 +36,11 @@ namespace Mamba // they were defined within the type. If the member variable is a container whose element type is, or directly // or indirectly derived from SyntaxNode, it should be expanded and inserted in its original sequence. [[nodiscard]] virtual std::vector Children() const noexcept = 0; + + // Gets all the ancestors of the node, including the node itself, in the order of closest to farthest. [[nodiscard]] std::vector AncestorsAndSelf() const noexcept; + + // Gets all the ancestors of the node, excluding the node itself, in the order of closest to farthest. [[nodiscard]] std::vector Ancestors() const noexcept; #if defined(__cpp_lib_ranges_to_container) && __cpp_lib_ranges_to_container >= 202202L @@ -42,7 +50,5 @@ namespace Mamba return Children() | std::ranges::to(); } #endif - - [[nodiscard]] const SyntaxToken* LastToken() const noexcept; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/SyntaxToken.cpp b/src/Mamba/Code Analysis/Syntax/SyntaxToken.cpp index 98f0c9b..bab3dd1 100644 --- a/src/Mamba/Code Analysis/Syntax/SyntaxToken.cpp +++ b/src/Mamba/Code Analysis/Syntax/SyntaxToken.cpp @@ -1,39 +1,35 @@ #include "SyntaxToken.h" #include "MambaCore.h" -#include "TextSpan.h" +#include "SyntaxTree.h" -namespace Mamba +using namespace Mamba; + +SyntaxToken::SyntaxToken(const SyntaxTree* SyntaxTree, SyntaxKind Kind, StringView Text, Literal Value) noexcept : + Super(SyntaxTree), PrivateKind(Kind), PrivateText(Text), PrivateValue(Value) { - SyntaxToken::SyntaxToken( - const std::shared_ptr SyntaxTree, - const SyntaxKind Kind, - const std::size_t Position, - const std::shared_ptr Text, - const NullableSharedPtr Value - ) noexcept : - Super(SyntaxTree), Position(Position), Text(Text), Value(Value), KindValue(Kind) - { - } +} - SyntaxKind SyntaxToken::Kind() const noexcept - { - return KindValue; - } +SyntaxKind SyntaxToken::Kind() const noexcept +{ + return PrivateKind; +} - TextSpan SyntaxToken::Span() const noexcept - { - return TextSpan(Position, Text->length()); - } +StringView SyntaxToken::Text() const noexcept +{ + return PrivateText; +} - TextSpan SyntaxToken::FullSpan() const noexcept - { - const auto Start = Span().Start; - const auto End = Span().End(); - return TextSpan::FromBounds(Start, End); - } +std::vector SyntaxToken::Children() const noexcept +{ + return {}; +} - std::vector> SyntaxToken::Children() const noexcept - { - return {}; - } -} // namespace Mamba \ No newline at end of file +std::size_t SyntaxToken::Position() const noexcept +{ + return Tree()->Text().RelativeBegin(Text()); +} + +Literal SyntaxToken::Value() const noexcept +{ + return PrivateValue; +} \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/SyntaxToken.h b/src/Mamba/Code Analysis/Syntax/SyntaxToken.h index f22775a..9782ee4 100644 --- a/src/Mamba/Code Analysis/Syntax/SyntaxToken.h +++ b/src/Mamba/Code Analysis/Syntax/SyntaxToken.h @@ -1,38 +1,30 @@ #pragma once +#include "Literal.h" #include "MambaCore.h" #include "SyntaxKind.h" #include "SyntaxNode.h" -#include "TextSpan.h" -#include namespace Mamba { + class SyntaxTree; + class SyntaxToken : public SyntaxNode { - using Super = SyntaxNode; + StringView PrivateText; + Literal PrivateValue; + SyntaxKind PrivateKind; public: - [[nodiscard]] SyntaxToken( - const std::shared_ptr SyntaxTree, - const SyntaxKind Kind, - const std::size_t Position, - const std::shared_ptr Text, - const NullableSharedPtr Value - ) noexcept; - - virtual SyntaxKind Kind() const noexcept override; - - virtual TextSpan Span() const noexcept override; - virtual TextSpan FullSpan() const noexcept override; + using Super = SyntaxNode; - virtual std::vector> Children() const noexcept override; + [[nodiscard]] SyntaxToken(const class SyntaxTree* SyntaxTree, SyntaxKind Kind, StringView Text, Literal Value = {}) noexcept; - std::size_t Position; - const std::shared_ptr Text; - const NullableSharedPtr Value; + virtual SyntaxKind Kind() const noexcept override; + virtual StringView Text() const noexcept override; + virtual std::vector Children() const noexcept override; - private: - SyntaxKind KindValue; + [[nodiscard]] std::size_t Position() const noexcept; + [[nodiscard]] Literal Value() const noexcept; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/TypeClauseSyntax.cpp b/src/Mamba/Code Analysis/Syntax/TypeClauseSyntax.cpp index 8228eab..c4b03a5 100644 --- a/src/Mamba/Code Analysis/Syntax/TypeClauseSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/TypeClauseSyntax.cpp @@ -2,24 +2,23 @@ #include "SyntaxToken.h" -namespace Mamba +using namespace Mamba; + +TypeClauseSyntax::TypeClauseSyntax( + const class SyntaxTree* SyntaxTree, + const SyntaxToken* ColonToken, + const SyntaxToken* Identifier +) noexcept : + Super(SyntaxTree), ColonToken(ColonToken), Identifier(Identifier) { - TypeClauseSyntax::TypeClauseSyntax( - const std::shared_ptr SyntaxTree, - const std::shared_ptr ColonToken, - const std::shared_ptr Identifier - ) noexcept : - Super(SyntaxTree), ColonToken(ColonToken), Identifier(Identifier) - { - } +} - SyntaxKind TypeClauseSyntax::Kind() const noexcept - { - return SyntaxKind::TypeClause; - } +SyntaxKind TypeClauseSyntax::Kind() const noexcept +{ + return SyntaxKind::TypeClause; +} - std::vector> TypeClauseSyntax::Children() const noexcept - { - return { ColonToken, Identifier }; - } -} // namespace Mamba \ No newline at end of file +std::vector TypeClauseSyntax::Children() const noexcept +{ + return { ColonToken, Identifier }; +} \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/TypeClauseSyntax.h b/src/Mamba/Code Analysis/Syntax/TypeClauseSyntax.h index cfe09a7..6715137 100644 --- a/src/Mamba/Code Analysis/Syntax/TypeClauseSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/TypeClauseSyntax.h @@ -1,8 +1,7 @@ #pragma once #include "SyntaxNode.h" - -#include +#include "SyntaxToken.h" namespace Mamba { @@ -12,15 +11,15 @@ namespace Mamba using Super = SyntaxNode; [[nodiscard]] TypeClauseSyntax( - const std::shared_ptr SyntaxTree, - const std::shared_ptr ColonToken, - const std::shared_ptr Identifier + const class SyntaxTree* SyntaxTree, + const SyntaxToken* ColonToken, + const SyntaxToken* Identifier ) noexcept; SyntaxKind Kind() const noexcept override; - std::vector> Children() const noexcept override; + std::vector Children() const noexcept override; - const std::shared_ptr ColonToken; - const std::shared_ptr Identifier; + const SyntaxToken* ColonToken; + const SyntaxToken* Identifier; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/UnaryExpressionSyntax.cpp b/src/Mamba/Code Analysis/Syntax/UnaryExpressionSyntax.cpp index a1dcb57..525d035 100644 --- a/src/Mamba/Code Analysis/Syntax/UnaryExpressionSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/UnaryExpressionSyntax.cpp @@ -1,23 +1,27 @@ #include "UnaryExpressionSyntax.h" -namespace Mamba +using namespace Mamba; + +UnaryExpressionSyntax::UnaryExpressionSyntax( + const class SyntaxTree* SyntaxTree, + const SyntaxToken* OperatorToken, + const ExpressionSyntax* Operand +) noexcept : + Super(SyntaxTree), OperatorToken(OperatorToken), Operand(Operand) { - UnaryExpressionSyntax::UnaryExpressionSyntax( - const std::shared_ptr SyntaxTree, - const std::shared_ptr OperatorToken, - const std::shared_ptr Operand - ) noexcept : - Super(SyntaxTree), OperatorToken(OperatorToken), Operand(Operand) - { - } +} - SyntaxKind UnaryExpressionSyntax::Kind() const noexcept - { - return SyntaxKind::UnaryExpression; - } +UnaryExpressionSyntax::~UnaryExpressionSyntax() noexcept +{ + delete Operand; +} - std::vector> UnaryExpressionSyntax::Children() const noexcept - { - return { OperatorToken, Operand }; - } -} // namespace Mamba \ No newline at end of file +SyntaxKind UnaryExpressionSyntax::Kind() const noexcept +{ + return SyntaxKind::UnaryExpression; +} + +std::vector UnaryExpressionSyntax::Children() const noexcept +{ + return { OperatorToken, Operand }; +} \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/UnaryExpressionSyntax.h b/src/Mamba/Code Analysis/Syntax/UnaryExpressionSyntax.h index 700b53f..fff6f19 100644 --- a/src/Mamba/Code Analysis/Syntax/UnaryExpressionSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/UnaryExpressionSyntax.h @@ -3,7 +3,6 @@ #include "ExpressionSyntax.h" #include "SyntaxToken.h" #include "SyntaxTree.h" -#include namespace Mamba { @@ -13,15 +12,17 @@ namespace Mamba using Super = ExpressionSyntax; [[nodiscard]] UnaryExpressionSyntax( - const std::shared_ptr SyntaxTree, - const std::shared_ptr OperatorToken, - const std::shared_ptr Operand + const class SyntaxTree* SyntaxTree, + const SyntaxToken* OperatorToken, + const ExpressionSyntax* Operand ) noexcept; + ~UnaryExpressionSyntax() noexcept override; + SyntaxKind Kind() const noexcept override; - std::vector> Children() const noexcept override; + std::vector Children() const noexcept override; - const std::shared_ptr OperatorToken; - const std::shared_ptr Operand; + const SyntaxToken* OperatorToken; + const ExpressionSyntax* Operand; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/VariableDeclarationSyntax.cpp b/src/Mamba/Code Analysis/Syntax/VariableDeclarationSyntax.cpp index 1687be5..3176bd1 100644 --- a/src/Mamba/Code Analysis/Syntax/VariableDeclarationSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/VariableDeclarationSyntax.cpp @@ -1,35 +1,36 @@ #include "VariableDeclarationSyntax.h" -#include "ExpressionSyntax.h" -#include "SyntaxToken.h" -#include "TypeClauseSyntax.h" +using namespace Mamba; -namespace Mamba +VariableDeclarationSyntax::VariableDeclarationSyntax( + const class SyntaxTree* SyntaxTree, + const SyntaxToken* Keyword, + const SyntaxToken* Identifier, + NullablePointer TypeClause, + const SyntaxToken* EqualsToken, + const ExpressionSyntax* Initializer +) noexcept : + Super(SyntaxTree), + Keyword(Keyword), + Identifier(Identifier), + TypeClause(TypeClause), + EqualsToken(EqualsToken), + Initializer(Initializer) { - VariableDeclarationSyntax::VariableDeclarationSyntax( - const std::shared_ptr SyntaxTree, - const std::shared_ptr Keyword, - const std::shared_ptr Identifier, - const NullableSharedPtr TypeClause, - const std::shared_ptr EqualsToken, - const std::shared_ptr Initializer - ) noexcept : - Super(SyntaxTree), - Keyword(Keyword), - Identifier(Identifier), - TypeClause(TypeClause), - EqualsToken(EqualsToken), - Initializer(Initializer) - { - } +} - SyntaxKind VariableDeclarationSyntax::Kind() const noexcept - { - return SyntaxKind::VariableDeclaration; - } +VariableDeclarationSyntax::~VariableDeclarationSyntax() noexcept +{ + delete TypeClause; + delete Initializer; +} + +SyntaxKind VariableDeclarationSyntax::Kind() const noexcept +{ + return SyntaxKind::VariableDeclaration; +} - std::vector> VariableDeclarationSyntax::Children() const noexcept - { - return { Keyword, Identifier, TypeClause, EqualsToken, Initializer }; - } -} // namespace Mamba \ No newline at end of file +std::vector VariableDeclarationSyntax::Children() const noexcept +{ + return { Keyword, Identifier, TypeClause, EqualsToken, Initializer }; +} \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/VariableDeclarationSyntax.h b/src/Mamba/Code Analysis/Syntax/VariableDeclarationSyntax.h index d50299b..9a1cd23 100644 --- a/src/Mamba/Code Analysis/Syntax/VariableDeclarationSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/VariableDeclarationSyntax.h @@ -1,8 +1,9 @@ #pragma once -#include - +#include "ExpressionSyntax.h" #include "StatementSyntax.h" +#include "SyntaxToken.h" +#include "TypeClauseSyntax.h" namespace Mamba { @@ -12,21 +13,23 @@ namespace Mamba using Super = StatementSyntax; [[nodiscard]] VariableDeclarationSyntax( - const std::shared_ptr SyntaxTree, - const std::shared_ptr Keyword, - const std::shared_ptr Identifier, - const NullableSharedPtr TypeClause, - const std::shared_ptr EqualsToken, - const std::shared_ptr Initializer + const class SyntaxTree* SyntaxTree, + const SyntaxToken* Keyword, + const SyntaxToken* Identifier, + NullablePointer TypeClause, + const SyntaxToken* EqualsToken, + const ExpressionSyntax* Initializer ) noexcept; + ~VariableDeclarationSyntax() noexcept override; + SyntaxKind Kind() const noexcept override; - std::vector> Children() const noexcept override; + std::vector Children() const noexcept override; - const std::shared_ptr Keyword; - const std::shared_ptr Identifier; - const NullableSharedPtr TypeClause; - const std::shared_ptr EqualsToken; - const std::shared_ptr Initializer; + const SyntaxToken* Keyword; + const SyntaxToken* Identifier; + NullablePointer TypeClause; + const SyntaxToken* EqualsToken; + const ExpressionSyntax* Initializer; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/WhileStatementSyntax.cpp b/src/Mamba/Code Analysis/Syntax/WhileStatementSyntax.cpp index 738a7a0..897d52e 100644 --- a/src/Mamba/Code Analysis/Syntax/WhileStatementSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/WhileStatementSyntax.cpp @@ -1,27 +1,27 @@ #include "WhileStatementSyntax.h" -#include "ExpressionSyntax.h" -#include "SyntaxToken.h" +using namespace Mamba; -namespace Mamba +WhileStatementSyntax::WhileStatementSyntax( + const class SyntaxTree* SyntaxTree, + const SyntaxToken* WhileKeyword, + const ExpressionSyntax* Condition, + const StatementSyntax* Body +) noexcept : + Super(SyntaxTree), WhileKeyword(WhileKeyword), Condition(Condition), Body(Body) { - WhileStatementSyntax::WhileStatementSyntax( - const std::shared_ptr SyntaxTree, - const std::shared_ptr WhileKeyword, - const std::shared_ptr Condition, - const std::shared_ptr Body - ) noexcept : - Super(SyntaxTree), WhileKeyword(WhileKeyword), Condition(Condition), Body(Body) - { - } +} - SyntaxKind WhileStatementSyntax::Kind() const noexcept - { - return SyntaxKind::WhileStatement; - } +SyntaxKind WhileStatementSyntax::Kind() const noexcept +{ + return SyntaxKind::WhileStatement; +} + +WhileStatementSyntax::~WhileStatementSyntax() noexcept +{ +} - std::vector> WhileStatementSyntax::Children() const noexcept - { - return { WhileKeyword, Condition, Body }; - } -} // namespace Mamba \ No newline at end of file +std::vector WhileStatementSyntax::Children() const noexcept +{ + return { WhileKeyword, Condition, Body }; +} \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/WhileStatementSyntax.h b/src/Mamba/Code Analysis/Syntax/WhileStatementSyntax.h index 42be08d..24c4279 100644 --- a/src/Mamba/Code Analysis/Syntax/WhileStatementSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/WhileStatementSyntax.h @@ -1,8 +1,8 @@ #pragma once +#include "ExpressionSyntax.h" #include "StatementSyntax.h" - -#include +#include "SyntaxToken.h" namespace Mamba { @@ -12,17 +12,19 @@ namespace Mamba using Super = StatementSyntax; [[nodiscard]] WhileStatementSyntax( - const std::shared_ptr SyntaxTree, - const std::shared_ptr WhileKeyword, - const std::shared_ptr Condition, - const std::shared_ptr Body + const class SyntaxTree* SyntaxTree, + const SyntaxToken* WhileKeyword, + const ExpressionSyntax* Condition, + const StatementSyntax* Body ) noexcept; + ~WhileStatementSyntax() noexcept override; + SyntaxKind Kind() const noexcept override; - std::vector> Children() const noexcept override; + std::vector Children() const noexcept override; - const std::shared_ptr WhileKeyword; - const std::shared_ptr Condition; - const std::shared_ptr Body; + const SyntaxToken* WhileKeyword; + const ExpressionSyntax* Condition; + const StatementSyntax* Body; }; } // namespace Mamba \ No newline at end of file From 61a516ae29aedb6078225b3fc166e8c5ba9c43dd Mon Sep 17 00:00:00 2001 From: heckerpowered <72550834+heckerpowered@users.noreply.github.com> Date: Fri, 23 Aug 2024 23:40:33 +0800 Subject: [PATCH 09/30] =?UTF-8?q?=E5=AE=8C=E6=88=90Constant=E3=80=81?= =?UTF-8?q?=E7=A7=BB=E9=99=A4Binding=E4=B8=AD=E7=9A=84=E9=83=A8=E5=88=86sh?= =?UTF-8?q?ared=5Fptr?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .clang-format | 5 +- src/Mamba/Code Analysis/Binding/Binder.cpp | 72 +-- src/Mamba/Code Analysis/Binding/Binder.h | 106 ++-- .../Code Analysis/Binding/BoundConstant.cpp | 13 +- .../Code Analysis/Binding/BoundConstant.h | 11 +- .../Code Analysis/Binding/BoundExpression.cpp | 9 +- .../Code Analysis/Binding/BoundExpression.h | 5 +- .../Code Analysis/Binding/BoundScope.cpp | 131 +++-- src/Mamba/Code Analysis/Binding/BoundScope.h | 53 +- .../Code Analysis/Binding/ConstantFolding.cpp | 87 ++- .../Code Analysis/Binding/ConstantFolding.h | 16 +- .../Code Analysis/Binding/ScopeGuard.cpp | 9 +- src/Mamba/Code Analysis/Binding/ScopeGuard.h | 6 +- src/Mamba/Code Analysis/Symbol/Symbol.cpp | 44 +- src/Mamba/Code Analysis/Symbol/Symbol.h | 7 +- .../Syntax/BlockStatementSyntax.cpp | 14 +- .../Syntax/CallExpressionSyntax.cpp | 14 +- .../Syntax/CompilationUnitSyntax.cpp | 14 +- src/Mamba/Code Analysis/Syntax/Constant.h | 320 ++++++++++- src/Mamba/Code Analysis/Syntax/Lexer.cpp | 527 +++++++++--------- src/Mamba/Code Analysis/Syntax/Parser.cpp | 29 +- .../Syntax/SeperatedSyntaxList.h | 16 +- src/Mamba/Code Analysis/Syntax/SyntaxNode.h | 4 +- src/Mamba/Code Analysis/Text/SourceText.h | 2 +- 24 files changed, 883 insertions(+), 631 deletions(-) diff --git a/.clang-format b/.clang-format index d161ac7..2d8645f 100644 --- a/.clang-format +++ b/.clang-format @@ -67,13 +67,14 @@ BraceWrapping: AfterClass: true AfterControlStatement: Always AfterEnum: true + AfterFunction: true AfterNamespace: true AfterStruct: true AfterExternBlock: true BeforeCatch: true BeforeElse: true BeforeLambdaBody: false - IndentBraces: true + IndentBraces: false SplitEmptyFunction: true SplitEmptyRecord: true SplitEmptyNamespace: true @@ -82,7 +83,7 @@ BreakAdjacentStringLiterals: true BreakAfterAttributes: Leave # BreakAfterReturnType: Automatic BreakBeforeBinaryOperators: None -BreakBeforeBraces: Allman +BreakBeforeBraces: Custom BreakBeforeConceptDeclarations: Allowed BreakBeforeInlineASMColon: OnlyMultiline BreakBeforeTernaryOperators: true diff --git a/src/Mamba/Code Analysis/Binding/Binder.cpp b/src/Mamba/Code Analysis/Binding/Binder.cpp index 6b6aad9..1f126f1 100644 --- a/src/Mamba/Code Analysis/Binding/Binder.cpp +++ b/src/Mamba/Code Analysis/Binding/Binder.cpp @@ -1,70 +1,8 @@ #include "Binder.h" -#include -#include - -#include - -#include "AssignmentExpressionSyntax.h" -#include "BinaryExpressionSyntax.h" -#include "BlockStatementSyntax.h" -#include "BoundAssignmentExpression.h" -#include "BoundBinaryExpression.h" -#include "BoundBinaryOperator.h" -#include "BoundBlockStatement.h" -#include "BoundCallExpression.h" -#include "BoundCompilationUnit.h" -#include "BoundCompoundAssignmentExpression.h" -#include "BoundConstant.h" -#include "BoundDoWhileStatement.h" -#include "BoundExpression.h" -#include "BoundExpressionStatement.h" -#include "BoundForStatement.h" -#include "BoundFunctionDeclaration.h" -#include "BoundIfStatement.h" -#include "BoundLiteralExpression.h" -#include "BoundNodeKind.h" -#include "BoundReturnStatement.h" -#include "BoundScope.h" -#include "BoundStatement.h" -#include "BoundUnaryExpression.h" -#include "BoundUnaryOperator.h" -#include "BoundVariableDeclaration.h" -#include "BoundVariableExpression.h" -#include "BoundWhileStatement.h" -#include "BreakStatementSyntax.h" -#include "CallExpressionSyntax.h" -#include "CompilationUnitSyntax.h" -#include "ContinueStatementSyntax.h" -#include "DoWhileStatementSyntax.h" -#include "ElseClauseSyntax.h" -#include "ExpressionStatementSyntax.h" -#include "ExpressionSyntax.h" -#include "ForStatementSyntax.h" -#include "FunctionDeclarationSyntax.h" -#include "FunctionSymbol.h" -#include "IfStatementSyntax.h" -#include "LiteralExpressionSyntax.h" -#include "MambaCore.h" -#include "NameExpressionSyntax.h" -#include "ParameterSymbol.h" -#include "ParameterSyntax.h" -#include "ParenthesizedExpressionSyntax.h" -#include "ReturnStatementSyntax.h" -#include "StatementSyntax.h" -#include "Symbol.h" -#include "SyntaxFacts.h" -#include "SyntaxKind.h" -#include "SyntaxTree.h" -#include "TypeClauseSyntax.h" -#include "TypeSymbol.h" -#include "UnaryExpressionSyntax.h" -#include "VariableDeclarationSyntax.h" -#include "WhileStatementSyntax.h" - using namespace Mamba; -std::shared_ptr Binder::BindCompilationUnit() noexcept +BoundCompilationUnit* Binder::BindCompilationUnit() noexcept { const auto Root = SyntaxTree->Root(); for (auto&& Member : Root->Members) @@ -72,7 +10,7 @@ std::shared_ptr Binder::BindCompilationUnit() noexce BindMember(Member); } - return std::make_shared(Root, Scope); + return new BoundCompilationUnit(Root, Scope); } void Binder::BindMember(const std::shared_ptr Member) noexcept @@ -122,8 +60,7 @@ std::vector> Binder::BindParameter( ParameterSymbols.reserve(Parameters.size()); auto Index = 0; - for (auto&& Parameter : Parameters | std::views::transform([](auto&& Node) - { return std::dynamic_pointer_cast(Node); })) + for (auto&& Parameter : Parameters | std::views::transform([](auto&& Node) { return std::dynamic_pointer_cast(Node); })) { ++Index; @@ -195,8 +132,7 @@ std::shared_ptr Binder::BindBlockStatement(const std::shar for (auto&& Statement : BlockStatement->Statements) { - BoundStatements.emplace_back(Hatcher([&] - { return BindStatement(Statement); })); + BoundStatements.emplace_back(Hatcher([&] { return BindStatement(Statement); })); } return std::make_shared(BlockStatement, BoundStatements); diff --git a/src/Mamba/Code Analysis/Binding/Binder.h b/src/Mamba/Code Analysis/Binding/Binder.h index 0f6c8e3..9c5ca03 100644 --- a/src/Mamba/Code Analysis/Binding/Binder.h +++ b/src/Mamba/Code Analysis/Binding/Binder.h @@ -1,58 +1,88 @@ #pragma once +#include "AssignmentExpressionSyntax.h" +#include "BinaryExpressionSyntax.h" +#include "BoundAssignmentExpression.h" +#include "BoundBinaryExpression.h" +#include "BoundBlockStatement.h" +#include "BoundCallExpression.h" +#include "BoundCompilationUnit.h" +#include "BoundDoWhileStatement.h" +#include "BoundExpression.h" +#include "BoundExpressionStatement.h" +#include "BoundForStatement.h" +#include "BoundFunctionDeclaration.h" +#include "BoundIfStatement.h" +#include "BoundLiteralExpression.h" +#include "BoundReturnStatement.h" +#include "BoundScope.h" +#include "BoundStatement.h" +#include "BoundUnaryExpression.h" +#include "BoundVariableDeclaration.h" +#include "BoundVariableExpression.h" +#include "BoundWhileStatement.h" +#include "CallExpressionSyntax.h" +#include "Constant.h" +#include "ContinueStatementSyntax.h" #include "DiagnosticBag.h" +#include "DoWhileStatementSyntax.h" +#include "ExpressionStatementSyntax.h" +#include "ForStatementSyntax.h" +#include "FunctionDeclarationSyntax.h" +#include "IfStatementSyntax.h" +#include "LiteralExpressionSyntax.h" #include "MambaCore.h" +#include "NameExpressionSyntax.h" +#include "ParenthesizedExpressionSyntax.h" +#include "ReturnStatementSyntax.h" #include "ScopeGuard.h" -#include +#include "SyntaxTree.h" +#include "UnaryExpressionSyntax.h" +#include "VariableDeclarationSyntax.h" +#include "WhileStatementSyntax.h" + #include namespace Mamba { class Binder { - std::shared_ptr Scope; - std::shared_ptr SyntaxTree; + BoundScope* Scope; + const class SyntaxTree* SyntaxTree; DiagnosticBag Diagnostics; - void BindMember(const std::shared_ptr Member) noexcept; - void BindFunctionDeclaration(const std::shared_ptr FunctionDeclaration) noexcept; + void BindMember(const MemberSyntax* Member) noexcept; + void BindFunctionDeclaration(const FunctionDeclarationSyntax* FunctionDeclaration) noexcept; void DeclareFunction( - const std::shared_ptr FunctionDeclaration, - const std::shared_ptr BoundFunctionDeclaration + const FunctionDeclarationSyntax* FunctionDeclaration, + const BoundFunctionDeclaration* BoundFunctionDeclaration ) noexcept; - std::vector> BindParameter( - const std::shared_ptr FunctionDeclaration - ) noexcept; + VariableSymbol* BindVariableDeclaration(const SyntaxToken* Identifier, bool IsReadOnly, const TypeSymbol* Type, Constant Constant) noexcept; + std::vector BindParameter(const FunctionDeclarationSyntax* FunctionDeclaration) noexcept; - std::shared_ptr BindStatement(const std::shared_ptr Statement) noexcept; - std::shared_ptr BindStatementInternal(const std::shared_ptr Statement) noexcept; - std::shared_ptr BindBlockStatement(const std::shared_ptr BlockStatement) noexcept; - std::shared_ptr BindExpressionStatement(const std::shared_ptr ExpressionStatement) noexcept; - std::shared_ptr BindExpression(const std::shared_ptr Expression) noexcept; - std::shared_ptr BindVariableDeclaration(const std::shared_ptr VariableDeclaration) noexcept; - std::shared_ptr BindVariableDeclaration( - const SyntaxToken* Identifier, - const bool IsReadOnly, - const std::shared_ptr Type, - const NullableSharedPtr Constant - ) noexcept; - std::shared_ptr BindIfStatement(const std::shared_ptr IfStatement) noexcept; - std::shared_ptr BindWhileStatement(const std::shared_ptr WhileStatement) noexcept; - std::shared_ptr BindDoWhileStatement(const std::shared_ptr DoWhileStatement) noexcept; - std::shared_ptr BindForStatement(const std::shared_ptr ForStatement) noexcept; - std::shared_ptr BindBreakStatement(const std::shared_ptr BreakStatement) noexcept; - std::shared_ptr BindContinueStatement(const std::shared_ptr ContinueStatement) noexcept; - std::shared_ptr BindReturnStatement(const std::shared_ptr ReturnStatement) noexcept; - std::shared_ptr BindLiteralExpression(const std::shared_ptr LiteralExpression) noexcept; - std::shared_ptr BindNameExpression(const std::shared_ptr NameExpression) noexcept; - std::shared_ptr BindParenthesizedExpression(const std::shared_ptr ParenthesizedExpression) noexcept; - std::shared_ptr BindUnaryExpression(const std::shared_ptr UnaryExpression) noexcept; - std::shared_ptr BindBinaryExpression(const std::shared_ptr BinaryExpression) noexcept; - std::shared_ptr BindAssignmentExpression(const std::shared_ptr AssignmentExpression) noexcept; - std::shared_ptr BindCallExpression(const std::shared_ptr CallExpression) noexcept; - NullableSharedPtr BindTypeClause(const NullableSharedPtr TypeClause) noexcept; + BoundStatement* BindBreakStatement(const std::shared_ptr BreakStatement) noexcept; + BoundExpression* BindParenthesizedExpression(const ParenthesizedExpressionSyntax* ParenthesizedExpression) noexcept; + BoundAssignmentExpression* BindAssignmentExpression(const AssignmentExpressionSyntax* AssignmentExpression) noexcept; + BoundExpressionStatement* BindExpressionStatement(const ExpressionStatementSyntax* ExpressionStatement) noexcept; + BoundVariableDeclaration* BindVariableDeclaration(const VariableDeclarationSyntax* VariableDeclaration) noexcept; + NullablePointer BindTypeClause(NullablePointer TypeClause) noexcept; + BoundLiteralExpression* BindLiteralExpression(const LiteralExpressionSyntax* LiteralExpression) noexcept; + BoundDoWhileStatement* BindDoWhileStatement(const DoWhileStatementSyntax* DoWhileStatement) noexcept; + BoundBinaryExpression* BindBinaryExpression(const BinaryExpressionSyntax* BinaryExpression) noexcept; + BoundUnaryExpression* BindUnaryExpression(const UnaryExpressionSyntax* UnaryExpression) noexcept; + BoundReturnStatement* BindReturnStatement(const ReturnStatementSyntax* ReturnStatement) noexcept; + BoundVariableExpression* BindNameExpression(const NameExpressionSyntax* NameExpression) noexcept; + BoundStatement* BindContinueStatement(const ContinueStatementSyntax* ContinueStatement) noexcept; + BoundBlockStatement* BindBlockStatement(const BlockStatementSyntax* BlockStatement) noexcept; + BoundWhileStatement* BindWhileStatement(const WhileStatementSyntax* WhileStatement) noexcept; + BoundCallExpression* BindCallExpression(const CallExpressionSyntax* CallExpression) noexcept; + BoundForStatement* BindForStatement(const ForStatementSyntax* ForStatement) noexcept; + BoundStatement* BindStatementInternal(const StatementSyntax* Statement) noexcept; + BoundIfStatement* BindIfStatement(const IfStatementSyntax* IfStatement) noexcept; + BoundExpression* BindExpression(const ExpressionSyntax* Expression) noexcept; + BoundStatement* BindStatement(const StatementSyntax* Statement) noexcept; ScopeGuard EnterScope() noexcept; @@ -62,6 +92,6 @@ namespace Mamba public: [[nodiscard]] Binder(const class SyntaxTree* SyntaxTree) noexcept; - std::shared_ptr BindCompilationUnit() noexcept; + BoundCompilationUnit* BindCompilationUnit() noexcept; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Binding/BoundConstant.cpp b/src/Mamba/Code Analysis/Binding/BoundConstant.cpp index 42d9056..9661270 100644 --- a/src/Mamba/Code Analysis/Binding/BoundConstant.cpp +++ b/src/Mamba/Code Analysis/Binding/BoundConstant.cpp @@ -1,12 +1,13 @@ #include "BoundConstant.h" -#include "Literal.h" - using namespace Mamba; -BoundConstant::BoundConstant(const std::shared_ptr Value) noexcept : Value(Value) {} +BoundConstant::BoundConstant(struct Constant Constant) noexcept : + PrivateConstant(Constant) +{ +} -const LiteralValue* BoundConstant::operator->() const noexcept +Constant BoundConstant::Constant() noexcept { - return &Value->Value; -} \ No newline at end of file + return PrivateConstant +} diff --git a/src/Mamba/Code Analysis/Binding/BoundConstant.h b/src/Mamba/Code Analysis/Binding/BoundConstant.h index ea89fca..6e24632 100644 --- a/src/Mamba/Code Analysis/Binding/BoundConstant.h +++ b/src/Mamba/Code Analysis/Binding/BoundConstant.h @@ -1,17 +1,16 @@ #pragma once -#include "Literal.h" -#include +#include "Constant.h" namespace Mamba { class BoundConstant { - public: - [[nodiscard]] BoundConstant(const std::shared_ptr Value) noexcept; + Constant PrivateConstant; - const std::shared_ptr Value; + public: + [[nodiscard]] BoundConstant(struct Constant Constant) noexcept; - const Literal* operator->() const noexcept; + Constant Constant() noexcept; }; }; // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Binding/BoundExpression.cpp b/src/Mamba/Code Analysis/Binding/BoundExpression.cpp index 854ee1f..c7d783c 100644 --- a/src/Mamba/Code Analysis/Binding/BoundExpression.cpp +++ b/src/Mamba/Code Analysis/Binding/BoundExpression.cpp @@ -1,12 +1,11 @@ #include "BoundExpression.h" -#include "BoundConstant.h" - using namespace Mamba; -BoundExpression::BoundExpression(const std::shared_ptr Syntax) noexcept : Super(Syntax) {} +BoundExpression::BoundExpression(const std::shared_ptr Syntax) noexcept : + Super(Syntax) {} -NullableSharedPtr BoundExpression::ConstantValue() const noexcept +Constant BoundExpression::ConstantValue() const noexcept { - return nullptr; + return {}; } \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Binding/BoundExpression.h b/src/Mamba/Code Analysis/Binding/BoundExpression.h index d9d0969..48a3b43 100644 --- a/src/Mamba/Code Analysis/Binding/BoundExpression.h +++ b/src/Mamba/Code Analysis/Binding/BoundExpression.h @@ -2,9 +2,8 @@ #include -#include "MambaCore.h" - #include "BoundNode.h" +#include "Constant.h" namespace Mamba { @@ -16,6 +15,6 @@ namespace Mamba [[nodiscard]] BoundExpression(const std::shared_ptr Syntax) noexcept; virtual std::shared_ptr Type() const noexcept = 0; - virtual NullableSharedPtr ConstantValue() const noexcept; + virtual Constant ConstantValue() const noexcept; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Binding/BoundScope.cpp b/src/Mamba/Code Analysis/Binding/BoundScope.cpp index d42bf30..a494a07 100644 --- a/src/Mamba/Code Analysis/Binding/BoundScope.cpp +++ b/src/Mamba/Code Analysis/Binding/BoundScope.cpp @@ -1,124 +1,117 @@ #include "BoundScope.h" -#include -#include - -#include "fast_io.h" -#include "fast_io_core_impl/codecvt/general.h" -#include "fast_io_core_impl/integers/impl.h" -#include "FunctionSymbol.h" -#include "ParameterSymbol.h" -#include "TypeSymbol.h" - using namespace Mamba; -BoundScope::BoundScope(const NullableSharedPtr Parent) noexcept : +BoundScope::BoundScope(NullablePointer Parent) noexcept : Parent(Parent) {} -void BoundScope::Declare(const std::shared_ptr Symbol) noexcept +BoundScope::~BoundScope() noexcept +{ + for (auto Child : Children) + { + delete Child; + } +} + +void BoundScope::Declare(const Symbol* Symbol) noexcept { - Symbols[*Symbol->Name].emplace_back(Symbol); + Symbols[Symbol->Name()].emplace_back(Symbol); } -std::shared_ptr BoundScope::DeclareScope() noexcept +BoundScope* BoundScope::DeclareScope() noexcept { - const auto ChildScope = std::make_shared(shared_from_this()); + const auto ChildScope = new BoundScope(this); Children.emplace_back(ChildScope); return ChildScope; } -std::vector> BoundScope::LookupVariable(const std::shared_ptr Name -) const noexcept +std::vector BoundScope::LookupVariable(StringView Name) const noexcept { - return Lookup(Name) | std::views::filter([](auto Symbol) - { return Symbol->IsVariable(); }) | - std::views::transform([](auto Symbol) - { return std::static_pointer_cast(Symbol); }) | + return Lookup(Name) | + std::views::filter([](auto Symbol) { return Symbol->IsVariable(); }) | + std::views::transform([](auto Symbol) { return static_cast(Symbol); }) | std::ranges::to(); } -std::vector> BoundScope::LookupFunction(const std::shared_ptr Name -) const noexcept +std::vector BoundScope::LookupFunction(StringView Name) const noexcept { - return Lookup(Name) | std::views::filter([&](auto Symbol) - { return Symbol->IsFunction(); }) | - std::views::transform([](auto Symbol) - { return std::static_pointer_cast(Symbol); }) | + return Lookup(Name) | + std::views::filter([&](auto Symbol) { return Symbol->IsFunction(); }) | + std::views::transform([](auto Symbol) { return static_cast(Symbol); }) | std::ranges::to(); } -std::vector> BoundScope::LookupType(const std::shared_ptr Name -) const noexcept +std::vector BoundScope::LookupType(StringView Name) const noexcept { - return Lookup(Name) | std::views::filter([](auto Symbol) - { return Symbol->IsType(); }) | - std::views::transform([](auto Symbol) - { return std::static_pointer_cast(Symbol); }) | + return Lookup(Name) | + std::views::filter([](auto Symbol) { return Symbol->IsType(); }) | + std::views::transform([](auto Symbol) { return static_cast(Symbol); }) | std::ranges::to(); } -std::vector> - BoundScope::LookupParameter(const std::shared_ptr Name) const noexcept +std::vector BoundScope::LookupParameter(StringView Name) const noexcept { - return Lookup(Name) | std::views::filter([](auto Symbol) - { return Symbol->IsParameter(); }) | - std::views::transform([](auto Symbol) - { return std::static_pointer_cast(Symbol); }) | + return Lookup(Name) | + std::views::filter([](auto Symbol) { return Symbol->IsParameter(); }) | + std::views::transform([](auto Symbol) { return static_cast(Symbol); }) | std::ranges::to(); } -std::vector> BoundScope::Lookup(const std::shared_ptr Name) const noexcept +std::vector BoundScope::Lookup(StringView Name) const noexcept { - const auto Result = Symbols.find(*Name); - if (Result != Symbols.end()) + const auto Result = Symbols.find(Name); + if (Result != Symbols.end()) [[unlikely]] { return Result->second; } - return Parent ? Parent->Lookup(Name) : std::vector>{}; + return Parent ? Parent->Lookup(Name) : std::vector{}; } -std::vector> BoundScope::DeclaredVariables() const noexcept +std::vector BoundScope::DeclaredVariables() const noexcept { - return Symbols | std::views::values | std::views::join | - std::views::filter([](auto Symbol) - { return Symbol->IsVariable(); }) | - std::views::transform([](auto Symbol) - { return std::static_pointer_cast(Symbol); }) | + return Symbols | + std::views::values | + std::views::join | + std::views::filter([](auto Symbol) { return Symbol->IsVariable(); }) | + std::views::transform([](auto Symbol) { return static_cast(Symbol); }) | std::ranges::to(); } -std::vector> BoundScope::DeclaredFunctions() const noexcept +std::vector BoundScope::DeclaredFunctions() const noexcept { - return Symbols | std::views::values | std::views::join | - std::views::filter([](auto Symbol) - { return Symbol->IsFunction(); }) | - std::views::transform([](auto Symbol) - { return std::static_pointer_cast(Symbol); }) | + return Symbols | + std::views::values | + std::views::join | + std::views::filter([](auto Symbol) { return Symbol->IsFunction(); }) | + std::views::transform([](auto Symbol) { return static_cast(Symbol); }) | std::ranges::to(); } -std::vector> BoundScope::DeclaredTypes() const noexcept +std::vector BoundScope::DeclaredTypes() const noexcept { - return Symbols | std::views::values | std::views::join | - std::views::filter([](auto Symbol) - { return Symbol->IsType(); }) | - std::views::transform([](auto Symbol) - { return std::static_pointer_cast(Symbol); }) | + return Symbols | + std::views::values | + std::views::join | + std::views::filter([](auto Symbol) { return Symbol->IsType(); }) | + std::views::transform([](auto Symbol) { return static_cast(Symbol); }) | std::ranges::to(); } -std::vector> BoundScope::DeclaredParameters() const noexcept +std::vector BoundScope::DeclaredParameters() const noexcept { - return Symbols | std::views::values | std::views::join | - std::views::filter([](auto Symbol) - { return Symbol->IsParameter(); }) | - std::views::transform([](auto Symbol) - { return std::static_pointer_cast(Symbol); }) | + return Symbols | + std::views::values | + std::views::join | + std::views::filter([](auto Symbol) { return Symbol->IsParameter(); }) | + std::views::transform([](auto Symbol) { return static_cast(Symbol); }) | std::ranges::to(); } -std::vector> BoundScope::DeclaredSymbols() const noexcept +std::vector BoundScope::DeclaredSymbols() const noexcept { - return Symbols | std::views::values | std::views::join | std::ranges::to(); + return Symbols | + std::views::values | + std::views::join | + std::ranges::to(); } diff --git a/src/Mamba/Code Analysis/Binding/BoundScope.h b/src/Mamba/Code Analysis/Binding/BoundScope.h index a6bbef2..4f7e61b 100644 --- a/src/Mamba/Code Analysis/Binding/BoundScope.h +++ b/src/Mamba/Code Analysis/Binding/BoundScope.h @@ -1,10 +1,14 @@ #pragma once -#include #include #include +#include "FunctionSymbol.h" #include "MambaCore.h" +#include "ParameterSymbol.h" +#include "Symbol.h" +#include "TypeSymbol.h" +#include "VariableSymbol.h" namespace Mamba { @@ -12,33 +16,30 @@ namespace Mamba // Function symbols with the same name form an overload set. However, when the multi non-function symbols with the // same name were found during name lookup, the name is ambiguous and the program is ill-formed, diagnostics are // required. - class BoundScope : public std::enable_shared_from_this + class BoundScope { - std::unordered_map>> Symbols; + std::unordered_map> Symbols; public: - [[nodiscard]] BoundScope(const NullableSharedPtr Parent) noexcept; - - void Declare(const std::shared_ptr Symbol) noexcept; - std::shared_ptr DeclareScope() noexcept; - - std::vector> LookupVariable(const std::shared_ptr Name) const noexcept; - std::vector> LookupFunction(const std::shared_ptr Name - ) const noexcept; - std::vector> LookupType(const std::shared_ptr Name - ) const noexcept; - std::vector> LookupParameter(const std::shared_ptr Name - ) const noexcept; - std::vector> Lookup(const std::shared_ptr Name - ) const noexcept; - - std::vector> DeclaredVariables() const noexcept; - std::vector> DeclaredFunctions() const noexcept; - std::vector> DeclaredTypes() const noexcept; - std::vector> DeclaredParameters() const noexcept; - std::vector> DeclaredSymbols() const noexcept; - - NullableSharedPtr Parent; - std::vector> Children; + [[nodiscard]] BoundScope(NullablePointer Parent) noexcept; + ~BoundScope() noexcept; + + void Declare(const Symbol* Symbol) noexcept; + BoundScope* DeclareScope() noexcept; + + std::vector LookupVariable(StringView Name) const noexcept; + std::vector LookupFunction(StringView Name) const noexcept; + std::vector LookupType(StringView Name) const noexcept; + std::vector LookupParameter(StringView Name) const noexcept; + std::vector Lookup(const StringView) const noexcept; + + std::vector DeclaredVariables() const noexcept; + std::vector DeclaredFunctions() const noexcept; + std::vector DeclaredTypes() const noexcept; + std::vector DeclaredParameters() const noexcept; + std::vector DeclaredSymbols() const noexcept; + + NullablePointer Parent; + std::vector Children; }; }; // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Binding/ConstantFolding.cpp b/src/Mamba/Code Analysis/Binding/ConstantFolding.cpp index c3cdbd7..1f062a4 100644 --- a/src/Mamba/Code Analysis/Binding/ConstantFolding.cpp +++ b/src/Mamba/Code Analysis/Binding/ConstantFolding.cpp @@ -1,18 +1,13 @@ #include "ConstantFolding.h" -#include "BoundBinaryOperatorKind.h" -#include "BoundConstant.h" -#include "Literal.h" -#include "TypeSymbol.h" - using namespace Mamba; -NullableSharedPtr ConstantFolding::Fold( +Constant ConstantFolding::Fold( const BoundUnaryOperator& Operator, - const std::shared_ptr Operand + const BoundExpression* Operand ) { - if (!Operand->ConstantValue()) + if (!Operand->ConstantValue().IsValid()) { return {}; } @@ -22,20 +17,20 @@ NullableSharedPtr ConstantFolding::Fold( case BoundUnaryOperatorKind::Identity: return Operand->ConstantValue(); case BoundUnaryOperatorKind::Negation: - return std::make_shared(Literal::Negative(*Operand->ConstantValue()->Value)); + return -Operand->ConstantValue(); case BoundUnaryOperatorKind::LogicalNegation: - return std::make_shared(Literal::LogicalNegative(*Operand->ConstantValue()->Value)); + return !Operand->ConstantValue(); case BoundUnaryOperatorKind::OnesComplement: - return std::make_shared(Literal::OnesComplement(*Operand->ConstantValue()->Value)); + return ~Operand->ConstantValue(); default: return {}; } } -NullableSharedPtr ConstantFolding::Fold( - const std::shared_ptr& Left, +Constant ConstantFolding::Fold( + const BoundExpression* Left, const BoundBinaryOperator& Operator, - const std::shared_ptr Right + const BoundExpression* Right ) noexcept { const auto LeftConstant = Left->ConstantValue(); @@ -46,80 +41,60 @@ NullableSharedPtr ConstantFolding::Fold( if (Operator.Kind == BoundBinaryOperatorKind::LogicalAnd) { - if ((LeftConstant && !(*LeftConstant)->BooleanValue) // Wrap - || (RightConstant && !(*RightConstant)->BooleanValue)) + if ((LeftConstant.IsValid() && !LeftConstant.Get()) || + (RightConstant.IsValid() && !RightConstant.Get())) { - return std::make_shared(std::make_shared(false)); + return false; } } if (Operator.Kind == BoundBinaryOperatorKind::LogicalOr) { - if ((LeftConstant && (*LeftConstant)->BooleanValue) // Wrap - || (RightConstant && (*RightConstant)->BooleanValue)) + if ((LeftConstant.IsValid() && LeftConstant.Get()) || + (RightConstant.IsValid() && RightConstant.Get())) { - return std::make_shared(std::make_shared(true)); + return true; } } - if (!LeftConstant || !RightConstant) + if (!LeftConstant.IsValid() || !RightConstant.IsValid()) { return {}; } - const auto LeftValue = LeftConstant->Value; - const auto RightValue = RightConstant->Value; - switch (Operator.Kind) { case BoundBinaryOperatorKind::Addition: - if (Left->Type() == TypeSymbol::Int || Left->Type() == TypeSymbol::String) - { - return std::make_shared(*LeftValue + *RightValue); - } - [[fallthrough]]; + return LeftConstant + RightConstant; case BoundBinaryOperatorKind::Subtraction: - if (Left->Type() == TypeSymbol::Int) - { - return std::make_shared(*LeftValue - *RightValue); - } - [[fallthrough]]; + return LeftConstant - RightConstant; case BoundBinaryOperatorKind::Multiplication: - if (Left->Type() == TypeSymbol::Int) - { - return std::make_shared(*LeftValue * *RightValue); - } - [[fallthrough]]; + return LeftConstant * RightConstant; case BoundBinaryOperatorKind::Division: - if (Left->Type() == TypeSymbol::Int) - { - return std::make_shared(*LeftValue / *RightValue); - } - [[fallthrough]]; + return LeftConstant / RightConstant; case BoundBinaryOperatorKind::LogicalAnd: - return std::make_shared(*LeftValue && *RightValue); + return LeftConstant && RightConstant; case BoundBinaryOperatorKind::LogicalOr: - return std::make_shared(*LeftValue || *RightValue); + return LeftConstant || RightConstant; case BoundBinaryOperatorKind::BitwiseAnd: - return std::make_shared(*LeftValue & *RightValue); + return LeftConstant & RightConstant; case BoundBinaryOperatorKind::BitwiseOr: - return std::make_shared(*LeftValue | *RightValue); + return LeftConstant | RightConstant; case BoundBinaryOperatorKind::BitwiseXor: - return std::make_shared(*LeftValue ^ *RightValue); + return LeftConstant ^ RightConstant; case BoundBinaryOperatorKind::Equals: - return std::make_shared(*LeftValue == *RightValue); + return LeftConstant == RightConstant; case BoundBinaryOperatorKind::NotEquals: - return std::make_shared(*LeftValue != *RightValue); + return LeftConstant != RightConstant; case BoundBinaryOperatorKind::Less: - return std::make_shared(*LeftValue < *RightValue); + return LeftConstant < RightConstant; case BoundBinaryOperatorKind::LessOrEquals: - return std::make_shared(*LeftValue <= *RightValue); + return LeftConstant <= RightConstant; case BoundBinaryOperatorKind::Greater: - return std::make_shared(*LeftValue > *RightValue); + return LeftConstant > RightConstant; case BoundBinaryOperatorKind::GreaterOrEquals: - return std::make_shared(*LeftValue >= *RightValue); + return LeftConstant >= RightConstant; } - std::unreachable(); return {}; } \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Binding/ConstantFolding.h b/src/Mamba/Code Analysis/Binding/ConstantFolding.h index 0ac0cff..dade475 100644 --- a/src/Mamba/Code Analysis/Binding/ConstantFolding.h +++ b/src/Mamba/Code Analysis/Binding/ConstantFolding.h @@ -1,10 +1,6 @@ #pragma once -#include - #include "BoundBinaryOperator.h" -#include "MambaCore.h" - #include "BoundExpression.h" #include "BoundUnaryOperator.h" @@ -16,13 +12,15 @@ namespace Mamba ~ConstantFolding() = delete; public: - static NullableSharedPtr - Fold(const BoundUnaryOperator& Operator, const std::shared_ptr Operand); + static Constant Fold( + const BoundUnaryOperator& Operator, + const BoundExpression* Operand + ); - static NullableSharedPtr Fold( - const std::shared_ptr& Left, + static Constant Fold( + const BoundExpression* Left, const BoundBinaryOperator& Operator, - const std::shared_ptr Right + const BoundExpression* Right ) noexcept; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Binding/ScopeGuard.cpp b/src/Mamba/Code Analysis/Binding/ScopeGuard.cpp index a230dbe..2abdffd 100644 --- a/src/Mamba/Code Analysis/Binding/ScopeGuard.cpp +++ b/src/Mamba/Code Analysis/Binding/ScopeGuard.cpp @@ -1,10 +1,8 @@ #include "ScopeGuard.h" -#include "BoundScope.h" - using namespace Mamba; -ScopeGuard::ScopeGuard(std::shared_ptr& Scope) noexcept : +ScopeGuard::ScopeGuard(BoundScope*& Scope) noexcept : Scope(Scope), Leaved() { Scope = Scope->DeclareScope(); @@ -24,6 +22,9 @@ void ScopeGuard::PreLeave() noexcept { // The parent of the scope is constructed in the constructor, // which is guaranteed to be non-const here. - Scope = std::const_pointer_cast(Scope->Parent); + auto PreviousScope = Scope->Parent; + Scope = const_cast(Scope->Parent); + delete PreviousScope; + Leaved = true; } diff --git a/src/Mamba/Code Analysis/Binding/ScopeGuard.h b/src/Mamba/Code Analysis/Binding/ScopeGuard.h index 4b1516a..bf674e4 100644 --- a/src/Mamba/Code Analysis/Binding/ScopeGuard.h +++ b/src/Mamba/Code Analysis/Binding/ScopeGuard.h @@ -1,17 +1,17 @@ #pragma once -#include +#include "BoundScope.h" namespace Mamba { // Creates a scope from the current scope and enters it on construction, and exits it on destruction. class ScopeGuard { - std::shared_ptr& Scope; + BoundScope*& Scope; bool Leaved : 1; public: - [[nodiscard]] ScopeGuard(std::shared_ptr& Scope) noexcept; + [[nodiscard]] ScopeGuard(BoundScope*& Scope) noexcept; ~ScopeGuard() noexcept; void PreLeave() noexcept; diff --git a/src/Mamba/Code Analysis/Symbol/Symbol.cpp b/src/Mamba/Code Analysis/Symbol/Symbol.cpp index 38d866f..f41870a 100644 --- a/src/Mamba/Code Analysis/Symbol/Symbol.cpp +++ b/src/Mamba/Code Analysis/Symbol/Symbol.cpp @@ -1,27 +1,31 @@ #include "Symbol.h" -#include "SymbolKind.h" -namespace Mamba +using namespace Mamba; + +Symbol::Symbol(StringView Name) noexcept : + PrivateName(Name) {} + +StringView Symbol::Name() const noexcept { - Symbol::Symbol(const std::shared_ptr Name) noexcept : Name(Name) {} + return PrivateName; +} - bool Symbol::IsFunction() const noexcept - { - return Kind() == SymbolKind::Function; - } +bool Symbol::IsFunction() const noexcept +{ + return Kind() == SymbolKind::Function; +} - bool Symbol::IsVariable() const noexcept - { - return Kind() == SymbolKind::Variable; - } +bool Symbol::IsVariable() const noexcept +{ + return Kind() == SymbolKind::Variable; +} - bool Symbol::IsParameter() const noexcept - { - return Kind() == SymbolKind::Parameter; - } +bool Symbol::IsParameter() const noexcept +{ + return Kind() == SymbolKind::Parameter; +} - bool Symbol::IsType() const noexcept - { - return Kind() == SymbolKind::Type; - } -} // namespace Mamba \ No newline at end of file +bool Symbol::IsType() const noexcept +{ + return Kind() == SymbolKind::Type; +} \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Symbol/Symbol.h b/src/Mamba/Code Analysis/Symbol/Symbol.h index e275138..c2c9cbe 100644 --- a/src/Mamba/Code Analysis/Symbol/Symbol.h +++ b/src/Mamba/Code Analysis/Symbol/Symbol.h @@ -8,13 +8,14 @@ namespace Mamba { class Symbol { + StringView PrivateName; + protected: - [[nodiscard]] Symbol(const std::shared_ptr Name) noexcept; + [[nodiscard]] Symbol(StringView Name) noexcept; virtual ~Symbol() = default; public: - const std::shared_ptr Name; - + [[nodiscard]] StringView Name() const noexcept; [[nodiscard]] virtual SymbolKind Kind() const noexcept = 0; [[nodiscard]] bool IsFunction() const noexcept; [[nodiscard]] bool IsVariable() const noexcept; diff --git a/src/Mamba/Code Analysis/Syntax/BlockStatementSyntax.cpp b/src/Mamba/Code Analysis/Syntax/BlockStatementSyntax.cpp index 5f77261..4a4ec36 100644 --- a/src/Mamba/Code Analysis/Syntax/BlockStatementSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/BlockStatementSyntax.cpp @@ -18,9 +18,9 @@ BlockStatementSyntax::BlockStatementSyntax( BlockStatementSyntax::~BlockStatementSyntax() noexcept { for (auto&& Statement : Statements) - { - delete Statement; - } + { + delete Statement; + } } SyntaxKind BlockStatementSyntax::Kind() const noexcept @@ -35,13 +35,13 @@ std::vector BlockStatementSyntax::Children() const noexcept Result.emplace_back(OpenBraceToken); -#if defined(__cpp_lib_containers_ranges) && __cpp_lib_containers_ranges >= 202202L +#if __cpp_lib_containers_ranges >= 202202L Result.append_range(Statements); #else for (auto Statement : Statements) - { - Result.emplace_back(Statement); - } + { + Result.emplace_back(Statement); + } #endif Result.emplace_back(CloseBraceToken); diff --git a/src/Mamba/Code Analysis/Syntax/CallExpressionSyntax.cpp b/src/Mamba/Code Analysis/Syntax/CallExpressionSyntax.cpp index 7d29976..bd2d467 100644 --- a/src/Mamba/Code Analysis/Syntax/CallExpressionSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/CallExpressionSyntax.cpp @@ -20,9 +20,9 @@ CallExpressionSyntax::CallExpressionSyntax( CallExpressionSyntax::~CallExpressionSyntax() noexcept { for (auto Argument : Arguments.Nodes()) - { - delete Argument; - } + { + delete Argument; + } } SyntaxKind CallExpressionSyntax::Kind() const noexcept @@ -39,13 +39,13 @@ std::vector CallExpressionSyntax::Children() const noexcept Result.emplace_back(Identifier); Result.emplace_back(OpenParenthesisToken); -#if defined(__cpp_lib_containers_ranges) && __cpp_lib_containers_ranges >= 202202L +#if __cpp_lib_containers_ranges >= 202202L Result.append_range(Arguments.WithSeperators()); #else for (auto Argument : Arguments.WithSeperators()) - { - Result.emplace_back(std::forward(Argument)); - } + { + Result.emplace_back(std::forward(Argument)); + } #endif Result.emplace_back(CloseParenthesisToken); diff --git a/src/Mamba/Code Analysis/Syntax/CompilationUnitSyntax.cpp b/src/Mamba/Code Analysis/Syntax/CompilationUnitSyntax.cpp index 24146a9..de51ea9 100644 --- a/src/Mamba/Code Analysis/Syntax/CompilationUnitSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/CompilationUnitSyntax.cpp @@ -10,9 +10,9 @@ CompilationUnitSyntax::CompilationUnitSyntax(const SyntaxTree* SyntaxTree, std:: CompilationUnitSyntax::~CompilationUnitSyntax() noexcept { for (auto&& Member : Members) - { - delete Member; - } + { + delete Member; + } } SyntaxKind CompilationUnitSyntax::Kind() const noexcept @@ -25,13 +25,13 @@ std::vector CompilationUnitSyntax::Children() const noexcept auto Children = std::vector(); Children.reserve(Members.size() + 1); -#if defined(__cpp_lib_containers_ranges) && __cpp_lib_containers_ranges >= 202202L +#if __cpp_lib_containers_ranges >= 202202L Children.append_range(Members); #else for (auto&& Member : Members) - { - Children.emplace_back(Member); - } + { + Children.emplace_back(Member); + } #endif Children.emplace_back(EndOfFileToken); diff --git a/src/Mamba/Code Analysis/Syntax/Constant.h b/src/Mamba/Code Analysis/Syntax/Constant.h index a2a0c17..dd68052 100644 --- a/src/Mamba/Code Analysis/Syntax/Constant.h +++ b/src/Mamba/Code Analysis/Syntax/Constant.h @@ -34,8 +34,9 @@ namespace Mamba using ValueType = std::variant; [[nodiscard]] constexpr Constant() noexcept = default; - template T> + template + requires std::constructible_from [[nodiscard]] constexpr Constant(T Value) noexcept : Value(Value){}; @@ -45,7 +46,322 @@ namespace Mamba return std::get(Value); } + [[nodiscard]] constexpr bool IsValid() const noexcept + { + return !Value.valueless_by_exception(); + } + + [[nodiscard]] constexpr Constant operator-() noexcept + { + return std::visit( + [](T Value) -> Constant { + if constexpr (requires { -Value; }) + { + return -Value; + } + else + { + return {}; + } + }, + Value + ); + } + + [[nodiscard]] constexpr Constant operator!() noexcept + { + return std::visit( + [](T Value) -> Constant { + if constexpr (requires { !Value; }) + { + return !Value; + } + else + { + return {}; + } + }, + Value + ); + } + + [[nodiscard]] constexpr Constant operator~() noexcept + { + return std::visit( + [](T Value) -> Constant { + if constexpr (requires { ~Value; }) + { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wbool-operation" + return ~Value; +#pragma clang diagnostic pop + } + else + { + return {}; + } + }, + Value + ); + } + + [[nodiscard]] constexpr Constant operator+(Constant Other) const noexcept + { + return std::visit( + [](auto Left, auto Right) -> Constant { + if constexpr (requires { Left + Right; }) + { + return Left + Right; + } + else + { + return {}; + } + }, + Value, + Other.Value + ); + } + + [[nodiscard]] constexpr Constant operator-(Constant Other) const noexcept + { + return std::visit( + [](auto Left, auto Right) -> Constant { + if constexpr (requires { Left - Right; }) + { + return Left - Right; + } + else + { + return {}; + } + }, + Value, + Other.Value + ); + } + + [[nodiscard]] constexpr Constant operator*(Constant Other) const noexcept + { + return std::visit( + [](auto Left, auto Right) -> Constant { + if constexpr (requires { Left* Right; }) + { + return Left * Right; + } + else + { + return {}; + } + }, + Value, + Other.Value + ); + } + + [[nodiscard]] constexpr Constant operator/(Constant Other) const noexcept + { + return std::visit( + [](auto Left, auto Right) -> Constant { + if constexpr (requires { Left + Right; }) + { + return Left + Right; + } + else + { + return {}; + } + }, + Value, + Other.Value + ); + } + + [[nodiscard]] constexpr Constant operator&&(Constant Other) const noexcept + { + return std::visit( + [](auto Left, auto Right) -> Constant { + if constexpr (requires { Left&& Right; }) + { + return Left && Right; + } + else + { + return {}; + } + }, + Value, + Other.Value + ); + } + + [[nodiscard]] constexpr Constant operator||(Constant Other) const noexcept + { + return std::visit( + [](auto Left, auto Right) -> Constant { + if constexpr (requires { Left || Right; }) + { + return Left || Right; + } + else + { + return {}; + } + }, + Value, + Other.Value + ); + } + + [[nodiscard]] constexpr Constant operator&(Constant Other) const noexcept + { + return std::visit( + [](auto Left, auto Right) -> Constant { + if constexpr (requires { Left & Right; }) + { + return Left & Right; + } + else + { + return {}; + } + }, + Value, + Other.Value + ); + } + + [[nodiscard]] constexpr Constant operator|(Constant Other) const noexcept + { + return std::visit( + [](auto Left, auto Right) -> Constant { + if constexpr (requires { Left | Right; }) + { + return Left | Right; + } + else + { + return {}; + } + }, + Value, + Other.Value + ); + } + + [[nodiscard]] constexpr Constant operator^(Constant Other) const noexcept + { + return std::visit( + [](auto Left, auto Right) -> Constant { + if constexpr (requires { Left ^ Right; }) + { + return Left ^ Right; + } + else + { + return {}; + } + }, + Value, + Other.Value + ); + } + + [[nodiscard]] constexpr Constant operator==(Constant Other) const noexcept + { + return Value == Other.Value; + } + + [[nodiscard]] constexpr Constant operator!=(Constant Other) const noexcept + { + return Value != Other.Value; + } + + [[nodiscard]] constexpr Constant operator<(Constant Other) const noexcept + { + return std::visit( + [](auto Left, auto Right) -> Constant { + if constexpr (requires { Left < Right; }) + { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wsign-compare" + return Left < Right; +#pragma clang diagnostic pop + } + else + { + return {}; + } + }, + Value, + Other.Value + ); + } + + [[nodiscard]] constexpr Constant operator<=(Constant Other) const noexcept + { + return std::visit( + [](auto Left, auto Right) -> Constant { + if constexpr (requires { Left <= Right; }) + { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wsign-compare" + return Left < Right; +#pragma clang diagnostic pop + } + else + { + return {}; + } + }, + Value, + Other.Value + ); + } + + [[nodiscard]] constexpr Constant operator>(Constant Other) const noexcept + { + return std::visit( + [](auto Left, auto Right) -> Constant { + if constexpr (requires { Left > Right; }) + { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wsign-compare" + return Left > Right; +#pragma clang diagnostic pop + } + else + { + return {}; + } + }, + Value, + Other.Value + ); + } + + [[nodiscard]] constexpr Constant operator>=(Constant Other) const noexcept + { + return std::visit( + [](auto Left, auto Right) -> Constant { + if constexpr (requires { Left >= Right; }) + { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wsign-compare" + return Left > Right; +#pragma clang diagnostic pop + } + else + { + return {}; + } + }, + Value, + Other.Value + ); + } + private: ValueType Value; }; -} // namespace Mamba \ No newline at end of file +} // namespace Mamba diff --git a/src/Mamba/Code Analysis/Syntax/Lexer.cpp b/src/Mamba/Code Analysis/Syntax/Lexer.cpp index e4cec9e..befc18b 100644 --- a/src/Mamba/Code Analysis/Syntax/Lexer.cpp +++ b/src/Mamba/Code Analysis/Syntax/Lexer.cpp @@ -32,12 +32,11 @@ namespace Mamba const auto TokenLength = Position - Start; auto TokenText = - std::make_shared(Hatcher([&] - { return String(SyntaxFacts::GetText(TokenKind)); })); + std::make_shared(Hatcher([&] { return String(SyntaxFacts::GetText(TokenKind)); })); if (TokenText->empty()) - { - TokenText = Text->ToString(TokenStart, TokenLength); - } + { + TokenText = Text->ToString(TokenStart, TokenLength); + } return std::make_shared(SyntaxTree, Kind, TokenStart, TokenText, TokenValue); } @@ -56,9 +55,9 @@ namespace Mamba { const auto Index = Position + Offset; if (Index >= Text->Length()) - { - return '\0'; - } + { + return '\0'; + } return (*Text)[Index]; } @@ -70,218 +69,218 @@ namespace Mamba Value = nullptr; switch (Current()) - { - case TEXT('\0'): - Kind = SyntaxKind::EndOfFileToken; - break; - case TEXT('+'): - ++Position; - if (Current() != TEXT('=')) - { - Kind = SyntaxKind::PlusToken; - } - else - { - Kind = SyntaxKind::PlusEqualsToken; + { + case TEXT('\0'): + Kind = SyntaxKind::EndOfFileToken; + break; + case TEXT('+'): ++Position; - } - break; - case TEXT('-'): - ++Position; - if (Current() != TEXT('=')) - { - Kind = SyntaxKind::MinusToken; - } - else - { - Kind = SyntaxKind::MinusEqualsToken; + if (Current() != TEXT('=')) + { + Kind = SyntaxKind::PlusToken; + } + else + { + Kind = SyntaxKind::PlusEqualsToken; + ++Position; + } + break; + case TEXT('-'): ++Position; - } - break; - case TEXT('*'): - ++Position; - if (Current() != TEXT('=')) - { - Kind = SyntaxKind::StarToken; - } - else - { - Kind = SyntaxKind::StarEqualsToken; + if (Current() != TEXT('=')) + { + Kind = SyntaxKind::MinusToken; + } + else + { + Kind = SyntaxKind::MinusEqualsToken; + ++Position; + } + break; + case TEXT('*'): ++Position; - } - break; - case TEXT('/'): - ++Position; - if (Current() != TEXT('=')) - { - Kind = SyntaxKind::SlashToken; - } - else - { - Kind = SyntaxKind::SlashEqualsToken; + if (Current() != TEXT('=')) + { + Kind = SyntaxKind::StarToken; + } + else + { + Kind = SyntaxKind::StarEqualsToken; + ++Position; + } + break; + case TEXT('/'): ++Position; - } - break; - case TEXT('('): - Kind = SyntaxKind::OpenParenthesisToken; - ++Position; - break; - case TEXT(')'): - Kind = SyntaxKind::CloseParenthesisToken; - ++Position; - break; - case TEXT('{'): - Kind = SyntaxKind::OpenBraceToken; - ++Position; - break; - case TEXT('}'): - Kind = SyntaxKind::CloseBraceToken; - ++Position; - break; - case TEXT(':'): - Kind = SyntaxKind::ColonToken; - ++Position; - break; - case TEXT(','): - Kind = SyntaxKind::CommaToken; - ++Position; - break; - case TEXT('~'): - Kind = SyntaxKind::TildeToken; - ++Position; - break; - case TEXT('^'): - ++Position; - if (Current() != TEXT('=')) - { - Kind = SyntaxKind::HatToken; - } - else - { - Kind = SyntaxKind::HatEqualsToken; + if (Current() != TEXT('=')) + { + Kind = SyntaxKind::SlashToken; + } + else + { + Kind = SyntaxKind::SlashEqualsToken; + ++Position; + } + break; + case TEXT('('): + Kind = SyntaxKind::OpenParenthesisToken; ++Position; - } - break; - case TEXT('&'): - ++Position; - if (Current() == TEXT('&')) - { - Kind = SyntaxKind::AmpersandAmpersandToken; + break; + case TEXT(')'): + Kind = SyntaxKind::CloseParenthesisToken; ++Position; - } - else if (Current() == TEXT('=')) - { - Kind = SyntaxKind::AmpersandEqualsToken; + break; + case TEXT('{'): + Kind = SyntaxKind::OpenBraceToken; ++Position; - } - else - { - Kind = SyntaxKind::AmpersandToken; - } - break; - case TEXT('|'): - ++Position; - if (Current() == TEXT('|')) - { - Kind = SyntaxKind::PipePipeToken; + break; + case TEXT('}'): + Kind = SyntaxKind::CloseBraceToken; ++Position; - } - else if (Current() == TEXT('=')) - { - Kind = SyntaxKind::PipeEqualsToken; + break; + case TEXT(':'): + Kind = SyntaxKind::ColonToken; ++Position; - } - else - { - Kind = SyntaxKind::PipeToken; - } - break; - case TEXT('='): - ++Position; - if (Current() != TEXT('=')) - { - Kind = SyntaxKind::EqualsToken; - } - else - { - Kind = SyntaxKind::EqualsEqualsToken; + break; + case TEXT(','): + Kind = SyntaxKind::CommaToken; ++Position; - } - break; - case TEXT('!'): - ++Position; - if (Current() != TEXT('=')) - { - Kind = SyntaxKind::BangToken; - } - else - { - Kind = SyntaxKind::BangEqualsToken; + break; + case TEXT('~'): + Kind = SyntaxKind::TildeToken; ++Position; - } - break; - case TEXT('<'): - ++Position; - if (Current() != TEXT('=')) - { - Kind = SyntaxKind::LessToken; - } - else - { - Kind = SyntaxKind::LessOrEqualsToken; + break; + case TEXT('^'): ++Position; - } - break; - case TEXT('>'): - ++Position; - if (Current() != TEXT('=')) - { - Kind = SyntaxKind::GreaterToken; - } - else - { - Kind = SyntaxKind::GreaterOrEqualsToken; + if (Current() != TEXT('=')) + { + Kind = SyntaxKind::HatToken; + } + else + { + Kind = SyntaxKind::HatEqualsToken; + ++Position; + } + break; + case TEXT('&'): ++Position; - } - break; - case TEXT('"'): - ReadString(); - break; - case TEXT('0'): - case TEXT('1'): - case TEXT('2'): - case TEXT('3'): - case TEXT('4'): - case TEXT('5'): - case TEXT('6'): - case TEXT('7'): - case TEXT('8'): - case TEXT('9'): - ReadNumber(); - break; - case TEXT(' '): - case TEXT('\n'): - case TEXT('\t'): - case TEXT('\r'): - ReadWhitespace(); - break; - case TEXT('_'): - ReadIdentifierOrKeyword(); - break; - default: - if (IsLetter(Current())) - { - ReadIdentifierOrKeyword(); - } - else - { - const auto Span = TextSpan(Position, 1); - const auto Location = TextLocation(Text, Span); - Diagnostics.ReportInvalidCharacter(Location, Current()); + if (Current() == TEXT('&')) + { + Kind = SyntaxKind::AmpersandAmpersandToken; + ++Position; + } + else if (Current() == TEXT('=')) + { + Kind = SyntaxKind::AmpersandEqualsToken; + ++Position; + } + else + { + Kind = SyntaxKind::AmpersandToken; + } + break; + case TEXT('|'): + ++Position; + if (Current() == TEXT('|')) + { + Kind = SyntaxKind::PipePipeToken; + ++Position; + } + else if (Current() == TEXT('=')) + { + Kind = SyntaxKind::PipeEqualsToken; + ++Position; + } + else + { + Kind = SyntaxKind::PipeToken; + } + break; + case TEXT('='): + ++Position; + if (Current() != TEXT('=')) + { + Kind = SyntaxKind::EqualsToken; + } + else + { + Kind = SyntaxKind::EqualsEqualsToken; + ++Position; + } + break; + case TEXT('!'): ++Position; - } - break; - } + if (Current() != TEXT('=')) + { + Kind = SyntaxKind::BangToken; + } + else + { + Kind = SyntaxKind::BangEqualsToken; + ++Position; + } + break; + case TEXT('<'): + ++Position; + if (Current() != TEXT('=')) + { + Kind = SyntaxKind::LessToken; + } + else + { + Kind = SyntaxKind::LessOrEqualsToken; + ++Position; + } + break; + case TEXT('>'): + ++Position; + if (Current() != TEXT('=')) + { + Kind = SyntaxKind::GreaterToken; + } + else + { + Kind = SyntaxKind::GreaterOrEqualsToken; + ++Position; + } + break; + case TEXT('"'): + ReadString(); + break; + case TEXT('0'): + case TEXT('1'): + case TEXT('2'): + case TEXT('3'): + case TEXT('4'): + case TEXT('5'): + case TEXT('6'): + case TEXT('7'): + case TEXT('8'): + case TEXT('9'): + ReadNumber(); + break; + case TEXT(' '): + case TEXT('\n'): + case TEXT('\t'): + case TEXT('\r'): + ReadWhitespace(); + break; + case TEXT('_'): + ReadIdentifierOrKeyword(); + break; + default: + if (IsLetter(Current())) + { + ReadIdentifierOrKeyword(); + } + else + { + const auto Span = TextSpan(Position, 1); + const auto Location = TextLocation(Text, Span); + Diagnostics.ReportInvalidCharacter(Location, Current()); + ++Position; + } + break; + } } void Lexer::ReadString() noexcept @@ -291,35 +290,35 @@ namespace Mamba bool Done = false; while (!Done) - { - switch (Current()) { - case TEXT('\0'): - case TEXT('\r'): - case TEXT('\n'): - { - const auto Span = TextSpan(Start, 1); - const auto Location = TextLocation(Text, Span); - Diagnostics.ReportUnterminatedString(Location); - Done = true; - break; - } - case TEXT('"'): - if (Lookahead() == TEXT('"')) - { - Position += 2; - } - else + switch (Current()) { - ++Position; - Done = true; + case TEXT('\0'): + case TEXT('\r'): + case TEXT('\n'): + { + const auto Span = TextSpan(Start, 1); + const auto Location = TextLocation(Text, Span); + Diagnostics.ReportUnterminatedString(Location); + Done = true; + break; + } + case TEXT('"'): + if (Lookahead() == TEXT('"')) + { + Position += 2; + } + else + { + ++Position; + Done = true; + } + break; + default: + ++Position; + break; } - break; - default: - ++Position; - break; } - } const auto Length = Position - Start; @@ -330,9 +329,9 @@ namespace Mamba void Lexer::ReadIdentifierOrKeyword() noexcept { while (IsLetterOrDigit(Current()) || Current() == TEXT('_')) - { - ++Position; - } + { + ++Position; + } const auto Length = Position - Start; const auto Span = TextSpan(Start, Length); @@ -343,9 +342,9 @@ namespace Mamba void Lexer::ReadWhitespace() noexcept { while (Current() == TEXT(' ') || Current() == TEXT('\n') || Current() == TEXT('\t') || Current() == TEXT('\r')) - { - ++Position; - } + { + ++Position; + } Kind = SyntaxKind::WhitespaceToken; } @@ -360,17 +359,17 @@ namespace Mamba // The current character is guaranteed to be a digit if (Current() != TEXT('0')) - { - ReadDecimal(); - } + { + ReadDecimal(); + } else if (Lookahead() == TEXT('x') || Lookahead() == TEXT('X')) - { - ReadHexadecimal(); - } + { + ReadHexadecimal(); + } else if (Lookahead() == TEXT('b') || Lookahead() == TEXT('B')) - { - ReadBinary(); - } + { + ReadBinary(); + } ReadOctal(); @@ -380,9 +379,9 @@ namespace Mamba void Lexer::ReadDecimal() noexcept { while (IsDecimalDigit(Current())) - { - ++Position; - } + { + ++Position; + } const auto Length = Position - Start; const auto Span = TextSpan(Start, Length); @@ -393,9 +392,9 @@ namespace Mamba void Lexer::ReadHexadecimal() noexcept { while (IsHexadecimalDigit(Current())) - { - ++Position; - } + { + ++Position; + } // Skip the '0x' or '0X' character sequence const auto Length = Position - Start; @@ -407,9 +406,9 @@ namespace Mamba void Lexer::ReadBinary() noexcept { while (IsHexadecimalDigit(Current())) - { - ++Position; - } + { + ++Position; + } // Skip the '0b' or '0B' character sequence const auto Length = Position - Start; @@ -421,9 +420,9 @@ namespace Mamba void Lexer::ReadOctal() noexcept { while (IsHexadecimalDigit(Current())) - { - ++Position; - } + { + ++Position; + } // Skip the 0 prefix const auto Length = Position - Start; @@ -468,13 +467,13 @@ namespace Mamba // otherwise they are int64. If the literal represents a value outside the range of int64, // it is represented by unsigned int64, otherwise diagnostics are required. if (Value <= std::numeric_limits::max()) - { - this->Value = std::make_shared(static_cast(Value)); - } + { + this->Value = std::make_shared(static_cast(Value)); + } else if (Value <= std::numeric_limits::max()) - { - this->Value = std::make_shared(static_cast(Value)); - } + { + this->Value = std::make_shared(static_cast(Value)); + } this->Value = std::make_shared(Value); } diff --git a/src/Mamba/Code Analysis/Syntax/Parser.cpp b/src/Mamba/Code Analysis/Syntax/Parser.cpp index 17a9ae5..0f750cb 100644 --- a/src/Mamba/Code Analysis/Syntax/Parser.cpp +++ b/src/Mamba/Code Analysis/Syntax/Parser.cpp @@ -57,22 +57,8 @@ std::vector Parser::ParseMembers() noexcept while (Current()->Kind() != SyntaxKind::EndOfFileToken) { - auto StartToken = Current(); - auto Member = ParseMember(); Members.emplace_back(Member); - - // If ParseMember() did not consume any tokens, - // we need to skip the current token and continue - // in order to avoid an infinite loop. - // - // We don't need to report an error, because we'll - // already tried to parse an expression statement - // and reported one. - if (Current() == StartToken) - { - NextToken(); - } } return Members; @@ -80,12 +66,23 @@ std::vector Parser::ParseMembers() noexcept MemberSyntax* Parser::ParseMember() noexcept { + auto StartToken = Current(); + auto Result = static_cast(nullptr); if (Current()->Kind() == SyntaxKind::FunctionKeyword) { - return ParseFunctionDeclaration(); + Result = ParseFunctionDeclaration(); + } + else + { + Result = ParseGlobalStatement(); + } + + if (Current() == StartToken) + { + NextToken(); } - return ParseGlobalStatement(); + return Result; } FunctionDeclarationSyntax* Parser::ParseFunctionDeclaration() noexcept diff --git a/src/Mamba/Code Analysis/Syntax/SeperatedSyntaxList.h b/src/Mamba/Code Analysis/Syntax/SeperatedSyntaxList.h index 8e76cea..d2aacee 100644 --- a/src/Mamba/Code Analysis/Syntax/SeperatedSyntaxList.h +++ b/src/Mamba/Code Analysis/Syntax/SeperatedSyntaxList.h @@ -18,22 +18,22 @@ namespace Mamba { [[nodiscard]] constexpr Container SkipSeperators(const Container& NodesAndSeparators) const noexcept { -#if defined(__cpp_lib_ranges_enumerate) && __cpp_lib_ranges_enumerate >= 202302L +#if __cpp_lib_ranges_enumerate >= 202302L // NodesAndSeparators | std::views::enumerate; #endif if (NodesAndSeparators.size() == 1) - { - return Container{ static_cast(NodesAndSeparators.front()) }; - } + { + return Container{ static_cast(NodesAndSeparators.front()) }; + } auto Result = Container(NodesAndSeparators.size() / 2); -#if defined(__cpp_size_t_suffix) && __cpp_size_t_suffix >= 202011L +#if __cpp_size_t_suffix >= 202011L for (auto Index = 0uz; Index < NodesAndSeparators.size() / 2; ++Index) #else for (auto Index = std::size_t(); Index < NodesAndSeparators.size() / 2; ++Index) #endif - { - Result[Index] = static_cast(NodesAndSeparators[Index * 2]); - } + { + Result[Index] = static_cast(NodesAndSeparators[Index * 2]); + } return Result; } diff --git a/src/Mamba/Code Analysis/Syntax/SyntaxNode.h b/src/Mamba/Code Analysis/Syntax/SyntaxNode.h index 74a9820..5023021 100644 --- a/src/Mamba/Code Analysis/Syntax/SyntaxNode.h +++ b/src/Mamba/Code Analysis/Syntax/SyntaxNode.h @@ -14,6 +14,7 @@ namespace Mamba class SyntaxNode { const class SyntaxTree* PrivateSyntaxTree; + TextLocation PrivateLocation; public: [[nodiscard]] SyntaxNode(const class SyntaxTree* SyntaxTree) noexcept; @@ -43,7 +44,8 @@ namespace Mamba // Gets all the ancestors of the node, excluding the node itself, in the order of closest to farthest. [[nodiscard]] std::vector Ancestors() const noexcept; -#if defined(__cpp_lib_ranges_to_container) && __cpp_lib_ranges_to_container >= 202202L +#if __cpp_lib_ranges_to_container >= 202202L + template typename ContainerType> [[nodiscard]] auto Children() const noexcept { diff --git a/src/Mamba/Code Analysis/Text/SourceText.h b/src/Mamba/Code Analysis/Text/SourceText.h index 2b3cde3..d630cd0 100644 --- a/src/Mamba/Code Analysis/Text/SourceText.h +++ b/src/Mamba/Code Analysis/Text/SourceText.h @@ -17,7 +17,7 @@ namespace Mamba const SourceTextInfo& Info() const noexcept; -#if defined(__cpp_explicit_this_parameter) && __cpp_explicit_this_parameter >= 202110L +#if __cpp_explicit_this_parameter >= 202110L template [[nodiscard]] auto&& operator[](this SelfT&& Self, const std::size_t Position) noexcept { From 6614ca3bcbd242a98d72c5620bf1398a6576d1e4 Mon Sep 17 00:00:00 2001 From: heckerpowered <72550834+heckerpowered@users.noreply.github.com> Date: Fri, 23 Aug 2024 23:43:01 +0800 Subject: [PATCH 10/30] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=9AScopeGuard?= =?UTF-8?q?=E9=94=99=E8=AF=AF=E5=9C=B0=E9=87=8A=E6=94=BE=E4=BA=86=E5=A3=B0?= =?UTF-8?q?=E6=98=8E=E7=9A=84=E4=BD=9C=E7=94=A8=E5=9F=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Mamba/Code Analysis/Binding/ScopeGuard.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Mamba/Code Analysis/Binding/ScopeGuard.cpp b/src/Mamba/Code Analysis/Binding/ScopeGuard.cpp index 2abdffd..23d0e2a 100644 --- a/src/Mamba/Code Analysis/Binding/ScopeGuard.cpp +++ b/src/Mamba/Code Analysis/Binding/ScopeGuard.cpp @@ -5,6 +5,8 @@ using namespace Mamba; ScopeGuard::ScopeGuard(BoundScope*& Scope) noexcept : Scope(Scope), Leaved() { + // The result of Scope.DeclareScope() is the child scope of the current scope, + // which is deleted when the parent scope is deconstructed. Scope = Scope->DeclareScope(); } @@ -22,9 +24,7 @@ void ScopeGuard::PreLeave() noexcept { // The parent of the scope is constructed in the constructor, // which is guaranteed to be non-const here. - auto PreviousScope = Scope->Parent; Scope = const_cast(Scope->Parent); - delete PreviousScope; Leaved = true; } From b211a3b348bd1af55290ff4324f4b5aa7dee73ba Mon Sep 17 00:00:00 2001 From: heckerpowered <72550834+heckerpowered@users.noreply.github.com> Date: Tue, 27 Aug 2024 16:00:30 +0800 Subject: [PATCH 11/30] More modern --- src/Mamba/Code Analysis/Binding/Binder.cpp | 317 ++++---- src/Mamba/Code Analysis/Binding/Binder.h | 14 +- .../Binding/BoundAssignmentExpression.cpp | 13 +- .../Binding/BoundAssignmentExpression.h | 17 +- .../Binding/BoundBinaryExpression.cpp | 17 +- .../Binding/BoundBinaryExpression.h | 22 +- .../Binding/BoundBinaryOperator.cpp | 117 +-- .../Binding/BoundBinaryOperator.h | 42 +- .../Binding/BoundBlockStatement.cpp | 23 +- .../Binding/BoundBlockStatement.h | 14 +- .../Binding/BoundCallExpression.cpp | 27 +- .../Binding/BoundCallExpression.h | 20 +- .../Binding/BoundCompilationUnit.cpp | 5 +- .../Binding/BoundCompilationUnit.h | 10 +- .../BoundCompoundAssignmentExpression.cpp | 13 +- .../BoundCompoundAssignmentExpression.h | 22 +- .../Code Analysis/Binding/BoundConstant.cpp | 13 - .../Code Analysis/Binding/BoundConstant.h | 16 - .../Binding/BoundDoWhileStatement.cpp | 14 +- .../Binding/BoundDoWhileStatement.h | 15 +- .../Code Analysis/Binding/BoundExpression.cpp | 2 +- .../Code Analysis/Binding/BoundExpression.h | 7 +- .../Binding/BoundExpressionStatement.cpp | 9 +- .../Binding/BoundExpressionStatement.h | 10 +- .../Binding/BoundForStatement.cpp | 21 +- .../Code Analysis/Binding/BoundForStatement.h | 22 +- .../Binding/BoundFunctionDeclaration.cpp | 14 +- .../Binding/BoundFunctionDeclaration.h | 12 +- .../Binding/BoundIfStatement.cpp | 14 +- .../Code Analysis/Binding/BoundIfStatement.h | 17 +- .../Binding/BoundLiteralExpression.cpp | 78 +- .../Binding/BoundLiteralExpression.h | 14 +- src/Mamba/Code Analysis/Binding/BoundNode.cpp | 3 +- src/Mamba/Code Analysis/Binding/BoundNode.h | 9 +- .../Binding/BoundNopStatement.cpp | 3 +- .../Code Analysis/Binding/BoundNopStatement.h | 2 +- .../Binding/BoundReturnStatement.cpp | 9 +- .../Binding/BoundReturnStatement.h | 10 +- .../Code Analysis/Binding/BoundStatement.cpp | 3 +- .../Code Analysis/Binding/BoundStatement.h | 3 +- .../Binding/BoundUnaryExpression.cpp | 15 +- .../Binding/BoundUnaryExpression.h | 20 +- .../Binding/BoundUnaryOperator.cpp | 36 +- .../Binding/BoundUnaryOperator.h | 28 +- .../Binding/BoundVariableDeclaration.cpp | 11 +- .../Binding/BoundVariableDeclaration.h | 16 +- .../Binding/BoundVariableExpression.cpp | 7 +- .../Binding/BoundVariableExpression.h | 11 +- .../Binding/BoundWhileStatement.cpp | 12 +- .../Binding/BoundWhileStatement.h | 15 +- src/Mamba/Code Analysis/Compilation.cpp | 78 -- src/Mamba/Code Analysis/Compilation.h | 26 - src/Mamba/Code Analysis/Compiler.cpp | 116 +++ src/Mamba/Code Analysis/Compiler.h | 14 +- src/Mamba/Code Analysis/Diagnostic.h | 1 - src/Mamba/Code Analysis/DiagnosticBag.cpp | 26 +- src/Mamba/Code Analysis/DiagnosticBag.h | 3 +- .../Emit/DotNet/DotNetEmitter.cpp | 177 ----- .../Code Analysis/Emit/DotNet/DotNetEmitter.h | 39 - src/Mamba/Code Analysis/Emit/DotNet/OpCodes.h | 229 ------ .../Code Analysis/Emit/Java/JavaEmitter.h | 23 - .../Code Analysis/Symbol/FunctionSymbol.cpp | 46 +- .../Code Analysis/Symbol/FunctionSymbol.h | 26 +- .../Code Analysis/Symbol/ParameterSymbol.cpp | 27 +- .../Code Analysis/Symbol/ParameterSymbol.h | 13 +- src/Mamba/Code Analysis/Symbol/TypeSymbol.cpp | 27 +- src/Mamba/Code Analysis/Symbol/TypeSymbol.h | 15 +- .../Code Analysis/Symbol/VariableSymbol.cpp | 27 +- .../Code Analysis/Symbol/VariableSymbol.h | 18 +- .../Syntax/AssignmentExpressionSyntax.cpp | 25 +- .../Syntax/AssignmentExpressionSyntax.h | 6 +- .../Syntax/BinaryExpressionSyntax.cpp | 21 +- .../Syntax/BinaryExpressionSyntax.h | 5 +- .../Syntax/BlockStatementSyntax.cpp | 42 +- .../Syntax/BlockStatementSyntax.h | 5 +- .../Syntax/BreakStatementSyntax.cpp | 14 +- .../Syntax/BreakStatementSyntax.h | 5 +- .../Syntax/CallExpressionSyntax.cpp | 48 +- .../Syntax/CallExpressionSyntax.h | 5 +- .../Syntax/CompilationUnitSyntax.cpp | 33 +- .../Syntax/CompilationUnitSyntax.h | 5 +- .../Syntax/ContinueStatementSyntax.cpp | 16 +- .../Syntax/ContinueStatementSyntax.h | 5 +- .../Syntax/DoWhileStatementSyntax.cpp | 21 +- .../Syntax/DoWhileStatementSyntax.h | 5 +- .../Code Analysis/Syntax/ElseClauseSyntax.cpp | 17 +- .../Code Analysis/Syntax/ElseClauseSyntax.h | 5 +- .../Syntax/ExpressionStatementSyntax.cpp | 16 +- .../Syntax/ExpressionStatementSyntax.h | 5 +- .../Syntax/ForStatementSyntax.cpp | 31 +- .../Code Analysis/Syntax/ForStatementSyntax.h | 5 +- .../Syntax/FunctionDeclarationSyntax.cpp | 43 +- .../Syntax/FunctionDeclarationSyntax.h | 5 +- .../Syntax/GlobalStatementSyntax.cpp | 16 +- .../Syntax/GlobalStatementSyntax.h | 5 +- .../Syntax/IfStatementSyntax.cpp | 54 +- .../Code Analysis/Syntax/IfStatementSyntax.h | 5 +- .../Code Analysis/Syntax/LegacySyntaxTree.h | 90 --- src/Mamba/Code Analysis/Syntax/Lexer.cpp | 625 ++++++++-------- src/Mamba/Code Analysis/Syntax/Lexer.h | 58 +- src/Mamba/Code Analysis/Syntax/Literal.cpp | 696 ------------------ src/Mamba/Code Analysis/Syntax/Literal.h | 7 +- .../Syntax/LiteralExpressionSyntax.cpp | 14 +- .../Syntax/LiteralExpressionSyntax.h | 17 +- .../Syntax/NameExpressionSyntax.cpp | 16 +- .../Syntax/NameExpressionSyntax.h | 5 +- .../Code Analysis/Syntax/ParameterSyntax.cpp | 17 +- .../Code Analysis/Syntax/ParameterSyntax.h | 5 +- .../Syntax/ParenthesizedExpressionSyntax.cpp | 21 +- .../Syntax/ParenthesizedExpressionSyntax.h | 5 +- src/Mamba/Code Analysis/Syntax/Parser.cpp | 4 +- src/Mamba/Code Analysis/Syntax/Parser.h | 4 +- .../Syntax/ReturnStatementSyntax.cpp | 17 +- .../Syntax/ReturnStatementSyntax.h | 5 +- .../Syntax/SeperatedSyntaxList.h | 15 +- .../Code Analysis/Syntax/StatementSyntax.h | 2 - .../Code Analysis/Syntax/SyntaxFacts.cpp | 36 +- src/Mamba/Code Analysis/Syntax/SyntaxFacts.h | 4 +- src/Mamba/Code Analysis/Syntax/SyntaxNode.cpp | 116 ++- src/Mamba/Code Analysis/Syntax/SyntaxNode.h | 89 ++- .../Code Analysis/Syntax/SyntaxToken.cpp | 10 +- src/Mamba/Code Analysis/Syntax/SyntaxToken.h | 4 +- src/Mamba/Code Analysis/Syntax/SyntaxTree.cpp | 5 + src/Mamba/Code Analysis/Syntax/SyntaxTree.h | 5 +- .../Code Analysis/Syntax/TypeClauseSyntax.cpp | 17 +- .../Code Analysis/Syntax/TypeClauseSyntax.h | 5 +- .../Syntax/UnaryExpressionSyntax.cpp | 17 +- .../Syntax/UnaryExpressionSyntax.h | 5 +- .../Syntax/VariableDeclarationSyntax.cpp | 40 +- .../Syntax/VariableDeclarationSyntax.h | 5 +- .../Syntax/WhileStatementSyntax.cpp | 23 +- .../Syntax/WhileStatementSyntax.h | 5 +- src/Mamba/Code Analysis/Text/SourceText.cpp | 36 +- src/Mamba/Code Analysis/Text/SourceText.h | 13 +- src/Mamba/Code Analysis/Text/TextLocation.h | 3 +- src/Mamba/Mamba.cpp | 138 +--- src/Mamba/MambaCore.h | 9 + 137 files changed, 1889 insertions(+), 2902 deletions(-) delete mode 100644 src/Mamba/Code Analysis/Binding/BoundConstant.cpp delete mode 100644 src/Mamba/Code Analysis/Binding/BoundConstant.h delete mode 100644 src/Mamba/Code Analysis/Compilation.cpp delete mode 100644 src/Mamba/Code Analysis/Compilation.h delete mode 100644 src/Mamba/Code Analysis/Emit/DotNet/DotNetEmitter.cpp delete mode 100644 src/Mamba/Code Analysis/Emit/DotNet/DotNetEmitter.h delete mode 100644 src/Mamba/Code Analysis/Emit/DotNet/OpCodes.h delete mode 100644 src/Mamba/Code Analysis/Emit/Java/JavaEmitter.h delete mode 100644 src/Mamba/Code Analysis/Syntax/LegacySyntaxTree.h delete mode 100644 src/Mamba/Code Analysis/Syntax/Literal.cpp diff --git a/src/Mamba/Code Analysis/Binding/Binder.cpp b/src/Mamba/Code Analysis/Binding/Binder.cpp index 1f126f1..2c381f1 100644 --- a/src/Mamba/Code Analysis/Binding/Binder.cpp +++ b/src/Mamba/Code Analysis/Binding/Binder.cpp @@ -1,10 +1,15 @@ #include "Binder.h" +#include "BoundCallExpression.h" +#include "BoundCompoundAssignmentExpression.h" +#include "BoundExpressionStatement.h" +#include "MambaCore.h" +#include "SyntaxFacts.h" using namespace Mamba; BoundCompilationUnit* Binder::BindCompilationUnit() noexcept { - const auto Root = SyntaxTree->Root(); + auto Root = SyntaxTree->Root(); for (auto&& Member : Root->Members) { BindMember(Member); @@ -13,73 +18,81 @@ BoundCompilationUnit* Binder::BindCompilationUnit() noexcept return new BoundCompilationUnit(Root, Scope); } -void Binder::BindMember(const std::shared_ptr Member) noexcept +void Binder::BindMember(const MemberSyntax* Member) noexcept { - if (const auto FunctionDeclaration = std::dynamic_pointer_cast(Member)) + if (auto FunctionDeclaration = dynamic_cast(Member)) { BindFunctionDeclaration(FunctionDeclaration); } } -void Binder::BindFunctionDeclaration(const std::shared_ptr FunctionDeclaration) noexcept +void Binder::BindFunctionDeclaration(const FunctionDeclarationSyntax* FunctionDeclaration) noexcept { auto FunctionScope = EnterScope(); - const auto Body = BindStatement(FunctionDeclaration->Body); - const auto BoundFunctionDeclaration = std::make_shared(FunctionDeclaration, Body, Scope); + auto Body = BindStatement(FunctionDeclaration->Body); + auto BoundFunctionDeclaration = new class BoundFunctionDeclaration(FunctionDeclaration, Body); FunctionScope.PreLeave(); + DeclareFunction(FunctionDeclaration, BoundFunctionDeclaration); } void Binder::DeclareFunction( - const std::shared_ptr FunctionDeclaration, - const std::shared_ptr BoundFunctionDeclaration + const FunctionDeclarationSyntax* FunctionDeclaration, + const BoundFunctionDeclaration* BoundFunctionDeclaration ) noexcept { - const auto Name = FunctionDeclaration->Identifier->Text; + auto Name = FunctionDeclaration->Identifier->Text(); auto Parameters = BindParameter(FunctionDeclaration); - const auto Type = BindTypeClause(FunctionDeclaration->Type); - const auto FunctionSymbol = std::make_shared( - Name, - std::move(Parameters), - Type ? Type : TypeSymbol::Void, - BoundFunctionDeclaration - ); + auto Type = BindTypeClause(FunctionDeclaration->Type); + auto FunctionSymbol = new class FunctionSymbol(Name, std::move(Parameters), Type ? Type : &TypeSymbol::Void, BoundFunctionDeclaration); Scope->Declare(FunctionSymbol); } -std::vector> Binder::BindParameter( - const std::shared_ptr FunctionDeclaration +std::vector Binder::BindParameter( + const FunctionDeclarationSyntax* FunctionDeclaration ) noexcept { - const auto Parameters = FunctionDeclaration->Parameters->Nodes(); - - auto ParameterSymbols = std::vector>(); + auto Parameters = FunctionDeclaration->Parameters.Nodes(); + auto ParameterSymbols = std::vector(); ParameterSymbols.reserve(Parameters.size()); +#if __cpp_lib_ranges_enumerate >= 202302L + for (auto [Index, Parameter] : + Parameters | + std::views::transform([](auto&& Node) { return dynamic_cast(Node); }) | std::views::enumerate) + { + const auto Name = Parameter->Identifier->Text(); + const auto Type = new TypeSymbol(Parameter->Type->Identifier->Text()); + const auto ParameterSymbol = new class ParameterSymbol(Name, Type, Index); + Scope->Declare(ParameterSymbol); + } +#else auto Index = 0; - for (auto&& Parameter : Parameters | std::views::transform([](auto&& Node) { return std::dynamic_pointer_cast(Node); })) + for (auto&& Parameter : + Parameters | std::views::transform([](auto&& Node) { return dynamic_cast(Node); })) { ++Index; - const auto Name = Parameter->Identifier->Text; - const auto Type = std::make_shared(Parameter->Type->Identifier->Text); - const auto ParameterSymbol = std::make_shared(Name, Type, Index); + const auto Name = Parameter->Identifier->Text(); + const auto Type = new TypeSymbol(Parameter->Type->Identifier->Text()); + const auto ParameterSymbol = new class ParameterSymbol(Name, Type, Index); Scope->Declare(ParameterSymbol); } return ParameterSymbols; +#endif } -std::shared_ptr Binder::BindStatement(const std::shared_ptr Statement) noexcept +BoundStatement* Binder::BindStatement(const StatementSyntax* Statement) noexcept { - const auto BoundStatement = BindStatementInternal(Statement); - if (const auto BoundExpressionStatement = std::dynamic_pointer_cast(BoundStatement)) + auto BoundStatement = BindStatementInternal(Statement); + if (auto BoundExpressionStatement = dynamic_cast(BoundStatement)) { // The following expressions' values can be discarded by default. - const auto IsAllowedExpression = + auto IsAllowedExpression = BoundExpressionStatement->Expression->Kind() == BoundNodeKind::AssignmentExpression || BoundExpressionStatement->Expression->Kind() == BoundNodeKind::CallExpression || BoundExpressionStatement->Expression->Kind() == BoundNodeKind::CompoundAssignmentExpression; @@ -93,127 +106,132 @@ std::shared_ptr Binder::BindStatement(const std::shared_pt return BoundStatement; } -std::shared_ptr Binder::BindStatementInternal(const std::shared_ptr Statement) noexcept +BoundStatement* Binder::BindStatementInternal(const StatementSyntax* Statement) noexcept { switch (Statement->Kind()) { case SyntaxKind::BlockStatement: - return BindBlockStatement(std::dynamic_pointer_cast(Statement)); + return BindBlockStatement(static_cast(Statement)); case SyntaxKind::VariableDeclaration: - return BindVariableDeclaration(std::dynamic_pointer_cast(Statement)); + return BindVariableDeclaration(static_cast(Statement)); case SyntaxKind::IfStatement: - return BindIfStatement(std::dynamic_pointer_cast(Statement)); + return BindIfStatement(static_cast(Statement)); case SyntaxKind::WhileStatement: - return BindWhileStatement(std::dynamic_pointer_cast(Statement)); + return BindWhileStatement(static_cast(Statement)); case SyntaxKind::DoWhileStatement: - return BindDoWhileStatement(std::dynamic_pointer_cast(Statement)); + return BindDoWhileStatement(static_cast(Statement)); case SyntaxKind::ForStatement: - return BindForStatement(std::dynamic_pointer_cast(Statement)); + return BindForStatement(static_cast(Statement)); case SyntaxKind::BreakStatement: - return BindBreakStatement(std::dynamic_pointer_cast(Statement)); + return BindBreakStatement(static_cast(Statement)); case SyntaxKind::ContinueStatement: - return BindContinueStatement(std::dynamic_pointer_cast(Statement)); + return BindContinueStatement(static_cast(Statement)); case SyntaxKind::ReturnStatement: - return BindReturnStatement(std::dynamic_pointer_cast(Statement)); + return BindReturnStatement(static_cast(Statement)); case SyntaxKind::ExpressionStatement: - return BindExpressionStatement(std::dynamic_pointer_cast(Statement)); + return BindExpressionStatement(static_cast(Statement)); default: +#ifdef DEBUG fast_io::io::perrln("Unexpected syntax: {}", fast_io::mnp::code_cvt(SyntaxFacts::ToString(Statement->Kind()))); + fast_io::fast_terminate(); +#else std::unreachable(); +#endif } } -std::shared_ptr Binder::BindBlockStatement(const std::shared_ptr BlockStatement) noexcept +BoundBlockStatement* Binder::BindBlockStatement(const BlockStatementSyntax* BlockStatement) noexcept { - auto BoundStatements = std::vector>(); - BoundStatements.reserve(BlockStatement->Statements.size()); + auto BlockScope = EnterScope(); - const auto BlockScope = EnterScope(); + auto BoundStatements = BlockStatement->Statements | + std::views::transform([&](auto Statement) -> const BoundStatement* { return BindStatement(Statement); }) | + std::ranges::to(); - for (auto&& Statement : BlockStatement->Statements) - { - BoundStatements.emplace_back(Hatcher([&] { return BindStatement(Statement); })); - } - - return std::make_shared(BlockStatement, BoundStatements); + return new BoundBlockStatement(BlockStatement, std::move(BoundStatements)); } -std::shared_ptr Binder::BindExpressionStatement(const std::shared_ptr ExpressionStatement) noexcept +BoundExpressionStatement* Binder::BindExpressionStatement(const ExpressionStatementSyntax* ExpressionStatement) noexcept { - const auto Expression = BindExpression(ExpressionStatement->Expression); - return std::make_shared(ExpressionStatement, Expression); + auto Expression = BindExpression(ExpressionStatement->Expression); + return new BoundExpressionStatement(ExpressionStatement, Expression); } -std::shared_ptr Binder::BindExpression(const std::shared_ptr Expression) noexcept +BoundExpression* Binder::BindExpression(const ExpressionSyntax* Expression) noexcept { switch (Expression->Kind()) { case SyntaxKind::ParenthesizedExpression: - return BindParenthesizedExpression(std::dynamic_pointer_cast(Expression)); + return BindParenthesizedExpression(static_cast(Expression)); case SyntaxKind::LiteralExpression: - return BindLiteralExpression(std::dynamic_pointer_cast(Expression)); + return BindLiteralExpression(static_cast(Expression)); case SyntaxKind::NameExpression: - return BindNameExpression(std::dynamic_pointer_cast(Expression)); + return BindNameExpression(static_cast(Expression)); case SyntaxKind::AssignmentExpression: - return BindAssignmentExpression(std::dynamic_pointer_cast(Expression)); + return BindAssignmentExpression(static_cast(Expression)); case SyntaxKind::UnaryExpression: - return BindUnaryExpression(std::dynamic_pointer_cast(Expression)); + return BindUnaryExpression(static_cast(Expression)); case SyntaxKind::BinaryExpression: - return BindBinaryExpression(std::dynamic_pointer_cast(Expression)); + return BindBinaryExpression(static_cast(Expression)); case SyntaxKind::CallExpression: - return BindCallExpression(std::dynamic_pointer_cast(Expression)); + return BindCallExpression(static_cast(Expression)); default: - fast_io::io::perrln("Unexpected {}", fast_io::mnp::code_cvt(SyntaxFacts::ToString(Expression->Kind())), ", expression expected."); +#ifdef DEBUG + InternalCompilerError( + std::source_location::current(), + "Unexpected {}", + fast_io::mnp::code_cvt(SyntaxFacts::ToString(Expression->Kind())), + ", expression expected." + ); +#else std::unreachable(); +#endif } } -std::shared_ptr Binder::BindVariableDeclaration(const std::shared_ptr VariableDeclaration) noexcept +BoundVariableDeclaration* Binder::BindVariableDeclaration(const VariableDeclarationSyntax* VariableDeclaration) noexcept { - const auto IsReadOnly = VariableDeclaration->Keyword->Kind() == SyntaxKind::LetKeyword; - const auto Type = BindTypeClause(VariableDeclaration->TypeClause); - const auto Initializer = BindExpression(VariableDeclaration->Initializer); - const auto VariableType = Type ? Type : Initializer->Type(); - const auto Variable = BindVariableDeclaration( + auto IsReadOnly = VariableDeclaration->Keyword->Kind() == SyntaxKind::LetKeyword; + auto Type = BindTypeClause(VariableDeclaration->TypeClause); + auto Initializer = BindExpression(VariableDeclaration->Initializer); + auto VariableType = Type ? Type : Initializer->Type(); + auto Variable = BindVariableDeclaration( VariableDeclaration->Identifier, IsReadOnly, VariableType, Initializer->ConstantValue() ); - return std::make_shared(VariableDeclaration, Variable, Initializer); + return new BoundVariableDeclaration(VariableDeclaration, Variable, Initializer); } -std::shared_ptr Binder::BindVariableDeclaration( - const std::shared_ptr Identifier, - const bool IsReadOnly, - const std::shared_ptr Type, - const NullableSharedPtr Constant -) noexcept +VariableSymbol* Binder::BindVariableDeclaration(const SyntaxToken* Identifier, bool IsReadOnly, const TypeSymbol* Type, Constant Constant) noexcept { - const auto Name = Identifier->Text; - if (!Name) + auto Name = Identifier->Text(); + if (Name.empty()) { - return std::make_shared(std::make_shared(TEXT("?")), IsReadOnly, Type, Constant); +#ifdef DEBUG + fast_io::io::perrln("Failed to bind variable declaration: empty identifier."); + fast_io::fast_terminate(); +#else + std::unreachable(); +#endif } if (!Scope->LookupVariable(Name).empty()) { - Diagnostics.ReportVariableAlreadyDeclared(Identifier->Location(), *Name); + Diagnostics.ReportVariableAlreadyDeclared(Identifier->Location(), Name); } - const auto Variable = std::make_shared(Name, IsReadOnly, Type, Constant); - - return Variable; + return new VariableSymbol(Name, IsReadOnly, Type, Constant); } -std::shared_ptr Binder::BindIfStatement(const std::shared_ptr IfStatement) noexcept +BoundIfStatement* Binder::BindIfStatement(const IfStatementSyntax* IfStatement) noexcept { - const auto Condition = BindExpression(IfStatement->Condition); - - if (Condition->ConstantValue()) + auto Condition = BindExpression(IfStatement->Condition); + if (Condition->ConstantValue().IsValid()) { - if (!Condition->ConstantValue()->Value->Value.BooleanValue) + if (!Condition->ConstantValue().Get()) { Diagnostics.ReportUnreachableCode(IfStatement->ElseClause->ElseStatement); } @@ -224,73 +242,73 @@ std::shared_ptr Binder::BindIfStatement(const std::shared_ } } - const auto ThenStatement = BindStatement(IfStatement->ThenStatement); - const auto ElseStatement = IfStatement->ElseClause ? nullptr : BindStatement(IfStatement->ElseClause->ElseStatement); - return std::make_shared(IfStatement, Condition, ThenStatement, ElseStatement); + auto ThenStatement = BindStatement(IfStatement->ThenStatement); + auto ElseStatement = IfStatement->ElseClause ? nullptr : BindStatement(IfStatement->ElseClause->ElseStatement); + return new BoundIfStatement(IfStatement, Condition, ThenStatement, ElseStatement); } -std::shared_ptr Binder::BindWhileStatement(const std::shared_ptr WhileStatement) noexcept +BoundWhileStatement* Binder::BindWhileStatement(const WhileStatementSyntax* WhileStatement) noexcept { - const auto WhileScope = EnterScope(); + auto WhileScope = EnterScope(); - const auto Condition = BindExpression(WhileStatement->Condition); + auto Condition = BindExpression(WhileStatement->Condition); - if (Condition->ConstantValue() && !Condition->ConstantValue()->Value->Value.BooleanValue) + if (Condition->ConstantValue().IsValid() && !Condition->ConstantValue().Get()) { Diagnostics.ReportUnreachableCode(WhileStatement->Body); } - const auto Body = BindStatement(WhileStatement->Body); - return std::make_shared(WhileStatement, Condition, Body); + auto Body = BindStatement(WhileStatement->Body); + return new BoundWhileStatement(WhileStatement, Condition, Body); } -std::shared_ptr Binder::BindDoWhileStatement(const std::shared_ptr DoWhileStatement) noexcept +BoundDoWhileStatement* Binder::BindDoWhileStatement(const DoWhileStatementSyntax* DoWhileStatement) noexcept { - const auto Body = BindStatement(DoWhileStatement->Body); - const auto Condition = BindExpression(DoWhileStatement->Condition); - return std::make_shared(DoWhileStatement, Body, Condition); + auto Body = BindStatement(DoWhileStatement->Body); + auto Condition = BindExpression(DoWhileStatement->Condition); + return new BoundDoWhileStatement(DoWhileStatement, Body, Condition); } -std::shared_ptr Binder::BindForStatement(const std::shared_ptr ForStatement) noexcept +BoundForStatement* Binder::BindForStatement(const ForStatementSyntax* ForStatement) noexcept { - const auto ForScope = EnterScope(); + auto ForScope = EnterScope(); - const auto InitStatement = BindStatement(ForStatement->InitStatement); - const auto Condition = BindExpression(ForStatement->Condition); - const auto Expression = BindExpression(ForStatement->Expression); - const auto Body = BindStatement(ForStatement->Body); + auto InitStatement = BindStatement(ForStatement->InitStatement); + auto Condition = BindExpression(ForStatement->Condition); + auto Expression = BindExpression(ForStatement->Expression); + auto Body = BindStatement(ForStatement->Body); - return std::make_shared(ForStatement, InitStatement, Condition, Expression, Body); + return new BoundForStatement(ForStatement, InitStatement, Condition, Expression, Body); } -std::shared_ptr Binder::BindBreakStatement(const std::shared_ptr BreakStatement) noexcept +BoundStatement* Binder::BindBreakStatement(const BreakStatementSyntax* BreakStatement) noexcept { fast_io::io::perrln("Failed to bind break statement: not implemented yet."); return {}; } -std::shared_ptr Binder::BindContinueStatement(const std::shared_ptr ContinueStatement) noexcept +BoundStatement* Binder::BindContinueStatement(const ContinueStatementSyntax* ContinueStatement) noexcept { fast_io::io::perrln("Failed to bind continue statement: not implemented yet."); return {}; } -std::shared_ptr Binder::BindReturnStatement(const std::shared_ptr ReturnStatement) noexcept +BoundReturnStatement* Binder::BindReturnStatement(const ReturnStatementSyntax* ReturnStatement) noexcept { // TODO: Diagnostics const auto Expression = BindExpression(ReturnStatement->Expression); - return std::make_shared(ReturnStatement, Expression); + return new BoundReturnStatement(ReturnStatement, Expression); } -std::shared_ptr Binder::BindLiteralExpression(const std::shared_ptr LiteralExpression) noexcept +BoundLiteralExpression* Binder::BindLiteralExpression(const LiteralExpressionSyntax* LiteralExpression) noexcept { - return std::make_shared(LiteralExpression, LiteralExpression->Value); + return new BoundLiteralExpression(LiteralExpression, LiteralExpression->Value); } -std::shared_ptr Binder::BindNameExpression(const std::shared_ptr NameExpression) noexcept +BoundVariableExpression* Binder::BindNameExpression(const NameExpressionSyntax* NameExpression) noexcept { - const auto Name = NameExpression->IdentifierToken->Text; - const auto Variables = Scope->LookupVariable(Name); + auto Name = NameExpression->IdentifierToken->Text(); + auto Variables = Scope->LookupVariable(Name); if (Variables.empty()) { // TODO: Diagnostics - undeclaraed identifier @@ -302,21 +320,21 @@ std::shared_ptr Binder::BindNameExpression(const std::sha return {}; } - return std::make_shared(NameExpression, Variables.front()); + return new BoundVariableExpression(NameExpression, Variables.front()); } -std::shared_ptr Binder::BindParenthesizedExpression(const std::shared_ptr ParenthesizedExpression) noexcept +BoundExpression* Binder::BindParenthesizedExpression(const ParenthesizedExpressionSyntax* ParenthesizedExpression) noexcept { return BindExpression(ParenthesizedExpression->Expression); } -std::shared_ptr Binder::BindUnaryExpression(const std::shared_ptr UnaryExpression) noexcept +BoundUnaryExpression* Binder::BindUnaryExpression(const UnaryExpressionSyntax* UnaryExpression) noexcept { - const auto BoundOperand = BindExpression(UnaryExpression->Operand); + auto BoundOperand = BindExpression(UnaryExpression->Operand); // TODO: Check operand type - const auto BoundOperator = BoundUnaryOperator::Bind( + auto BoundOperator = BoundUnaryOperator::Bind( UnaryExpression->OperatorToken->Kind(), BoundOperand->Type() ); @@ -326,10 +344,10 @@ std::shared_ptr Binder::BindUnaryExpression(const std::sh return {}; } - return std::make_shared(UnaryExpression, *BoundOperator, BoundOperand); + return new BoundUnaryExpression(UnaryExpression, *BoundOperator, BoundOperand); } -std::shared_ptr Binder::BindBinaryExpression(const std::shared_ptr BinaryExpression) noexcept +BoundBinaryExpression* Binder::BindBinaryExpression(const BinaryExpressionSyntax* BinaryExpression) noexcept { const auto BoundLeft = BindExpression(BinaryExpression->Left); const auto BoundRight = BindExpression(BinaryExpression->Right); @@ -347,15 +365,15 @@ std::shared_ptr Binder::BindBinaryExpression(const std::s return {}; } - return std::make_shared(BinaryExpression, BoundLeft, *BoundOperator, BoundRight); + return new BoundBinaryExpression(BinaryExpression, BoundLeft, *BoundOperator, BoundRight); } -std::shared_ptr Binder::BindAssignmentExpression(const std::shared_ptr AssignmentExpression) noexcept +BoundExpression* Binder::BindAssignmentExpression(const AssignmentExpressionSyntax* AssignmentExpression) noexcept { - const auto Name = AssignmentExpression->IdentifierToken->Text; - const auto BoundExpression = BindExpression(AssignmentExpression->Expression); + auto Name = AssignmentExpression->IdentifierToken->Text(); + auto BoundExpression = BindExpression(AssignmentExpression->Expression); - const auto Variables = Scope->LookupVariable(Name); + auto Variables = Scope->LookupVariable(Name); if (Variables.empty()) { // TODO: Diagnostics - undeclaraed identifier @@ -367,7 +385,7 @@ std::shared_ptr Binder::BindAssignmentExpression(const st return {}; } - const auto Variable = Variables.front(); + auto Variable = Variables.front(); if (Variable->IsConstant) { // TODO: Diagnostics - constant variable cannot be assigned @@ -375,12 +393,8 @@ std::shared_ptr Binder::BindAssignmentExpression(const st if (AssignmentExpression->AssignmentToken->Kind() != SyntaxKind::EqualsToken) { - const auto EquivalentOperatorTokenKind = SyntaxFacts::GetBinaryOperatorOfAssignmentOperator(AssignmentExpression->AssignmentToken->Kind()); - const auto BoundOperator = BoundBinaryOperator::Bind( - EquivalentOperatorTokenKind, - Variable->Type, - BoundExpression->Type() - ); + auto EquivalentOperatorTokenKind = SyntaxFacts::GetBinaryOperatorOfAssignmentOperator(AssignmentExpression->AssignmentToken->Kind()); + auto BoundOperator = BoundBinaryOperator::Bind(EquivalentOperatorTokenKind, Variable->Type, BoundExpression->Type()); if (!BoundOperator) { @@ -389,26 +403,21 @@ std::shared_ptr Binder::BindAssignmentExpression(const st } // TODO: implement conversion - return std::make_shared( - AssignmentExpression, - Variable, - *BoundOperator, - BoundExpression - ); + return new BoundCompoundAssignmentExpression(AssignmentExpression, Variable, *BoundOperator, BoundExpression); } - return std::make_shared(AssignmentExpression, Variable, BoundExpression); + return new BoundAssignmentExpression(AssignmentExpression, Variable, BoundExpression); } -std::shared_ptr Binder::BindCallExpression(const std::shared_ptr CallExpression) noexcept +BoundCallExpression* Binder::BindCallExpression(const CallExpressionSyntax* CallExpression) noexcept { - auto BoundArguments = std::vector>(); - BoundArguments.reserve(CallExpression->Arguments->Count()); + auto BoundArguments = std::vector(); + BoundArguments.reserve(CallExpression->Arguments.Count()); - for (auto&& Argument : CallExpression->Arguments->Nodes()) + for (auto&& Argument : CallExpression->Arguments.Nodes()) { // Argument is guaranteed to be a expression by the parser. - const auto BoundArgument = BindExpression(std::static_pointer_cast(Argument)); + const auto BoundArgument = BindExpression(static_cast(Argument)); // TODO: Use hatcher to avoid copy BoundArguments.emplace_back(BoundArgument); @@ -417,18 +426,18 @@ std::shared_ptr Binder::BindCallExpression(const std::sha // TODO: Refinement Jvav standard // [basic.lookup]/? : If the declarations found by name lookup all denote functions, // the declarations are said to form an overload set. - const auto FunctionSet = Scope->LookupFunction(CallExpression->Identifier->Text); + const auto FunctionSet = Scope->LookupFunction(CallExpression->Identifier->Text()); if (FunctionSet.empty()) { // TODO: Diagnostics - undeclaraed function - fast_io::io::perrln("Undeclaraed function '", fast_io::mnp::code_cvt(*CallExpression->Identifier->Text), "'"); + fast_io::io::perrln("Undeclaraed function '", fast_io::mnp::code_cvt(CallExpression->Identifier->Text()), "'"); return {}; } // TODO: Overload resolution. Before overload resolution is avaiable, function override is not permitted. const auto Function = FunctionSet.front(); - if (CallExpression->Arguments->Count() != Function->Parameters.size()) + if (CallExpression->Arguments.Count() != Function->Parameters.size()) { // TODO: Report argument count mismatch fast_io::io::perrln("Failed to bind call expression: argument count mismatch."); @@ -437,17 +446,17 @@ std::shared_ptr Binder::BindCallExpression(const std::sha // TODO: implement conversion - return std::make_shared(CallExpression, Function, std::move(BoundArguments)); + return new BoundCallExpression(CallExpression, Function, std::move(BoundArguments)); } -NullableSharedPtr Binder::BindTypeClause(const NullableSharedPtr TypeClause) noexcept +NullablePointer Binder::BindTypeClause(NullablePointer TypeClause) noexcept { if (!TypeClause) { return {}; } - const auto Types = Scope->LookupType(TypeClause->Identifier->Text); + const auto Types = Scope->LookupType(TypeClause->Identifier->Text()); if (Types.empty()) { // TODO: Diagnostics - undeclaraed type @@ -467,6 +476,6 @@ void Binder::DeclareBuiltinFunctions() noexcept } Binder::Binder(const class SyntaxTree* SyntaxTree) noexcept : - Scope(std::make_shared(nullptr)), SyntaxTree(SyntaxTree) + Scope(new BoundScope(nullptr)), SyntaxTree(SyntaxTree) { } diff --git a/src/Mamba/Code Analysis/Binding/Binder.h b/src/Mamba/Code Analysis/Binding/Binder.h index 9c5ca03..19a808b 100644 --- a/src/Mamba/Code Analysis/Binding/Binder.h +++ b/src/Mamba/Code Analysis/Binding/Binder.h @@ -21,7 +21,9 @@ #include "BoundVariableDeclaration.h" #include "BoundVariableExpression.h" #include "BoundWhileStatement.h" +#include "BreakStatementSyntax.h" #include "CallExpressionSyntax.h" +#include "CompilationUnitSyntax.h" #include "Constant.h" #include "ContinueStatementSyntax.h" #include "DiagnosticBag.h" @@ -33,6 +35,7 @@ #include "LiteralExpressionSyntax.h" #include "MambaCore.h" #include "NameExpressionSyntax.h" +#include "ParameterSymbol.h" #include "ParenthesizedExpressionSyntax.h" #include "ReturnStatementSyntax.h" #include "ScopeGuard.h" @@ -49,7 +52,6 @@ namespace Mamba { BoundScope* Scope; const class SyntaxTree* SyntaxTree; - DiagnosticBag Diagnostics; void BindMember(const MemberSyntax* Member) noexcept; void BindFunctionDeclaration(const FunctionDeclarationSyntax* FunctionDeclaration) noexcept; @@ -60,14 +62,14 @@ namespace Mamba ) noexcept; VariableSymbol* BindVariableDeclaration(const SyntaxToken* Identifier, bool IsReadOnly, const TypeSymbol* Type, Constant Constant) noexcept; - std::vector BindParameter(const FunctionDeclarationSyntax* FunctionDeclaration) noexcept; + std::vector BindParameter(const FunctionDeclarationSyntax* FunctionDeclaration) noexcept; - BoundStatement* BindBreakStatement(const std::shared_ptr BreakStatement) noexcept; + BoundStatement* BindBreakStatement(const BreakStatementSyntax* BreakStatement) noexcept; BoundExpression* BindParenthesizedExpression(const ParenthesizedExpressionSyntax* ParenthesizedExpression) noexcept; - BoundAssignmentExpression* BindAssignmentExpression(const AssignmentExpressionSyntax* AssignmentExpression) noexcept; BoundExpressionStatement* BindExpressionStatement(const ExpressionStatementSyntax* ExpressionStatement) noexcept; BoundVariableDeclaration* BindVariableDeclaration(const VariableDeclarationSyntax* VariableDeclaration) noexcept; - NullablePointer BindTypeClause(NullablePointer TypeClause) noexcept; + BoundExpression* BindAssignmentExpression(const AssignmentExpressionSyntax* AssignmentExpression) noexcept; + NullablePointer BindTypeClause(NullablePointer TypeClause) noexcept; BoundLiteralExpression* BindLiteralExpression(const LiteralExpressionSyntax* LiteralExpression) noexcept; BoundDoWhileStatement* BindDoWhileStatement(const DoWhileStatementSyntax* DoWhileStatement) noexcept; BoundBinaryExpression* BindBinaryExpression(const BinaryExpressionSyntax* BinaryExpression) noexcept; @@ -90,6 +92,8 @@ namespace Mamba void DeclareBuiltinFunction(); public: + DiagnosticBag Diagnostics; + [[nodiscard]] Binder(const class SyntaxTree* SyntaxTree) noexcept; BoundCompilationUnit* BindCompilationUnit() noexcept; diff --git a/src/Mamba/Code Analysis/Binding/BoundAssignmentExpression.cpp b/src/Mamba/Code Analysis/Binding/BoundAssignmentExpression.cpp index f701bbe..38d1bb9 100644 --- a/src/Mamba/Code Analysis/Binding/BoundAssignmentExpression.cpp +++ b/src/Mamba/Code Analysis/Binding/BoundAssignmentExpression.cpp @@ -3,20 +3,25 @@ using namespace Mamba; BoundAssignmentExpression::BoundAssignmentExpression( - const std::shared_ptr Syntax, - const std::shared_ptr Variable, - const std::shared_ptr Expression + const SyntaxNode* Syntax, + const VariableSymbol* Variable, + const BoundExpression* Expression ) noexcept : Super(Syntax), Variable(Variable), Expression(Expression) { } +BoundAssignmentExpression::~BoundAssignmentExpression() noexcept +{ + delete Expression; +} + BoundNodeKind BoundAssignmentExpression::Kind() const noexcept { return BoundNodeKind::AssignmentExpression; } -std::shared_ptr BoundAssignmentExpression::Type() const noexcept +const TypeSymbol* BoundAssignmentExpression::Type() const noexcept { return Expression->Type(); } \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Binding/BoundAssignmentExpression.h b/src/Mamba/Code Analysis/Binding/BoundAssignmentExpression.h index eb3fc6e..c6a5e1e 100644 --- a/src/Mamba/Code Analysis/Binding/BoundAssignmentExpression.h +++ b/src/Mamba/Code Analysis/Binding/BoundAssignmentExpression.h @@ -1,9 +1,8 @@ #pragma once -#include - #include "BoundExpression.h" #include "BoundNodeKind.h" +#include "VariableSymbol.h" namespace Mamba { @@ -13,15 +12,17 @@ namespace Mamba using Super = BoundExpression; [[nodiscard]] BoundAssignmentExpression( - const std::shared_ptr Syntax, - const std::shared_ptr Variable, - const std::shared_ptr Expression + const SyntaxNode* Syntax, + const VariableSymbol* Variable, + const BoundExpression* Expression ) noexcept; + ~BoundAssignmentExpression() noexcept override; + BoundNodeKind Kind() const noexcept override; - std::shared_ptr Type() const noexcept override; + const TypeSymbol* Type() const noexcept override; - const std::shared_ptr Variable; - const std::shared_ptr Expression; + const VariableSymbol* Variable; + const BoundExpression* Expression; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Binding/BoundBinaryExpression.cpp b/src/Mamba/Code Analysis/Binding/BoundBinaryExpression.cpp index 81d3a96..b23c259 100644 --- a/src/Mamba/Code Analysis/Binding/BoundBinaryExpression.cpp +++ b/src/Mamba/Code Analysis/Binding/BoundBinaryExpression.cpp @@ -1,31 +1,36 @@ #include "BoundBinaryExpression.h" -#include "BoundConstant.h" #include "ConstantFolding.h" using namespace Mamba; BoundBinaryExpression::BoundBinaryExpression( - const std::shared_ptr Syntax, - const std::shared_ptr Left, + const SyntaxNode* Syntax, + const BoundExpression* Left, const BoundBinaryOperator& Operator, - const std::shared_ptr Right + const BoundExpression* Right ) noexcept : Super(Syntax), Left(Left), Operator(Operator), Right(Right) { } +BoundBinaryExpression::~BoundBinaryExpression() noexcept +{ + delete Left; + delete Right; +} + BoundNodeKind BoundBinaryExpression::Kind() const noexcept { return BoundNodeKind::BinaryExpression; } -std::shared_ptr BoundBinaryExpression::Type() const noexcept +const TypeSymbol* BoundBinaryExpression::Type() const noexcept { return Operator.Type; } -NullableSharedPtr BoundBinaryExpression::ConstantValue() const noexcept +Constant BoundBinaryExpression::ConstantValue() const noexcept { return ConstantFolding::Fold(Left, Operator, Right); } \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Binding/BoundBinaryExpression.h b/src/Mamba/Code Analysis/Binding/BoundBinaryExpression.h index d89c3ea..c33cee4 100644 --- a/src/Mamba/Code Analysis/Binding/BoundBinaryExpression.h +++ b/src/Mamba/Code Analysis/Binding/BoundBinaryExpression.h @@ -1,10 +1,8 @@ #pragma once -#include - +#include "BoundBinaryOperator.h" #include "BoundExpression.h" #include "BoundNodeKind.h" -#include "MambaCore.h" namespace Mamba { @@ -13,19 +11,15 @@ namespace Mamba public: using Super = BoundExpression; - [[nodiscard]] BoundBinaryExpression( - const std::shared_ptr Syntax, - const std::shared_ptr Left, - const class BoundBinaryOperator& Operator, - const std::shared_ptr Right - ) noexcept; + [[nodiscard]] BoundBinaryExpression(const SyntaxNode* Syntax, const BoundExpression* Left, const BoundBinaryOperator& Operator, const BoundExpression* Right) noexcept; + ~BoundBinaryExpression() noexcept override; BoundNodeKind Kind() const noexcept override; - std::shared_ptr Type() const noexcept override; - NullableSharedPtr ConstantValue() const noexcept override; + const TypeSymbol* Type() const noexcept override; + Constant ConstantValue() const noexcept override; - std::shared_ptr Left; - const class BoundBinaryOperator& Operator; - const std::shared_ptr Right; + const BoundExpression* Left; + const BoundBinaryOperator& Operator; + const BoundExpression* Right; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Binding/BoundBinaryOperator.cpp b/src/Mamba/Code Analysis/Binding/BoundBinaryOperator.cpp index be19896..051dcdf 100644 --- a/src/Mamba/Code Analysis/Binding/BoundBinaryOperator.cpp +++ b/src/Mamba/Code Analysis/Binding/BoundBinaryOperator.cpp @@ -2,112 +2,57 @@ #include -#include "SyntaxKind.h" -#include "TypeSymbol.h" - using namespace Mamba; -BoundBinaryOperator::BoundBinaryOperator( - const enum SyntaxKind SyntaxKind, - const BoundBinaryOperatorKind Kind, - const std::shared_ptr Type -) noexcept : +BoundBinaryOperator::BoundBinaryOperator(enum SyntaxKind SyntaxKind, BoundBinaryOperatorKind Kind, const TypeSymbol* Type) noexcept : BoundBinaryOperator(SyntaxKind, Kind, Type, Type, Type) { } -BoundBinaryOperator::BoundBinaryOperator( - const enum SyntaxKind SyntaxKind, - const BoundBinaryOperatorKind Kind, - const std::shared_ptr OperandType, - const std::shared_ptr ResultType -) noexcept : +BoundBinaryOperator::BoundBinaryOperator(enum SyntaxKind SyntaxKind, BoundBinaryOperatorKind Kind, const TypeSymbol* OperandType, const TypeSymbol* ResultType) noexcept : BoundBinaryOperator(SyntaxKind, Kind, OperandType, OperandType, ResultType) { } -BoundBinaryOperator::BoundBinaryOperator( - const enum SyntaxKind SyntaxKind, - const BoundBinaryOperatorKind Kind, - const std::shared_ptr LeftType, - const std::shared_ptr RightType, - const std::shared_ptr ResultType -) noexcept : +BoundBinaryOperator::BoundBinaryOperator(enum SyntaxKind SyntaxKind, BoundBinaryOperatorKind Kind, const TypeSymbol* LeftType, const TypeSymbol* RightType, const TypeSymbol* ResultType) noexcept : SyntaxKind(SyntaxKind), Kind(Kind), LeftType(LeftType), RightType(RightType), Type(ResultType) { } BoundBinaryOperator BoundBinaryOperator::Operators[]{ - BoundBinaryOperator(SyntaxKind::PlusToken, BoundBinaryOperatorKind::Addition, TypeSymbol::Int), - BoundBinaryOperator(SyntaxKind::MinusToken, BoundBinaryOperatorKind::Subtraction, TypeSymbol::Int), - BoundBinaryOperator(SyntaxKind::StarToken, BoundBinaryOperatorKind::Multiplication, TypeSymbol::Int), - BoundBinaryOperator(SyntaxKind::SlashToken, BoundBinaryOperatorKind::Division, TypeSymbol::Int), - BoundBinaryOperator(SyntaxKind::AmpersandToken, BoundBinaryOperatorKind::BitwiseAnd, TypeSymbol::Int), - BoundBinaryOperator(SyntaxKind::PipeToken, BoundBinaryOperatorKind::BitwiseOr, TypeSymbol::Int), - BoundBinaryOperator(SyntaxKind::HatToken, BoundBinaryOperatorKind::BitwiseXor, TypeSymbol::Int), - BoundBinaryOperator( - SyntaxKind::EqualsEqualsToken, - BoundBinaryOperatorKind::Equals, - TypeSymbol::Int, - TypeSymbol::Bool - ), - BoundBinaryOperator( - SyntaxKind::BangEqualsToken, - BoundBinaryOperatorKind::NotEquals, - TypeSymbol::Int, - TypeSymbol::Bool - ), - BoundBinaryOperator(SyntaxKind::LessToken, BoundBinaryOperatorKind::Less, TypeSymbol::Int, TypeSymbol::Bool), - BoundBinaryOperator( - SyntaxKind::LessOrEqualsToken, - BoundBinaryOperatorKind::LessOrEquals, - TypeSymbol::Int, - TypeSymbol::Bool - ), - BoundBinaryOperator(SyntaxKind::GreaterToken, BoundBinaryOperatorKind::Greater, TypeSymbol::Int, TypeSymbol::Bool), - BoundBinaryOperator( - SyntaxKind::GreaterOrEqualsToken, - BoundBinaryOperatorKind::GreaterOrEquals, - TypeSymbol::Int, - TypeSymbol::Bool - ), - - BoundBinaryOperator(SyntaxKind::AmpersandToken, BoundBinaryOperatorKind::BitwiseAnd, TypeSymbol::Bool), - BoundBinaryOperator(SyntaxKind::AmpersandAmpersandToken, BoundBinaryOperatorKind::LogicalAnd, TypeSymbol::Bool), - BoundBinaryOperator(SyntaxKind::PipeToken, BoundBinaryOperatorKind::BitwiseOr, TypeSymbol::Bool), - BoundBinaryOperator(SyntaxKind::PipePipeToken, BoundBinaryOperatorKind::LogicalOr, TypeSymbol::Bool), - BoundBinaryOperator(SyntaxKind::HatToken, BoundBinaryOperatorKind::BitwiseXor, TypeSymbol::Bool), - BoundBinaryOperator(SyntaxKind::EqualsEqualsToken, BoundBinaryOperatorKind::Equals, TypeSymbol::Bool), - BoundBinaryOperator(SyntaxKind::BangEqualsToken, BoundBinaryOperatorKind::NotEquals, TypeSymbol::Bool), - - BoundBinaryOperator(SyntaxKind::PlusToken, BoundBinaryOperatorKind::Addition, TypeSymbol::String), - BoundBinaryOperator( - SyntaxKind::EqualsEqualsToken, - BoundBinaryOperatorKind::Equals, - TypeSymbol::String, - TypeSymbol::Bool - ), - BoundBinaryOperator( - SyntaxKind::BangEqualsToken, - BoundBinaryOperatorKind::NotEquals, - TypeSymbol::String, - TypeSymbol::Bool - ), + BoundBinaryOperator(SyntaxKind::PlusToken, BoundBinaryOperatorKind::Addition, &TypeSymbol::Int), + BoundBinaryOperator(SyntaxKind::MinusToken, BoundBinaryOperatorKind::Subtraction, &TypeSymbol::Int), + BoundBinaryOperator(SyntaxKind::StarToken, BoundBinaryOperatorKind::Multiplication, &TypeSymbol::Int), + BoundBinaryOperator(SyntaxKind::SlashToken, BoundBinaryOperatorKind::Division, &TypeSymbol::Int), + BoundBinaryOperator(SyntaxKind::AmpersandToken, BoundBinaryOperatorKind::BitwiseAnd, &TypeSymbol::Int), + BoundBinaryOperator(SyntaxKind::PipeToken, BoundBinaryOperatorKind::BitwiseOr, &TypeSymbol::Int), + BoundBinaryOperator(SyntaxKind::HatToken, BoundBinaryOperatorKind::BitwiseXor, &TypeSymbol::Int), + BoundBinaryOperator(SyntaxKind::EqualsEqualsToken, BoundBinaryOperatorKind::Equals, &TypeSymbol::Int, &TypeSymbol::Bool), + BoundBinaryOperator(SyntaxKind::BangEqualsToken, BoundBinaryOperatorKind::NotEquals, &TypeSymbol::Int, &TypeSymbol::Bool), + BoundBinaryOperator(SyntaxKind::LessToken, BoundBinaryOperatorKind::Less, &TypeSymbol::Int, &TypeSymbol::Bool), + BoundBinaryOperator(SyntaxKind::LessOrEqualsToken, BoundBinaryOperatorKind::LessOrEquals, &TypeSymbol::Int, &TypeSymbol::Bool), + BoundBinaryOperator(SyntaxKind::GreaterToken, BoundBinaryOperatorKind::Greater, &TypeSymbol::Int, &TypeSymbol::Bool), + BoundBinaryOperator(SyntaxKind::GreaterOrEqualsToken, BoundBinaryOperatorKind::GreaterOrEquals, &TypeSymbol::Int, &TypeSymbol::Bool), + + BoundBinaryOperator(SyntaxKind::AmpersandToken, BoundBinaryOperatorKind::BitwiseAnd, &TypeSymbol::Bool), + BoundBinaryOperator(SyntaxKind::AmpersandAmpersandToken, BoundBinaryOperatorKind::LogicalAnd, &TypeSymbol::Bool), + BoundBinaryOperator(SyntaxKind::PipeToken, BoundBinaryOperatorKind::BitwiseOr, &TypeSymbol::Bool), + BoundBinaryOperator(SyntaxKind::PipePipeToken, BoundBinaryOperatorKind::LogicalOr, &TypeSymbol::Bool), + BoundBinaryOperator(SyntaxKind::HatToken, BoundBinaryOperatorKind::BitwiseXor, &TypeSymbol::Bool), + BoundBinaryOperator(SyntaxKind::EqualsEqualsToken, BoundBinaryOperatorKind::Equals, &TypeSymbol::Bool), + BoundBinaryOperator(SyntaxKind::BangEqualsToken, BoundBinaryOperatorKind::NotEquals, &TypeSymbol::Bool), + + BoundBinaryOperator(SyntaxKind::PlusToken, BoundBinaryOperatorKind::Addition, &TypeSymbol::String), + BoundBinaryOperator(SyntaxKind::EqualsEqualsToken, BoundBinaryOperatorKind::Equals, &TypeSymbol::String, &TypeSymbol::Bool), + BoundBinaryOperator(SyntaxKind::BangEqualsToken, BoundBinaryOperatorKind::NotEquals, &TypeSymbol::String, &TypeSymbol::Bool), }; -NullablePointer BoundBinaryOperator::Bind( - const enum SyntaxKind SyntaxKind, - const std::shared_ptr LeftType, - const std::shared_ptr RightType -) noexcept +NullablePointer BoundBinaryOperator::Bind(enum SyntaxKind SyntaxKind, const TypeSymbol* LeftType, const TypeSymbol* RightType) noexcept { - const auto Result = std::ranges::find_if( + auto Result = std::ranges::find_if( std::ranges::begin(Operators), std::ranges::end(Operators), - [=](const BoundBinaryOperator& Operator) { - return Operator.SyntaxKind == SyntaxKind && Operator.LeftType == LeftType - && Operator.RightType == RightType; - } + [=](const BoundBinaryOperator& Operator) { return Operator.SyntaxKind == SyntaxKind && Operator.LeftType == LeftType && Operator.RightType == RightType; } ); if (Result == std::ranges::end(Operators)) { diff --git a/src/Mamba/Code Analysis/Binding/BoundBinaryOperator.h b/src/Mamba/Code Analysis/Binding/BoundBinaryOperator.h index 483067f..3a07603 100644 --- a/src/Mamba/Code Analysis/Binding/BoundBinaryOperator.h +++ b/src/Mamba/Code Analysis/Binding/BoundBinaryOperator.h @@ -1,36 +1,18 @@ #pragma once -#include - #include "MambaCore.h" #include "BoundBinaryOperatorKind.h" #include "SyntaxKind.h" +#include "TypeSymbol.h" namespace Mamba { class BoundBinaryOperator { - [[nodiscard]] BoundBinaryOperator( - const SyntaxKind SyntaxKind, - const BoundBinaryOperatorKind Kind, - const std::shared_ptr Type - ) noexcept; - - [[nodiscard]] BoundBinaryOperator( - const SyntaxKind SyntaxKind, - const BoundBinaryOperatorKind Kind, - const std::shared_ptr OperandType, - const std::shared_ptr ResultType - ) noexcept; - - [[nodiscard]] BoundBinaryOperator( - const SyntaxKind SyntaxKind, - const BoundBinaryOperatorKind Kind, - const std::shared_ptr LeftType, - const std::shared_ptr RightType, - const std::shared_ptr ResultType - ) noexcept; + [[nodiscard]] BoundBinaryOperator(SyntaxKind SyntaxKind, BoundBinaryOperatorKind Kind, const TypeSymbol* Type) noexcept; + [[nodiscard]] BoundBinaryOperator(SyntaxKind SyntaxKind, BoundBinaryOperatorKind Kind, const TypeSymbol* OperandType, const TypeSymbol* ResultType) noexcept; + [[nodiscard]] BoundBinaryOperator(SyntaxKind SyntaxKind, BoundBinaryOperatorKind Kind, const TypeSymbol* LeftType, const TypeSymbol* RightType, const TypeSymbol* ResultType) noexcept; BoundBinaryOperator(const BoundBinaryOperator&) = delete; BoundBinaryOperator(BoundBinaryOperator&&) = delete; @@ -39,20 +21,20 @@ namespace Mamba BoundBinaryOperator& operator=(BoundBinaryOperator&&) = delete; public: - const enum SyntaxKind SyntaxKind; - const BoundBinaryOperatorKind Kind; - const std::shared_ptr LeftType; - const std::shared_ptr RightType; - const std::shared_ptr Type; + enum SyntaxKind SyntaxKind; + BoundBinaryOperatorKind Kind; + const TypeSymbol* LeftType; + const TypeSymbol* RightType; + const TypeSymbol* Type; private: static BoundBinaryOperator Operators[]; public: static NullablePointer Bind( - const enum SyntaxKind SyntaxKind, - const std::shared_ptr LeftType, - const std::shared_ptr RightType + enum SyntaxKind SyntaxKind, + const TypeSymbol* LeftType, + const TypeSymbol* RightType ) noexcept; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Binding/BoundBlockStatement.cpp b/src/Mamba/Code Analysis/Binding/BoundBlockStatement.cpp index d04815f..0579bbd 100644 --- a/src/Mamba/Code Analysis/Binding/BoundBlockStatement.cpp +++ b/src/Mamba/Code Analysis/Binding/BoundBlockStatement.cpp @@ -3,27 +3,22 @@ using namespace Mamba; BoundBlockStatement::BoundBlockStatement( - const std::shared_ptr Syntax, - const std::span> Statements + const SyntaxNode* Syntax, + std::vector&& Statements ) noexcept : - Super(Syntax), -#if __cpp_lib_containers_ranges == 202202L - Statements(std::from_range, Statements) -#else - Statements(Statements.begin(), Statements.end()) -#endif + Super(Syntax), Statements(std::move(Statements)) { } -BoundBlockStatement::BoundBlockStatement( - const std::shared_ptr Syntax, - std::vector>&& Statements -) noexcept : - Super(Syntax), Statements(std::move(Statements)) +BoundBlockStatement::~BoundBlockStatement() noexcept { + for (auto&& Statement : Statements) + { + delete Statement; + } } -BoundNodeKind Mamba::BoundBlockStatement::Kind() const noexcept +BoundNodeKind BoundBlockStatement::Kind() const noexcept { return BoundNodeKind::BlockStatement; } diff --git a/src/Mamba/Code Analysis/Binding/BoundBlockStatement.h b/src/Mamba/Code Analysis/Binding/BoundBlockStatement.h index 94c8054..a876dde 100644 --- a/src/Mamba/Code Analysis/Binding/BoundBlockStatement.h +++ b/src/Mamba/Code Analysis/Binding/BoundBlockStatement.h @@ -2,7 +2,6 @@ #include "BoundNodeKind.h" #include "BoundStatement.h" -#include namespace Mamba { @@ -11,18 +10,11 @@ namespace Mamba public: using Super = BoundStatement; - [[nodiscard]] BoundBlockStatement( - const std::shared_ptr Syntax, - const std::span> Statements - ) noexcept; - - [[nodiscard]] BoundBlockStatement( - const std::shared_ptr Syntax, - std::vector>&& Statements - ) noexcept; + [[nodiscard]] BoundBlockStatement(const SyntaxNode* Syntax, std::vector&& Statements) noexcept; + ~BoundBlockStatement() noexcept override; BoundNodeKind Kind() const noexcept override; - const std::vector> Statements; + std::vector Statements; }; }; // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Binding/BoundCallExpression.cpp b/src/Mamba/Code Analysis/Binding/BoundCallExpression.cpp index db609ce..984ecc2 100644 --- a/src/Mamba/Code Analysis/Binding/BoundCallExpression.cpp +++ b/src/Mamba/Code Analysis/Binding/BoundCallExpression.cpp @@ -4,27 +4,20 @@ using namespace Mamba; BoundCallExpression::BoundCallExpression( - const std::shared_ptr Syntax, - const std::shared_ptr Function, - const std::span> Arguments + const SyntaxNode* Syntax, + const FunctionSymbol* Function, + std::vector&& Arguments ) noexcept : - Super(Syntax), - Function(Function), -#if __cpp_lib_containers_ranges == 202202L - Arguments(std::from_range, Arguments) -#else - Arguments(Arguments.begin(), Arguments.end()) -#endif + Super(Syntax), Function(Function), Arguments(std::move(Arguments)) { } -BoundCallExpression::BoundCallExpression( - const std::shared_ptr Syntax, - const std::shared_ptr Function, - std::vector>&& Arguments -) noexcept : - Super(Syntax), Function(Function), Arguments(std::move(Arguments)) +BoundCallExpression::~BoundCallExpression() noexcept { + for (auto Argument : Arguments) + { + delete Argument; + } } BoundNodeKind BoundCallExpression::Kind() const noexcept @@ -32,7 +25,7 @@ BoundNodeKind BoundCallExpression::Kind() const noexcept return BoundNodeKind::CallExpression; } -std::shared_ptr BoundCallExpression::Type() const noexcept +const TypeSymbol* BoundCallExpression::Type() const noexcept { return Function->Type; } diff --git a/src/Mamba/Code Analysis/Binding/BoundCallExpression.h b/src/Mamba/Code Analysis/Binding/BoundCallExpression.h index 9b2395c..fc3bca3 100644 --- a/src/Mamba/Code Analysis/Binding/BoundCallExpression.h +++ b/src/Mamba/Code Analysis/Binding/BoundCallExpression.h @@ -2,8 +2,8 @@ #include "BoundExpression.h" #include "BoundNodeKind.h" +#include "FunctionSymbol.h" -#include #include namespace Mamba @@ -14,21 +14,17 @@ namespace Mamba using Super = BoundExpression; [[nodiscard]] BoundCallExpression( - const std::shared_ptr Syntax, - const std::shared_ptr Function, - const std::span> Arguments + const SyntaxNode* Syntax, + const FunctionSymbol* Function, + std::vector&& Arguments ) noexcept; - [[nodiscard]] BoundCallExpression( - const std::shared_ptr Syntax, - const std::shared_ptr Function, - std::vector>&& Arguments - ) noexcept; + ~BoundCallExpression() noexcept override; BoundNodeKind Kind() const noexcept override; - std::shared_ptr Type() const noexcept override; + const TypeSymbol* Type() const noexcept override; - const std::shared_ptr Function; - const std::vector> Arguments; + const FunctionSymbol* Function; + const std::vector Arguments; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Binding/BoundCompilationUnit.cpp b/src/Mamba/Code Analysis/Binding/BoundCompilationUnit.cpp index e5a2367..de69e79 100644 --- a/src/Mamba/Code Analysis/Binding/BoundCompilationUnit.cpp +++ b/src/Mamba/Code Analysis/Binding/BoundCompilationUnit.cpp @@ -1,11 +1,10 @@ #include "BoundCompilationUnit.h" -#include "BoundScope.h" using namespace Mamba; BoundCompilationUnit::BoundCompilationUnit( - const std::shared_ptr SyntaxNode, - const std::shared_ptr GlobalScope + const SyntaxNode* SyntaxNode, + const BoundScope* GlobalScope ) noexcept : Super(SyntaxNode), GlobalScope(GlobalScope) { diff --git a/src/Mamba/Code Analysis/Binding/BoundCompilationUnit.h b/src/Mamba/Code Analysis/Binding/BoundCompilationUnit.h index d53fee5..d302885 100644 --- a/src/Mamba/Code Analysis/Binding/BoundCompilationUnit.h +++ b/src/Mamba/Code Analysis/Binding/BoundCompilationUnit.h @@ -1,8 +1,8 @@ #pragma once -#include - #include "BoundNode.h" +#include "BoundScope.h" +#include "SyntaxNode.h" namespace Mamba { @@ -12,12 +12,12 @@ namespace Mamba using Super = BoundNode; [[nodiscard]] BoundCompilationUnit( - const std::shared_ptr SyntaxNode, - const std::shared_ptr GlobalScope + const SyntaxNode* SyntaxNode, + const BoundScope* GlobalScope ) noexcept; virtual BoundNodeKind Kind() const noexcept override; - const std::shared_ptr GlobalScope; + const BoundScope* GlobalScope; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Binding/BoundCompoundAssignmentExpression.cpp b/src/Mamba/Code Analysis/Binding/BoundCompoundAssignmentExpression.cpp index d709934..c219188 100644 --- a/src/Mamba/Code Analysis/Binding/BoundCompoundAssignmentExpression.cpp +++ b/src/Mamba/Code Analysis/Binding/BoundCompoundAssignmentExpression.cpp @@ -3,21 +3,26 @@ using namespace Mamba; BoundCompoundAssignmentExpression::BoundCompoundAssignmentExpression( - const std::shared_ptr Syntax, - const std::shared_ptr Variable, + const SyntaxNode* Syntax, + const VariableSymbol* Variable, const BoundBinaryOperator& Operator, - const std::shared_ptr Expression + const BoundExpression* Expression ) noexcept : Super(Syntax), Variable(Variable), Operator(Operator), Expression(Expression) { } +BoundCompoundAssignmentExpression::~BoundCompoundAssignmentExpression() noexcept +{ + delete Expression; +} + BoundNodeKind BoundCompoundAssignmentExpression::Kind() const noexcept { return BoundNodeKind::CompoundAssignmentExpression; } -std::shared_ptr BoundCompoundAssignmentExpression::Type() const noexcept +const TypeSymbol* BoundCompoundAssignmentExpression::Type() const noexcept { return Expression->Type(); } diff --git a/src/Mamba/Code Analysis/Binding/BoundCompoundAssignmentExpression.h b/src/Mamba/Code Analysis/Binding/BoundCompoundAssignmentExpression.h index cc3cd24..7d15590 100644 --- a/src/Mamba/Code Analysis/Binding/BoundCompoundAssignmentExpression.h +++ b/src/Mamba/Code Analysis/Binding/BoundCompoundAssignmentExpression.h @@ -1,9 +1,9 @@ #pragma once -#include - +#include "BoundBinaryOperator.h" #include "BoundExpression.h" #include "BoundNodeKind.h" +#include "VariableSymbol.h" namespace Mamba { @@ -13,17 +13,19 @@ namespace Mamba using Super = BoundExpression; [[nodiscard]] BoundCompoundAssignmentExpression( - const std::shared_ptr Syntax, - const std::shared_ptr Variable, - const class BoundBinaryOperator& Operator, - const std::shared_ptr Expression + const SyntaxNode* Syntax, + const VariableSymbol* Variable, + const BoundBinaryOperator& Operator, + const BoundExpression* Expression ) noexcept; + ~BoundCompoundAssignmentExpression() noexcept override; + BoundNodeKind Kind() const noexcept override; - std::shared_ptr Type() const noexcept override; + const TypeSymbol* Type() const noexcept override; - const std::shared_ptr Variable; - const class BoundBinaryOperator& Operator; - const std::shared_ptr Expression; + const VariableSymbol* Variable; + const BoundBinaryOperator& Operator; + const BoundExpression* Expression; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Binding/BoundConstant.cpp b/src/Mamba/Code Analysis/Binding/BoundConstant.cpp deleted file mode 100644 index 9661270..0000000 --- a/src/Mamba/Code Analysis/Binding/BoundConstant.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include "BoundConstant.h" - -using namespace Mamba; - -BoundConstant::BoundConstant(struct Constant Constant) noexcept : - PrivateConstant(Constant) -{ -} - -Constant BoundConstant::Constant() noexcept -{ - return PrivateConstant -} diff --git a/src/Mamba/Code Analysis/Binding/BoundConstant.h b/src/Mamba/Code Analysis/Binding/BoundConstant.h deleted file mode 100644 index 6e24632..0000000 --- a/src/Mamba/Code Analysis/Binding/BoundConstant.h +++ /dev/null @@ -1,16 +0,0 @@ -#pragma once - -#include "Constant.h" - -namespace Mamba -{ - class BoundConstant - { - Constant PrivateConstant; - - public: - [[nodiscard]] BoundConstant(struct Constant Constant) noexcept; - - Constant Constant() noexcept; - }; -}; // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Binding/BoundDoWhileStatement.cpp b/src/Mamba/Code Analysis/Binding/BoundDoWhileStatement.cpp index 159373d..a268473 100644 --- a/src/Mamba/Code Analysis/Binding/BoundDoWhileStatement.cpp +++ b/src/Mamba/Code Analysis/Binding/BoundDoWhileStatement.cpp @@ -5,15 +5,21 @@ using namespace Mamba; BoundDoWhileStatement::BoundDoWhileStatement( - const std::shared_ptr SyntaxNode, - const std::shared_ptr Body, - const std::shared_ptr Condition + const SyntaxNode* SyntaxNode, + const BoundStatement* Body, + const BoundExpression* Condition ) noexcept : Super(SyntaxNode), Body(Body), Condition(Condition) { } -BoundNodeKind Mamba::BoundDoWhileStatement::Kind() const noexcept +BoundDoWhileStatement::~BoundDoWhileStatement() noexcept +{ + delete Body; + delete Condition; +} + +BoundNodeKind BoundDoWhileStatement::Kind() const noexcept { return BoundNodeKind::DoWhileStatement; } diff --git a/src/Mamba/Code Analysis/Binding/BoundDoWhileStatement.h b/src/Mamba/Code Analysis/Binding/BoundDoWhileStatement.h index 9caad3d..bf40bff 100644 --- a/src/Mamba/Code Analysis/Binding/BoundDoWhileStatement.h +++ b/src/Mamba/Code Analysis/Binding/BoundDoWhileStatement.h @@ -1,7 +1,6 @@ #pragma once -#include - +#include "BoundExpression.h" #include "BoundNodeKind.h" #include "BoundStatement.h" @@ -13,14 +12,16 @@ namespace Mamba using Super = BoundStatement; [[nodiscard]] BoundDoWhileStatement( - const std::shared_ptr SyntaxNode, - const std::shared_ptr Body, - const std::shared_ptr Condition + const SyntaxNode* SyntaxNode, + const BoundStatement* Body, + const BoundExpression* Condition ) noexcept; + ~BoundDoWhileStatement() noexcept override; + BoundNodeKind Kind() const noexcept override; - const std::shared_ptr Body; - const std::shared_ptr Condition; + const BoundStatement* Body; + const BoundExpression* Condition; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Binding/BoundExpression.cpp b/src/Mamba/Code Analysis/Binding/BoundExpression.cpp index c7d783c..2554456 100644 --- a/src/Mamba/Code Analysis/Binding/BoundExpression.cpp +++ b/src/Mamba/Code Analysis/Binding/BoundExpression.cpp @@ -2,7 +2,7 @@ using namespace Mamba; -BoundExpression::BoundExpression(const std::shared_ptr Syntax) noexcept : +BoundExpression::BoundExpression(const SyntaxNode* Syntax) noexcept : Super(Syntax) {} Constant BoundExpression::ConstantValue() const noexcept diff --git a/src/Mamba/Code Analysis/Binding/BoundExpression.h b/src/Mamba/Code Analysis/Binding/BoundExpression.h index 48a3b43..cbb9a90 100644 --- a/src/Mamba/Code Analysis/Binding/BoundExpression.h +++ b/src/Mamba/Code Analysis/Binding/BoundExpression.h @@ -1,9 +1,8 @@ #pragma once -#include - #include "BoundNode.h" #include "Constant.h" +#include "TypeSymbol.h" namespace Mamba { @@ -12,9 +11,9 @@ namespace Mamba public: using Super = BoundNode; - [[nodiscard]] BoundExpression(const std::shared_ptr Syntax) noexcept; + [[nodiscard]] BoundExpression(const SyntaxNode* Syntax) noexcept; - virtual std::shared_ptr Type() const noexcept = 0; + virtual const TypeSymbol* Type() const noexcept = 0; virtual Constant ConstantValue() const noexcept; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Binding/BoundExpressionStatement.cpp b/src/Mamba/Code Analysis/Binding/BoundExpressionStatement.cpp index e930a1a..fd64927 100644 --- a/src/Mamba/Code Analysis/Binding/BoundExpressionStatement.cpp +++ b/src/Mamba/Code Analysis/Binding/BoundExpressionStatement.cpp @@ -3,13 +3,18 @@ using namespace Mamba; BoundExpressionStatement::BoundExpressionStatement( - const std::shared_ptr Syntax, - const std::shared_ptr Expression + const SyntaxNode* Syntax, + const BoundExpression* Expression ) noexcept : Super(Syntax), Expression(Expression) { } +BoundExpressionStatement::~BoundExpressionStatement() noexcept +{ + delete Expression; +} + BoundNodeKind BoundExpressionStatement::Kind() const noexcept { return BoundNodeKind::ExpressionStatement; diff --git a/src/Mamba/Code Analysis/Binding/BoundExpressionStatement.h b/src/Mamba/Code Analysis/Binding/BoundExpressionStatement.h index 7d24e1b..d415783 100644 --- a/src/Mamba/Code Analysis/Binding/BoundExpressionStatement.h +++ b/src/Mamba/Code Analysis/Binding/BoundExpressionStatement.h @@ -1,7 +1,6 @@ #pragma once -#include - +#include "BoundExpression.h" #include "BoundNodeKind.h" #include "BoundStatement.h" @@ -13,12 +12,13 @@ namespace Mamba using Super = BoundStatement; [[nodiscard]] BoundExpressionStatement( - const std::shared_ptr Syntax, - const std::shared_ptr Expression + const SyntaxNode* Syntax, + const BoundExpression* Expression ) noexcept; + ~BoundExpressionStatement() noexcept override; BoundNodeKind Kind() const noexcept override; - const std::shared_ptr Expression; + const BoundExpression* Expression; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Binding/BoundForStatement.cpp b/src/Mamba/Code Analysis/Binding/BoundForStatement.cpp index d5ca24d..7550385 100644 --- a/src/Mamba/Code Analysis/Binding/BoundForStatement.cpp +++ b/src/Mamba/Code Analysis/Binding/BoundForStatement.cpp @@ -1,16 +1,15 @@ #include "BoundForStatement.h" #include "BoundExpression.h" -#include "BoundExpressionStatement.h" using namespace Mamba; BoundForStatement::BoundForStatement( - const std::shared_ptr Syntax, - const std::shared_ptr InitStatement, - const std::shared_ptr Condition, - const std::shared_ptr Expression, - const std::shared_ptr Body + const SyntaxNode* Syntax, + const BoundStatement* InitStatement, + const BoundExpression* Condition, + const BoundExpression* Expression, + const BoundStatement* Body ) noexcept : Super(Syntax), InitStatement(InitStatement), @@ -20,7 +19,15 @@ BoundForStatement::BoundForStatement( { } -BoundNodeKind Mamba::BoundForStatement::Kind() const noexcept +BoundForStatement::~BoundForStatement() noexcept +{ + delete InitStatement; + delete Condition; + delete Expression; + delete Body; +} + +BoundNodeKind BoundForStatement::Kind() const noexcept { return BoundNodeKind::ForStatement; } diff --git a/src/Mamba/Code Analysis/Binding/BoundForStatement.h b/src/Mamba/Code Analysis/Binding/BoundForStatement.h index cf1ca3f..990b543 100644 --- a/src/Mamba/Code Analysis/Binding/BoundForStatement.h +++ b/src/Mamba/Code Analysis/Binding/BoundForStatement.h @@ -1,7 +1,6 @@ #pragma once -#include - +#include "BoundExpression.h" #include "BoundNodeKind.h" #include "BoundStatement.h" @@ -13,18 +12,19 @@ namespace Mamba using Super = BoundStatement; [[nodiscard]] BoundForStatement( - const std::shared_ptr Syntax, - const std::shared_ptr InitStatement, - const std::shared_ptr Condition, - const std::shared_ptr Expression, - const std::shared_ptr Body + const SyntaxNode* Syntax, + const BoundStatement* InitStatement, + const BoundExpression* Condition, + const BoundExpression* Expression, + const BoundStatement* Body ) noexcept; + ~BoundForStatement() noexcept override; BoundNodeKind Kind() const noexcept override; - const std::shared_ptr InitStatement; - const std::shared_ptr Condition; - const std::shared_ptr Expression; - const std::shared_ptr Body; + const BoundStatement* InitStatement; + const BoundExpression* Condition; + const BoundExpression* Expression; + const BoundStatement* Body; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Binding/BoundFunctionDeclaration.cpp b/src/Mamba/Code Analysis/Binding/BoundFunctionDeclaration.cpp index eadca45..667d0d0 100644 --- a/src/Mamba/Code Analysis/Binding/BoundFunctionDeclaration.cpp +++ b/src/Mamba/Code Analysis/Binding/BoundFunctionDeclaration.cpp @@ -2,15 +2,19 @@ using namespace Mamba; -Mamba::BoundFunctionDeclaration::BoundFunctionDeclaration( - const std::shared_ptr Syntax, - const std::shared_ptr Body, - const std::shared_ptr Scope +BoundFunctionDeclaration::BoundFunctionDeclaration( + const SyntaxNode* Syntax, + const BoundStatement* Body ) noexcept : - Super(Syntax), Body(Body), Scope(Scope) + Super(Syntax), Body(Body) { } +BoundFunctionDeclaration::~BoundFunctionDeclaration() noexcept +{ + delete Body; +} + BoundNodeKind BoundFunctionDeclaration::Kind() const noexcept { return BoundNodeKind::FunctionDeclaration; diff --git a/src/Mamba/Code Analysis/Binding/BoundFunctionDeclaration.h b/src/Mamba/Code Analysis/Binding/BoundFunctionDeclaration.h index 0adbd28..1c64b33 100644 --- a/src/Mamba/Code Analysis/Binding/BoundFunctionDeclaration.h +++ b/src/Mamba/Code Analysis/Binding/BoundFunctionDeclaration.h @@ -1,7 +1,5 @@ #pragma once -#include - #include "BoundStatement.h" namespace Mamba @@ -12,14 +10,14 @@ namespace Mamba using Super = BoundStatement; [[nodiscard]] BoundFunctionDeclaration( - const std::shared_ptr Syntax, - const std::shared_ptr Body, - const std::shared_ptr Scope + const SyntaxNode* Syntax, + const BoundStatement* Body ) noexcept; + ~BoundFunctionDeclaration() noexcept override; + virtual BoundNodeKind Kind() const noexcept override; - std::shared_ptr Body; - std::shared_ptr Scope; + const BoundStatement* Body; }; }; // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Binding/BoundIfStatement.cpp b/src/Mamba/Code Analysis/Binding/BoundIfStatement.cpp index 0f06039..939ef6f 100644 --- a/src/Mamba/Code Analysis/Binding/BoundIfStatement.cpp +++ b/src/Mamba/Code Analysis/Binding/BoundIfStatement.cpp @@ -2,16 +2,18 @@ using namespace Mamba; -BoundIfStatement::BoundIfStatement( - const std::shared_ptr Syntax, - const std::shared_ptr Condition, - const std::shared_ptr ThenStatement, - const NullableSharedPtr ElseStatement -) noexcept : +BoundIfStatement::BoundIfStatement(const SyntaxNode* Syntax, const BoundExpression* Condition, const BoundStatement* ThenStatement, NullablePointer ElseStatement) noexcept : Super(Syntax), Condition(Condition), ThenStatement(ThenStatement), ElseStatement(ElseStatement) { } +BoundIfStatement::~BoundIfStatement() noexcept +{ + delete Condition; + delete ThenStatement; + delete ElseStatement; +} + BoundNodeKind BoundIfStatement::Kind() const noexcept { return BoundNodeKind::IfStatement; diff --git a/src/Mamba/Code Analysis/Binding/BoundIfStatement.h b/src/Mamba/Code Analysis/Binding/BoundIfStatement.h index 189ab5f..7a8e2ae 100644 --- a/src/Mamba/Code Analysis/Binding/BoundIfStatement.h +++ b/src/Mamba/Code Analysis/Binding/BoundIfStatement.h @@ -1,7 +1,6 @@ #pragma once -#include - +#include "BoundExpression.h" #include "BoundNodeKind.h" #include "BoundStatement.h" #include "MambaCore.h" @@ -13,17 +12,13 @@ namespace Mamba public: using Super = BoundStatement; - [[nodiscard]] BoundIfStatement( - const std::shared_ptr Syntax, - const std::shared_ptr Condition, - const std::shared_ptr ThenStatement, - const NullableSharedPtr ElseStatement - ) noexcept; + [[nodiscard]] BoundIfStatement(const SyntaxNode* Syntax, const BoundExpression* Condition, const BoundStatement* ThenStatement, NullablePointer ElseStatement) noexcept; + ~BoundIfStatement() noexcept override; BoundNodeKind Kind() const noexcept override; - const std::shared_ptr Condition; - const std::shared_ptr ThenStatement; - const NullableSharedPtr ElseStatement; + const BoundExpression* Condition; + const BoundStatement* ThenStatement; + NullablePointer ElseStatement; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Binding/BoundLiteralExpression.cpp b/src/Mamba/Code Analysis/Binding/BoundLiteralExpression.cpp index e0f3fa8..2429eba 100644 --- a/src/Mamba/Code Analysis/Binding/BoundLiteralExpression.cpp +++ b/src/Mamba/Code Analysis/Binding/BoundLiteralExpression.cpp @@ -1,45 +1,18 @@ #include "BoundLiteralExpression.h" - -#include - -#include "BoundConstant.h" -#include "Literal.h" +#include "MambaCore.h" #include "TypeSymbol.h" -using namespace Mamba; +#include +#include +#include -std::shared_ptr GetType(const std::shared_ptr Value) noexcept -{ - switch (Value->Type) - { - case LiteralType::String: - return TypeSymbol::String; - case LiteralType::SignedInt: - return TypeSymbol::Int; - case LiteralType::Boolean: - return TypeSymbol::Bool; - - case LiteralType::Character: - case LiteralType::UnsignedByte: - case LiteralType::UnsignedShort: - case LiteralType::UnsignedInt: - case LiteralType::UnsignedLong: - case LiteralType::SignedByte: - case LiteralType::SignedShort: - case LiteralType::SignedLong: - case LiteralType::Double: - case LiteralType::Float: - case LiteralType::Empty: - default: - return TypeSymbol::Void; - } -} +using namespace Mamba; BoundLiteralExpression::BoundLiteralExpression( - const std::shared_ptr Syntax, - const std::shared_ptr Value + const SyntaxNode* Syntax, + Literal Value ) noexcept : - Super(Syntax), PrivateType(GetType(Value)), Value(Value) + Super(Syntax), Value(Value) { } @@ -48,12 +21,39 @@ BoundNodeKind BoundLiteralExpression::Kind() const noexcept return BoundNodeKind::LiteralExpression; } -std::shared_ptr BoundLiteralExpression::Type() const noexcept +const TypeSymbol* BoundLiteralExpression::Type() const noexcept { - return PrivateType; + return std::visit( + [](T) { + if constexpr (std::is_same_v) + { + return &TypeSymbol::String; + } + else if constexpr (std::is_same_v) + { + return &TypeSymbol::Int; + } + else if constexpr (std::is_same_v) + { + return &TypeSymbol::Bool; + } + else if constexpr (std::is_same_v) + { + return &TypeSymbol::Double; + } + else if constexpr (std::is_same_v) + { + InternalCompilerError(std::source_location::current(), "Literal expression with no empty type."); + return &TypeSymbol::Void; + } + + std::unreachable(); + }, + Value.Value + ); } -std::shared_ptr BoundLiteralExpression::ConstantValue() const noexcept +Constant BoundLiteralExpression::ConstantValue() const noexcept { - return std::make_shared(Value); + return std::visit([](auto Value) -> Constant { return Value; }, Value.Value); } diff --git a/src/Mamba/Code Analysis/Binding/BoundLiteralExpression.h b/src/Mamba/Code Analysis/Binding/BoundLiteralExpression.h index 37d537e..8415061 100644 --- a/src/Mamba/Code Analysis/Binding/BoundLiteralExpression.h +++ b/src/Mamba/Code Analysis/Binding/BoundLiteralExpression.h @@ -1,9 +1,8 @@ #pragma once -#include - #include "BoundExpression.h" #include "BoundNodeKind.h" +#include "Literal.h" namespace Mamba { @@ -13,16 +12,15 @@ namespace Mamba using Super = BoundExpression; [[nodiscard]] BoundLiteralExpression( - const std::shared_ptr Syntax, - const std::shared_ptr Value + const SyntaxNode* Syntax, + Literal Value ) noexcept; BoundNodeKind Kind() const noexcept override; - std::shared_ptr Type() const noexcept override; - std::shared_ptr ConstantValue() const noexcept override; + const TypeSymbol* Type() const noexcept override; + Constant ConstantValue() const noexcept override; private: - const std::shared_ptr PrivateType; - const std::shared_ptr Value; + Literal Value; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Binding/BoundNode.cpp b/src/Mamba/Code Analysis/Binding/BoundNode.cpp index 6caee37..07ed243 100644 --- a/src/Mamba/Code Analysis/Binding/BoundNode.cpp +++ b/src/Mamba/Code Analysis/Binding/BoundNode.cpp @@ -2,4 +2,5 @@ using namespace Mamba; -BoundNode::BoundNode(const std::shared_ptr Syntax) noexcept : Syntax(Syntax) {} \ No newline at end of file +BoundNode::BoundNode(const SyntaxNode* Syntax) noexcept : + Syntax(Syntax) {} \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Binding/BoundNode.h b/src/Mamba/Code Analysis/Binding/BoundNode.h index c80d234..9f1502d 100644 --- a/src/Mamba/Code Analysis/Binding/BoundNode.h +++ b/src/Mamba/Code Analysis/Binding/BoundNode.h @@ -1,20 +1,19 @@ #pragma once -#include - #include "BoundNodeKind.h" +#include "SyntaxNode.h" namespace Mamba { class BoundNode { protected: - [[nodiscard]] BoundNode(const std::shared_ptr Syntax) noexcept; + [[nodiscard]] BoundNode(const SyntaxNode* Syntax) noexcept; public: - virtual ~BoundNode() = default; + virtual ~BoundNode() noexcept = default; virtual BoundNodeKind Kind() const noexcept = 0; - const std::shared_ptr Syntax; + const SyntaxNode* Syntax; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Binding/BoundNopStatement.cpp b/src/Mamba/Code Analysis/Binding/BoundNopStatement.cpp index 5c5970d..62e9a17 100644 --- a/src/Mamba/Code Analysis/Binding/BoundNopStatement.cpp +++ b/src/Mamba/Code Analysis/Binding/BoundNopStatement.cpp @@ -2,7 +2,8 @@ using namespace Mamba; -BoundNopStatement::BoundNopStatement(const std::shared_ptr Syntax) noexcept : Super(Syntax) {} +BoundNopStatement::BoundNopStatement(const SyntaxNode* Syntax) noexcept : + Super(Syntax) {} BoundNodeKind BoundNopStatement::Kind() const noexcept { diff --git a/src/Mamba/Code Analysis/Binding/BoundNopStatement.h b/src/Mamba/Code Analysis/Binding/BoundNopStatement.h index 9049927..3303101 100644 --- a/src/Mamba/Code Analysis/Binding/BoundNopStatement.h +++ b/src/Mamba/Code Analysis/Binding/BoundNopStatement.h @@ -12,7 +12,7 @@ namespace Mamba public: using Super = BoundStatement; - [[nodiscard]] BoundNopStatement(const std::shared_ptr Syntax) noexcept; + [[nodiscard]] BoundNopStatement(const SyntaxNode* Syntax) noexcept; BoundNodeKind Kind() const noexcept override; }; diff --git a/src/Mamba/Code Analysis/Binding/BoundReturnStatement.cpp b/src/Mamba/Code Analysis/Binding/BoundReturnStatement.cpp index 37479cf..13d68ad 100644 --- a/src/Mamba/Code Analysis/Binding/BoundReturnStatement.cpp +++ b/src/Mamba/Code Analysis/Binding/BoundReturnStatement.cpp @@ -3,8 +3,8 @@ using namespace Mamba; BoundReturnStatement::BoundReturnStatement( - const std::shared_ptr Syntax, - const std::shared_ptr Expression + const SyntaxNode* Syntax, + const BoundExpression* Expression ) noexcept : Super(Syntax), Expression(Expression) { @@ -14,3 +14,8 @@ BoundNodeKind BoundReturnStatement::Kind() const noexcept { return BoundNodeKind::ReturnStatement; } + +BoundReturnStatement::~BoundReturnStatement() noexcept +{ + delete Expression; +} diff --git a/src/Mamba/Code Analysis/Binding/BoundReturnStatement.h b/src/Mamba/Code Analysis/Binding/BoundReturnStatement.h index aaacdba..01c3a06 100644 --- a/src/Mamba/Code Analysis/Binding/BoundReturnStatement.h +++ b/src/Mamba/Code Analysis/Binding/BoundReturnStatement.h @@ -1,7 +1,6 @@ #pragma once -#include - +#include "BoundExpression.h" #include "BoundStatement.h" namespace Mamba @@ -12,12 +11,13 @@ namespace Mamba using Super = BoundStatement; [[nodiscard]] BoundReturnStatement( - const std::shared_ptr Syntax, - const std::shared_ptr Expression + const SyntaxNode* Syntax, + const BoundExpression* Expression ) noexcept; + ~BoundReturnStatement() noexcept override; BoundNodeKind Kind() const noexcept override; - const std::shared_ptr Expression; + const BoundExpression* Expression; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Binding/BoundStatement.cpp b/src/Mamba/Code Analysis/Binding/BoundStatement.cpp index 8bccfef..332b32b 100644 --- a/src/Mamba/Code Analysis/Binding/BoundStatement.cpp +++ b/src/Mamba/Code Analysis/Binding/BoundStatement.cpp @@ -2,4 +2,5 @@ using namespace Mamba; -BoundStatement::BoundStatement(const std::shared_ptr Syntax) noexcept : Super(Syntax) {} \ No newline at end of file +BoundStatement::BoundStatement(const SyntaxNode* Syntax) noexcept : + Super(Syntax) {} \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Binding/BoundStatement.h b/src/Mamba/Code Analysis/Binding/BoundStatement.h index 8f379ca..d692e69 100644 --- a/src/Mamba/Code Analysis/Binding/BoundStatement.h +++ b/src/Mamba/Code Analysis/Binding/BoundStatement.h @@ -2,7 +2,6 @@ #include "BoundNode.h" #include "SyntaxNode.h" -#include namespace Mamba { @@ -11,6 +10,6 @@ namespace Mamba public: using Super = BoundNode; - [[nodiscard]] BoundStatement(const std::shared_ptr Syntax) noexcept; + [[nodiscard]] BoundStatement(const SyntaxNode* Syntax) noexcept; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Binding/BoundUnaryExpression.cpp b/src/Mamba/Code Analysis/Binding/BoundUnaryExpression.cpp index 563cb72..1a1c53b 100644 --- a/src/Mamba/Code Analysis/Binding/BoundUnaryExpression.cpp +++ b/src/Mamba/Code Analysis/Binding/BoundUnaryExpression.cpp @@ -1,30 +1,35 @@ #include "BoundUnaryExpression.h" -#include "BoundConstant.h" #include "ConstantFolding.h" +#include "TypeSymbol.h" using namespace Mamba; BoundUnaryExpression::BoundUnaryExpression( - const std::shared_ptr Syntax, + const SyntaxNode* Syntax, const BoundUnaryOperator& Operator, - const std::shared_ptr Operand + const BoundExpression* Operand ) noexcept : Super(Syntax), Operator(Operator), Operand(Operand) { } +BoundUnaryExpression::~BoundUnaryExpression() noexcept +{ + delete Operand; +} + BoundNodeKind BoundUnaryExpression::Kind() const noexcept { return BoundNodeKind::UnaryExpression; } -std::shared_ptr BoundUnaryExpression::Type() const noexcept +const TypeSymbol* BoundUnaryExpression::Type() const noexcept { return Operand->Type(); } -NullableSharedPtr BoundUnaryExpression::ConstantValue() const noexcept +Constant BoundUnaryExpression::ConstantValue() const noexcept { return ConstantFolding::Fold(Operator, Operand); } \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Binding/BoundUnaryExpression.h b/src/Mamba/Code Analysis/Binding/BoundUnaryExpression.h index e2bca89..a1d9cf9 100644 --- a/src/Mamba/Code Analysis/Binding/BoundUnaryExpression.h +++ b/src/Mamba/Code Analysis/Binding/BoundUnaryExpression.h @@ -1,10 +1,8 @@ #pragma once -#include - #include "BoundExpression.h" #include "BoundNodeKind.h" -#include "MambaCore.h" +#include "BoundUnaryOperator.h" namespace Mamba { @@ -14,16 +12,18 @@ namespace Mamba using Super = BoundExpression; [[nodiscard]] BoundUnaryExpression( - const std::shared_ptr Syntax, - const class BoundUnaryOperator& Operator, - const std::shared_ptr Operand + const SyntaxNode* Syntax, + const BoundUnaryOperator& Operator, + const BoundExpression* Operand ) noexcept; + ~BoundUnaryExpression() noexcept override; + BoundNodeKind Kind() const noexcept override; - std::shared_ptr Type() const noexcept override; - NullableSharedPtr ConstantValue() const noexcept override; + const TypeSymbol* Type() const noexcept override; + Constant ConstantValue() const noexcept override; - const class BoundUnaryOperator& Operator; - const std::shared_ptr Operand; + const BoundUnaryOperator& Operator; + const BoundExpression* Operand; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Binding/BoundUnaryOperator.cpp b/src/Mamba/Code Analysis/Binding/BoundUnaryOperator.cpp index ba11004..8ffbe28 100644 --- a/src/Mamba/Code Analysis/Binding/BoundUnaryOperator.cpp +++ b/src/Mamba/Code Analysis/Binding/BoundUnaryOperator.cpp @@ -2,48 +2,30 @@ #include -#include "BoundUnaryOperatorKind.h" -#include "MambaCore.h" -#include "SyntaxKind.h" -#include "TypeSymbol.h" - using namespace Mamba; -BoundUnaryOperator::BoundUnaryOperator( - const enum SyntaxKind SyntaxKind, - const BoundUnaryOperatorKind Kind, - const std::shared_ptr OperandType -) noexcept : +BoundUnaryOperator::BoundUnaryOperator(enum SyntaxKind SyntaxKind, const BoundUnaryOperatorKind Kind, const TypeSymbol* OperandType) noexcept : SyntaxKind(SyntaxKind), Kind(Kind), OperandType(OperandType) { } -BoundUnaryOperator::BoundUnaryOperator( - const enum SyntaxKind SyntaxKind, - const BoundUnaryOperatorKind Kind, - const std::shared_ptr OperandType, - const std::shared_ptr ResultType -) noexcept : +BoundUnaryOperator::BoundUnaryOperator(enum SyntaxKind SyntaxKind, const BoundUnaryOperatorKind Kind, const TypeSymbol* OperandType, const TypeSymbol* ResultType) noexcept : SyntaxKind(SyntaxKind), Kind(Kind), OperandType(OperandType), ResultType(ResultType) {}; BoundUnaryOperator BoundUnaryOperator::Operators[]{ - BoundUnaryOperator(SyntaxKind::BangToken, BoundUnaryOperatorKind::LogicalNegation, TypeSymbol::Bool), + BoundUnaryOperator(SyntaxKind::BangToken, BoundUnaryOperatorKind::LogicalNegation, &TypeSymbol::Bool), - BoundUnaryOperator(SyntaxKind::PlusToken, BoundUnaryOperatorKind::Identity, TypeSymbol::Int), - BoundUnaryOperator(SyntaxKind::MinusToken, BoundUnaryOperatorKind::Negation, TypeSymbol::Int), - BoundUnaryOperator(SyntaxKind::TildeToken, BoundUnaryOperatorKind::OnesComplement, TypeSymbol::Int) + BoundUnaryOperator(SyntaxKind::PlusToken, BoundUnaryOperatorKind::Identity, &TypeSymbol::Int), + BoundUnaryOperator(SyntaxKind::MinusToken, BoundUnaryOperatorKind::Negation, &TypeSymbol::Int), + BoundUnaryOperator(SyntaxKind::TildeToken, BoundUnaryOperatorKind::OnesComplement, &TypeSymbol::Int) }; -NullablePointer BoundUnaryOperator::Bind( - const enum SyntaxKind SyntaxKind, - const std::shared_ptr OperandType -) noexcept +NullablePointer BoundUnaryOperator::Bind(enum SyntaxKind SyntaxKind, const TypeSymbol* OperandType) noexcept { - const auto Result = std::ranges::find_if( + auto Result = std::ranges::find_if( std::ranges::begin(Operators), std::ranges::end(Operators), - [=](const BoundUnaryOperator& Operator) - { return Operator.SyntaxKind == SyntaxKind && Operator.OperandType == OperandType; } + [=](auto Operator) { return Operator.SyntaxKind == SyntaxKind && Operator.OperandType == OperandType; } ); if (Result == std::ranges::end(Operators)) { diff --git a/src/Mamba/Code Analysis/Binding/BoundUnaryOperator.h b/src/Mamba/Code Analysis/Binding/BoundUnaryOperator.h index 8a5612d..88a13eb 100644 --- a/src/Mamba/Code Analysis/Binding/BoundUnaryOperator.h +++ b/src/Mamba/Code Analysis/Binding/BoundUnaryOperator.h @@ -1,40 +1,28 @@ #pragma once -#include - #include "BoundUnaryOperatorKind.h" #include "MambaCore.h" #include "SyntaxKind.h" +#include "TypeSymbol.h" namespace Mamba { class BoundUnaryOperator { - [[nodiscard]] BoundUnaryOperator( - const SyntaxKind SyntaxKind, - const BoundUnaryOperatorKind Kind, - const std::shared_ptr OperandType - ) noexcept; - - [[nodiscard]] BoundUnaryOperator( - const SyntaxKind SyntaxKind, - const BoundUnaryOperatorKind Kind, - const std::shared_ptr OperandType, - const std::shared_ptr ResultType - ) noexcept; + [[nodiscard]] BoundUnaryOperator(SyntaxKind SyntaxKind, BoundUnaryOperatorKind Kind, const TypeSymbol* OperandType) noexcept; + [[nodiscard]] BoundUnaryOperator(SyntaxKind SyntaxKind, BoundUnaryOperatorKind Kind, const TypeSymbol* OperandType, const TypeSymbol* ResultType) noexcept; public: - const enum SyntaxKind SyntaxKind; - const BoundUnaryOperatorKind Kind; - const std::shared_ptr OperandType; - const std::shared_ptr ResultType; + enum SyntaxKind SyntaxKind; + BoundUnaryOperatorKind Kind; + const TypeSymbol* OperandType; + const TypeSymbol* ResultType; private: static BoundUnaryOperator Operators[]; public: // when the return value is not null, the life time of the object lasts to the end of the program - static NullablePointer - Bind(const enum SyntaxKind SyntaxKind, const std::shared_ptr OperandType) noexcept; + static NullablePointer Bind(enum SyntaxKind SyntaxKind, const TypeSymbol* OperandType) noexcept; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Binding/BoundVariableDeclaration.cpp b/src/Mamba/Code Analysis/Binding/BoundVariableDeclaration.cpp index 59fc242..f921ee3 100644 --- a/src/Mamba/Code Analysis/Binding/BoundVariableDeclaration.cpp +++ b/src/Mamba/Code Analysis/Binding/BoundVariableDeclaration.cpp @@ -3,14 +3,19 @@ using namespace Mamba; BoundVariableDeclaration::BoundVariableDeclaration( - const std::shared_ptr Syntax, - const std::shared_ptr Variable, - const std::shared_ptr Initializer + const SyntaxNode* Syntax, + const VariableSymbol* Variable, + const BoundExpression* Initializer ) noexcept : Super(Syntax), Variable(Variable), Initializer(Initializer) { } +BoundVariableDeclaration::~BoundVariableDeclaration() noexcept +{ + delete Initializer; +} + BoundNodeKind BoundVariableDeclaration::Kind() const noexcept { return BoundNodeKind::VariableDeclaration; diff --git a/src/Mamba/Code Analysis/Binding/BoundVariableDeclaration.h b/src/Mamba/Code Analysis/Binding/BoundVariableDeclaration.h index a0e38ec..1d03ee6 100644 --- a/src/Mamba/Code Analysis/Binding/BoundVariableDeclaration.h +++ b/src/Mamba/Code Analysis/Binding/BoundVariableDeclaration.h @@ -1,8 +1,8 @@ #pragma once -#include - +#include "BoundExpression.h" #include "BoundStatement.h" +#include "VariableSymbol.h" namespace Mamba { @@ -12,14 +12,16 @@ namespace Mamba using Super = BoundStatement; [[nodiscard]] BoundVariableDeclaration( - const std::shared_ptr Syntax, - const std::shared_ptr Variable, - const std::shared_ptr Initializer + const SyntaxNode* Syntax, + const VariableSymbol* Variable, + const BoundExpression* Initializer ) noexcept; + ~BoundVariableDeclaration() noexcept override; + BoundNodeKind Kind() const noexcept override; - const std::shared_ptr Variable; - const std::shared_ptr Initializer; + const VariableSymbol* Variable; + const BoundExpression* Initializer; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Binding/BoundVariableExpression.cpp b/src/Mamba/Code Analysis/Binding/BoundVariableExpression.cpp index e7cb221..4d904a1 100644 --- a/src/Mamba/Code Analysis/Binding/BoundVariableExpression.cpp +++ b/src/Mamba/Code Analysis/Binding/BoundVariableExpression.cpp @@ -4,10 +4,7 @@ using namespace Mamba; -BoundVariableExpression::BoundVariableExpression( - const std::shared_ptr Syntax, - const std::shared_ptr Variable -) noexcept : +BoundVariableExpression::BoundVariableExpression(const SyntaxNode* Syntax, const VariableSymbol* Variable) noexcept : Super(Syntax), Variable(Variable) { } @@ -17,7 +14,7 @@ BoundNodeKind BoundVariableExpression::Kind() const noexcept return BoundNodeKind::VariableExpression; } -std::shared_ptr BoundVariableExpression::Type() const noexcept +const TypeSymbol* BoundVariableExpression::Type() const noexcept { return Variable->Type; } diff --git a/src/Mamba/Code Analysis/Binding/BoundVariableExpression.h b/src/Mamba/Code Analysis/Binding/BoundVariableExpression.h index edfd690..886080f 100644 --- a/src/Mamba/Code Analysis/Binding/BoundVariableExpression.h +++ b/src/Mamba/Code Analysis/Binding/BoundVariableExpression.h @@ -1,8 +1,7 @@ #pragma once -#include - #include "BoundExpression.h" +#include "VariableSymbol.h" namespace Mamba { @@ -12,13 +11,13 @@ namespace Mamba using Super = BoundExpression; [[nodiscard]] BoundVariableExpression( - const std::shared_ptr Syntax, - const std::shared_ptr Variable + const SyntaxNode* Syntax, + const VariableSymbol* Variable ) noexcept; BoundNodeKind Kind() const noexcept override; - virtual std::shared_ptr Type() const noexcept override; + const TypeSymbol* Type() const noexcept override; - const std::shared_ptr Variable; + const VariableSymbol* Variable; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Binding/BoundWhileStatement.cpp b/src/Mamba/Code Analysis/Binding/BoundWhileStatement.cpp index 8aa913b..b36f05b 100644 --- a/src/Mamba/Code Analysis/Binding/BoundWhileStatement.cpp +++ b/src/Mamba/Code Analysis/Binding/BoundWhileStatement.cpp @@ -5,14 +5,20 @@ using namespace Mamba; BoundWhileStatement::BoundWhileStatement( - const std::shared_ptr SyntaxNode, - const std::shared_ptr Condition, - const std::shared_ptr Body + const SyntaxNode* SyntaxNode, + const BoundExpression* Condition, + const BoundStatement* Body ) noexcept : Super(SyntaxNode), Condition(Condition), Body(Body) { } +BoundWhileStatement::~BoundWhileStatement() noexcept +{ + delete Condition; + delete Body; +} + BoundNodeKind BoundWhileStatement::Kind() const noexcept { return BoundNodeKind::WhileStatement; diff --git a/src/Mamba/Code Analysis/Binding/BoundWhileStatement.h b/src/Mamba/Code Analysis/Binding/BoundWhileStatement.h index 50959cd..afa3b47 100644 --- a/src/Mamba/Code Analysis/Binding/BoundWhileStatement.h +++ b/src/Mamba/Code Analysis/Binding/BoundWhileStatement.h @@ -1,7 +1,6 @@ #pragma once -#include - +#include "BoundExpression.h" #include "BoundNodeKind.h" #include "BoundStatement.h" @@ -13,14 +12,16 @@ namespace Mamba using Super = BoundStatement; [[nodiscard]] BoundWhileStatement( - const std::shared_ptr SyntaxNode, - const std::shared_ptr Condition, - const std::shared_ptr Body + const SyntaxNode* SyntaxNode, + const BoundExpression* Condition, + const BoundStatement* Body ) noexcept; + ~BoundWhileStatement() noexcept override; + BoundNodeKind Kind() const noexcept override; - const std::shared_ptr Condition; - const std::shared_ptr Body; + const BoundExpression* Condition; + const BoundStatement* Body; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Compilation.cpp b/src/Mamba/Code Analysis/Compilation.cpp deleted file mode 100644 index 91feda8..0000000 --- a/src/Mamba/Code Analysis/Compilation.cpp +++ /dev/null @@ -1,78 +0,0 @@ -#include "Compilation.h" - -#include - -#include -#include - -#include "Binder.h" -#include "BoundCompilationUnit.h" -#include "BoundProgram.h" -#include "CompilationUnitSyntax.h" -#include "DotNet/DotNetEmitter.h" -#include "MambaCore.h" -#include "Parser.h" -#include "SourceText.h" -#include "SyntaxTree.h" - -namespace Mamba -{ - std::vector> TransformToSource(const std::vector& Sources) noexcept - { - auto SourceTexts = std::vector>(); - SourceTexts.reserve(Sources.size()); - for (auto&& Source : Sources) - { - const auto SharedSource = std::make_shared(Source); - SourceTexts.emplace_back(std::make_shared(SharedSource)); - } - return SourceTexts; - } - - std::shared_ptr Compilation::Compile(const std::shared_ptr SyntaxTree) noexcept - { - auto Parser = ::Mamba::Parser(SyntaxTree); - SyntaxTree->PrivateRoot = Parser.ParseCompilationUnit(); - SyntaxTree->PrivateDiagnostics = std::move(Parser.Diagnostics); - - fast_io::io::println(fast_io::mnp::code_cvt(SyntaxTree->Root()->ToString())); - - auto Binder = ::Mamba::Binder(SyntaxTree); - return Binder.BindCompilationUnit(); - } - - void Compilation::Compile(const StringView ModuleName) noexcept - { - auto CompilationUnits = std::vector>(); - for (auto&& SyntaxTree : SyntaxTrees) - { - CompilationUnits.emplace_back(Compilation::Compile(SyntaxTree)); - } - - auto Emitter = DotNetEmitter(); - const auto BoundProgram = ::Mamba::BoundProgram(CompilationUnits); - Emitter.Emit(BoundProgram, ModuleName); - } - - std::vector Compilation::Diagnostics() const noexcept - { - return SyntaxTrees | - std::views::transform([](auto&& SyntaxTree) - { return SyntaxTree->PrivateDiagnostics; }) | - std::views::join | std::ranges::to(); - } - - Compilation::Compilation(const std::vector& Sources) noexcept : - Compilation(TransformToSource(Sources)) - { - } - - Compilation::Compilation(const std::vector>& SourceTexts) noexcept - { - for (auto&& SourceText : SourceTexts) - { - const auto SyntaxTree = std::make_shared<::Mamba::SyntaxTree>(SourceText); - SyntaxTrees.emplace_back(SyntaxTree); - } - } -} // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Compilation.h b/src/Mamba/Code Analysis/Compilation.h deleted file mode 100644 index ffdc646..0000000 --- a/src/Mamba/Code Analysis/Compilation.h +++ /dev/null @@ -1,26 +0,0 @@ -#pragma once - -#include "MambaCore.h" -#include "SourceText.h" -#include - -namespace Mamba -{ - // - class Compilation final - { - public: - std::vector> SyntaxTrees; - - [[nodiscard]] Compilation(const std::vector& Sources) noexcept; - [[nodiscard]] Compilation(const std::vector>& Sources) noexcept; - - private: - static std::shared_ptr Compile(const std::shared_ptr SyntaxTree) noexcept; - - public: - void Compile(const StringView ModuleName) noexcept; - - std::vector Diagnostics() const noexcept; - }; -} // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Compiler.cpp b/src/Mamba/Code Analysis/Compiler.cpp index 1d47310..c204384 100644 --- a/src/Mamba/Code Analysis/Compiler.cpp +++ b/src/Mamba/Code Analysis/Compiler.cpp @@ -1,11 +1,82 @@ +#include "Lexer.h" #include "MambaCore.h" +#include "Binder.h" #include "Colors.h" #include "Compiler.h" +#include "Parser.h" using namespace fast_io::io; using namespace Mamba; +void PrintError(const Diagnostic& Diagnostic) noexcept +{ + println( + Color(fast_io::mnp::code_cvt(Diagnostic.Location.FileName()), Colors::BrightForegroundWhite), + Color(":", Colors::BrightForegroundWhite), + Color(Diagnostic.Location.StartLine(), Colors::BrightForegroundWhite), + Color(":", Colors::BrightForegroundWhite), + Color(Diagnostic.Location.StartCharacter(), Colors::BrightForegroundWhite), + " ", + Color("error: ", Colors::BrightForegroundRed), + Color(fast_io::mnp::code_cvt(Diagnostic.Message), Colors::BrightForegroundWhite) + ); +} + +void PrintWarning(const Diagnostic& Diagnostic) noexcept +{ + println( + Color(fast_io::mnp::code_cvt(Diagnostic.Location.FileName()), Colors::BrightForegroundWhite), + Color(":", Colors::BrightForegroundWhite), + Color(Diagnostic.Location.StartLine(), Colors::BrightForegroundWhite), + Color(":", Colors::BrightForegroundWhite), + Color(Diagnostic.Location.StartCharacter(), Colors::BrightForegroundWhite), + " ", + Color("warning: ", Colors::BrightForegroundWhite), + Color(fast_io::mnp::code_cvt(Diagnostic.Message), Colors::BrightForegroundWhite) + ); +} + +void PrintInformation(const Diagnostic& Diagnostic) noexcept +{ + println( + Color(fast_io::mnp::code_cvt(Diagnostic.Location.FileName()), Colors::BrightForegroundWhite), + Color(":", Colors::BrightForegroundWhite), + Color(Diagnostic.Location.StartLine(), Colors::BrightForegroundWhite), + Color(":", Colors::BrightForegroundWhite), + Color(Diagnostic.Location.StartCharacter(), Colors::BrightForegroundWhite), + " ", + Color("note: ", Colors::BrightForegroundCyan), + Color(fast_io::mnp::code_cvt(Diagnostic.Message), Colors::BrightForegroundWhite) + ); +} + +void PrintDiagnostic(const Diagnostic& Diagnostic) noexcept +{ + switch (Diagnostic.Severity) + { + case DiagnosticSeverity::Error: + PrintError(Diagnostic); + break; + case DiagnosticSeverity::Warning: + PrintWarning(Diagnostic); + break; + case DiagnosticSeverity::Information: + PrintInformation(Diagnostic); + break; + default: + std::unreachable(); + } +} + +void PrintDiagnostics(std::span Diagnostics) noexcept +{ + for (auto&& Diagnostic : Diagnostics) + { + PrintDiagnostic(Diagnostic); + } +} + void Compiler::PrivateAddSourceFile(const std::string_view FileName) noexcept { try @@ -38,3 +109,48 @@ void Compiler::ReportNoInputFiles() noexcept Color("no input files", Colors::BrightForegroundWhite) ); } + +Parser Parse(const std::tuple& Input) noexcept +{ + auto [SyntaxTree, Lexer] = Input; + auto Tokens = std::vector{}; + auto Token = Lexer.Lex(); + do + { + Tokens.emplace_back(Token); + Token = Lexer.Lex(); + } while (Token.Kind() != SyntaxKind::EndOfFileToken); + PrintDiagnostics(Lexer.Diagnostics); + return Parser(&SyntaxTree, std::move(Tokens)); +} + +void Compiler::Compile() noexcept +{ + if (SourceTexts.empty()) + { + ReportNoInputFiles(); + return; + } + + auto SyntaxTrees = SourceTexts | std::views::transform([](auto SourceText) { return SyntaxTree(SourceText); }); + auto Lexers = SyntaxTrees | std::views::transform([](auto SyntaxTree) { return Lexer(&SyntaxTree); }); + auto Parsers = std::views::zip(SyntaxTrees, Lexers) | std::views::transform(Parse); + for (const std::tuple& Input : std::views::zip(SyntaxTrees, Parsers)) + { + auto [SyntaxTree, Parser] = Input; + SyntaxTree.PrivateRoot = Parser.ParseCompilationUnit(); + SyntaxTree.BuildParentsMap(*SyntaxTree.Root()); + PrintDiagnostics(Parser.Diagnostics); + } + auto Binders = SyntaxTrees | std::views::transform([](auto&& SyntaxTree) { return Binder(&SyntaxTree); }); + auto BoundCompilationUnits = Binders | std::views::transform([](auto&& Binder) { return Binder.BindCompilationUnit(); }); + for (auto&& Binder : Binders) + { + PrintDiagnostics(Binder.Diagnostics); + } + + for (auto&& BoundCompilationUnit : BoundCompilationUnits) + { + delete BoundCompilationUnit; + } +} \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Compiler.h b/src/Mamba/Code Analysis/Compiler.h index 4db7120..4b0830b 100644 --- a/src/Mamba/Code Analysis/Compiler.h +++ b/src/Mamba/Code Analysis/Compiler.h @@ -1,10 +1,8 @@ #pragma once -#include "MambaCore.h" - #include "DiagnosticBag.h" #include "SourceText.h" -#include "SourceTextInfo.h" +#include "SyntaxTree.h" namespace Mamba { @@ -14,7 +12,6 @@ namespace Mamba DiagnosticBag Diagnostics; void PrivateAddSourceFile(const std::string_view FileName) noexcept; - void ReportNoInputFiles() noexcept; public: @@ -31,13 +28,6 @@ namespace Mamba } } - void Compile() noexcept - { - if (SourceTexts.empty()) - { - ReportNoInputFiles(); - return; - } - } + void Compile() noexcept; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Diagnostic.h b/src/Mamba/Code Analysis/Diagnostic.h index 5607def..bc92361 100644 --- a/src/Mamba/Code Analysis/Diagnostic.h +++ b/src/Mamba/Code Analysis/Diagnostic.h @@ -3,7 +3,6 @@ #include "MambaCore.h" #include "TextLocation.h" -#include namespace Mamba { diff --git a/src/Mamba/Code Analysis/DiagnosticBag.cpp b/src/Mamba/Code Analysis/DiagnosticBag.cpp index 4a10c0f..9ece564 100644 --- a/src/Mamba/Code Analysis/DiagnosticBag.cpp +++ b/src/Mamba/Code Analysis/DiagnosticBag.cpp @@ -95,7 +95,7 @@ namespace Mamba TEXT("Variable '"), Name, TEXT("' is already declared, previous declaration at "), - *Location.FileName(), + Location.FileName(), TEXT(":"), Location.StartLine(), TEXT(":"), @@ -108,13 +108,13 @@ namespace Mamba ReportWarning(Location, TEXT("Unreachable code.")); } - void DiagnosticBag::ReportUnreachableCode(const std::shared_ptr Node) noexcept + void DiagnosticBag::ReportUnreachableCode(const SyntaxNode* Node) noexcept { switch (Node->Kind()) { case SyntaxKind::BlockStatement: { - const auto Statements = std::static_pointer_cast(Node)->Statements; + auto Statements = static_cast(Node)->Statements; if (!Statements.empty()) { ReportUnreachableCode(Statements.front()); @@ -123,34 +123,34 @@ namespace Mamba } case SyntaxKind::VariableDeclaration: - ReportUnreachableCode(std::static_pointer_cast(Node)->Keyword->Location()); + ReportUnreachableCode(static_cast(Node)->Keyword->Location()); return; case SyntaxKind::IfStatement: - ReportUnreachableCode(std::static_pointer_cast(Node)->IfKeyword->Location()); + ReportUnreachableCode(static_cast(Node)->IfKeyword->Location()); return; case SyntaxKind::WhileStatement: - ReportUnreachableCode(std::static_pointer_cast(Node)->WhileKeyword->Location()); + ReportUnreachableCode(static_cast(Node)->WhileKeyword->Location()); return; case SyntaxKind::DoWhileStatement: - ReportUnreachableCode(std::static_pointer_cast(Node)->WhileKeyword->Location()); + ReportUnreachableCode(static_cast(Node)->WhileKeyword->Location()); return; case SyntaxKind::ForStatement: - ReportUnreachableCode(std::static_pointer_cast(Node)->Keyword->Location()); + ReportUnreachableCode(static_cast(Node)->Keyword->Location()); return; case SyntaxKind::BreakStatement: - ReportUnreachableCode(std::static_pointer_cast(Node)->Keyword->Location()); + ReportUnreachableCode(static_cast(Node)->Keyword->Location()); return; case SyntaxKind::ContinueStatement: - ReportUnreachableCode(std::static_pointer_cast(Node)->Keyword->Location()); + ReportUnreachableCode(static_cast(Node)->Keyword->Location()); return; case SyntaxKind::ReturnStatement: - ReportUnreachableCode(std::static_pointer_cast(Node)->ReturnKeyword->Location()); + ReportUnreachableCode(static_cast(Node)->ReturnKeyword->Location()); return; case SyntaxKind::ExpressionStatement: - ReportUnreachableCode(std::static_pointer_cast(Node)->Expression->Location()); + ReportUnreachableCode(static_cast(Node)->Expression->Location()); return; case SyntaxKind::CallExpression: - ReportUnreachableCode(std::static_pointer_cast(Node)->Identifier->Location()); + ReportUnreachableCode(static_cast(Node)->Identifier->Location()); return; default: break; diff --git a/src/Mamba/Code Analysis/DiagnosticBag.h b/src/Mamba/Code Analysis/DiagnosticBag.h index ee4ce4f..760f360 100644 --- a/src/Mamba/Code Analysis/DiagnosticBag.h +++ b/src/Mamba/Code Analysis/DiagnosticBag.h @@ -5,6 +5,7 @@ #include "Diagnostic.h" #include "SyntaxKind.h" +#include "SyntaxNode.h" #include "TextLocation.h" namespace Mamba @@ -53,7 +54,7 @@ namespace Mamba void ReportDiscardExpressionValue(const TextLocation Location) noexcept; void ReportVariableAlreadyDeclared(const TextLocation Location, const StringView Name) noexcept; void ReportUnreachableCode(const TextLocation Location) noexcept; - void ReportUnreachableCode(const std::shared_ptr Node) noexcept; + void ReportUnreachableCode(const SyntaxNode* Node) noexcept; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Emit/DotNet/DotNetEmitter.cpp b/src/Mamba/Code Analysis/Emit/DotNet/DotNetEmitter.cpp deleted file mode 100644 index 10f1c58..0000000 --- a/src/Mamba/Code Analysis/Emit/DotNet/DotNetEmitter.cpp +++ /dev/null @@ -1,177 +0,0 @@ -#include "DotNetEmitter.h" -#include "BoundCallExpression.h" -#include "BoundConstant.h" -#include "BoundExpressionStatement.h" -#include "BoundNodeKind.h" -#include "BoundScope.h" -#include "Diagnostic.h" -#include "DotNet/OpCodes.h" -#include "fast_io_core_impl/integers/impl.h" -#include "LinkIdentifier.h" -#include "ParameterSymbol.h" -#include "SourceText.h" -#include "TextLocation.h" -#include "TypeSymbol.h" - -#include -#include - -#include - -using namespace Mamba; - -constexpr auto LinkerVersion = 1uz; - -std::vector DotNetEmitter::Emit(const BoundProgram& Program, const StringView ModuleName) noexcept -{ - auto Diagnostics = std::vector(); - - if (Program.CompilationUnits.empty()) - { - fast_io::io::perrln("error: no compilation units found"); - } - - Serializer.Write(LinkerVersion); - Serializer.Write(ModuleName); - for (auto&& CompilationUnit : Program.CompilationUnits) - { - EmitCompilationUnit(*CompilationUnit); - } - - ::fast_io::obuf_file file(::fast_io::concat(::fast_io::mnp::code_cvt(ModuleName))); - ::fast_io::write(file, Serializer.Data.begin(), Serializer.Data.end()); - - return {}; -} - -void DotNetEmitter::EmitCompilationUnit(const BoundCompilationUnit& CompilationUnit) noexcept -{ - EmitScope(*CompilationUnit.GlobalScope); -} - -void DotNetEmitter::EmitScope(const BoundScope& Scope) noexcept -{ - for (auto&& Symbol : Scope.DeclaredSymbols()) - { - switch (Symbol->Kind()) - { - case SymbolKind::Function: - EmitFunction(std::static_pointer_cast(Symbol)); - break; - case SymbolKind::Variable: - EmitVariable(*std::static_pointer_cast(Symbol)); - break; - case SymbolKind::Parameter: - case SymbolKind::Type: - default: -#ifdef DEBUG - fast_io::io::println("Unsupported symbol."); -#endif - break; - } - } - - for (auto&& Scope : Scope.Children) - { - EmitScope(*Scope); - } -} - -void DotNetEmitter::EmitVariable(const VariableSymbol& VariableSymbol) noexcept -{ - Serializer.Write(LinkIdentifier::Variable); - Serializer.Write(*VariableSymbol.Type->Name); - Serializer.Write(*VariableSymbol.Name); -} - -void DotNetEmitter::EmitFunction(const std::shared_ptr Function) noexcept -{ - Serializer.Write(LinkIdentifier::Function); - Serializer.Write(*Function->Type->Name); - Serializer.Write(*Function->Name); - Serializer.Write(Function->Parameters.size()); - for (auto&& Parameter : Function->Parameters) - { - Serializer.Write(*Parameter->Type->Name); - } - EmitStatement(*Function->BoundDeclaration->Body); -} - -void DotNetEmitter::EmitStatement(const BoundStatement& Statement) noexcept -{ - switch (Statement.Kind()) - { - case BoundNodeKind::ExpressionStatement: - EmitExpressionStatement(static_cast(Statement)); - break; - case BoundNodeKind::BlockStatement: - EmitBlockStatement(static_cast(Statement)); - break; - default: - fast_io::io::perrln("Unsupported statement: ", static_cast(Statement.Kind())); - break; - } -} - -void DotNetEmitter::EmitCallExpression(const BoundCallExpression& Expression) noexcept -{ - for (auto&& Argument : Expression.Arguments) - { - EmitExpression(*Argument); - } - - Serializer.Write(LinkIdentifier::Instruction); - Serializer.Write(DotNet::OpCodes::Call); - Serializer.Write(LinkIdentifier::String); - Serializer.Write(*Expression.Function->Name); -} - -void DotNetEmitter::EmitExpression(const BoundExpression& Expression) noexcept -{ - if (Expression.ConstantValue()) - { - EmitConstantExpression(Expression); - return; - } - - switch (Expression.Kind()) - { - case BoundNodeKind::CallExpression: - EmitCallExpression(static_cast(Expression)); - break; - default: - fast_io::io::perrln("Unsupported expression"); - } -} - -void DotNetEmitter::EmitExpressionStatement(const BoundExpressionStatement& Statement) noexcept -{ - EmitExpression(*Statement.Expression); - if (Statement.Expression->Type() != TypeSymbol::Void) - { - Serializer.Write(LinkIdentifier::Instruction); - Serializer.Write(DotNet::OpCodes::Pop); - } -} - -void DotNetEmitter::EmitConstantExpression(const BoundExpression& Expression) noexcept -{ - if (Expression.Type() == TypeSymbol::String) - { - Serializer.Write(LinkIdentifier::Instruction); - Serializer.Write(DotNet::OpCodes::Ldstr); - Serializer.Write(LinkIdentifier::String); - Serializer.Write(StringView(**Expression.ConstantValue()->Value->StringValue)); - return; - } - - fast_io::io::perrln("Unsupported constant expression"); -} - -void DotNetEmitter::EmitBlockStatement(const BoundBlockStatement& BlockStatement) -{ - for (auto&& Statement : BlockStatement.Statements) - { - EmitStatement(*Statement); - } -} diff --git a/src/Mamba/Code Analysis/Emit/DotNet/DotNetEmitter.h b/src/Mamba/Code Analysis/Emit/DotNet/DotNetEmitter.h deleted file mode 100644 index 57de4dc..0000000 --- a/src/Mamba/Code Analysis/Emit/DotNet/DotNetEmitter.h +++ /dev/null @@ -1,39 +0,0 @@ -#pragma once - -#include "BoundBlockStatement.h" -#include "BoundCallExpression.h" -#include "BoundCompilationUnit.h" -#include "BoundExpression.h" -#include "BoundExpressionStatement.h" -#include "BoundNopStatement.h" -#include "BoundScope.h" -#include "DiagnosticBag.h" -#include "Emitter.h" -#include "FunctionSymbol.h" -#include "Serializer.h" -#include "VariableSymbol.h" - -namespace Mamba -{ - class DotNetEmitter final : public Emitter - { - DiagnosticBag Diagnostics; - ::Mamba::Serializer Serializer; - - public: - virtual std::vector Emit(const BoundProgram& Program, const StringView ModuleName) noexcept override; - - private: - void EmitCompilationUnit(const BoundCompilationUnit& CompilationUnit) noexcept; - void EmitScope(const BoundScope& Scope) noexcept; - void EmitVariable(const VariableSymbol& VariableSymbol) noexcept; - void EmitFunction(const std::shared_ptr Function) noexcept; - void EmitStatement(const BoundStatement& Statement) noexcept; - void EmitNopStatement(const BoundNopStatement& Statement) noexcept; - void EmitCallExpression(const BoundCallExpression& Expression) noexcept; - void EmitExpression(const BoundExpression& Expression) noexcept; - void EmitExpressionStatement(const BoundExpressionStatement& Statement) noexcept; - void EmitConstantExpression(const BoundExpression& Expression) noexcept; - void EmitBlockStatement(const BoundBlockStatement& BlockStatement); - }; -} // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Emit/DotNet/OpCodes.h b/src/Mamba/Code Analysis/Emit/DotNet/OpCodes.h deleted file mode 100644 index 863eebe..0000000 --- a/src/Mamba/Code Analysis/Emit/DotNet/OpCodes.h +++ /dev/null @@ -1,229 +0,0 @@ -#pragma once - -namespace Mamba -{ - namespace DotNet - { - enum class OpCodes - { - Add = 0x58, - AddOvf = 0xD6, - AddOvfUn = 0xD7, - And = 0x5F, - Arglist = 0xFE00, - Beq = 0x3B, - BeqS = 0x2E, - Bge = 0x3C, - BgeS = 0x2F, - BgeUn = 0x41, - BgeUnS = 0x34, - Bgt = 0x3D, - BgtS = 0x30, - BgtUn = 0x42, - BgtUnS = 0x35, - Ble = 0x3E, - BleS = 0x31, - BleUn = 0x43, - BleUnS = 0x36, - Blt = 0x3F, - BltS = 0x32, - BltUn = 0x44, - BltUnS = 0x37, - BneUn = 0x40, - BneUnS = 0x33, - Box = 0x8C, - Br = 0x38, - BrS = 0x2B, - Break = 0x01, - Brfalse = 0x39, - BrfalseS = 0x2C, - Brtrue = 0x3A, - BrtrueS = 0x2D, - Call = 0x28, - Calli = 0x29, - Callvirt = 0x6F, - Castclass = 0x74, - Ceq = 0xFF01, - Cgt = 0xFE02, - CgtUn = 0xFE03, - Ckfinite = 0xC3, - Clt = 0xFE04, - CltUn = 0xFE05, - Constrained = 0xFF16, - ConvI = 0xD3, - ConvI1 = 0x67, - ConvI2 = 0x68, - ConvI4 = 0x69, - ConvI8 = 0x6A, - ConvOvfI = 0xD4, - ConvOvfIUn = 0x8A, - ConvOvfI1 = 0xB3, - ConvOvfI1Un = 0x82, - ConvOvfI2 = 0xB5, - ConvOvfI2Un = 0x83, - ConvOvfI4 = 0xB7, - ConvOvfI4Un = 0x84, - ConvOvfI8 = 0xB9, - ConvOvfI8Un = 0x85, - ConvOvfU = 0xD5, - ConvOvfUUn = 0x8B, - ConvOvfU1 = 0xB4, - ConvOvfU1Un = 0x86, - ConvOvfU2 = 0xB6, - ConvOvfU2Un = 0x87, - ConvOvfU4 = 0xB8, - ConvOvfU4Un = 0x88, - ConvOvfU8 = 0xBA, - ConvOvfU8Un = 0x89, - ConvRUN = 0x76, - ConvR4 = 0x6B, - ConvR8 = 0x6C, - ConvU = 0xE0, - ConvU1 = 0xD2, - ConvU2 = 0xD1, - ConvU4 = 0x6D, - ConvU8 = 0x6E, - Cpblk = 0xFE17, - Cpobj = 0x70, - Div = 0x5B, - DivUn = 0x5C, - Dup = 0x25, - Endfilter = 0xFE11, - Endfinally = 0xDC, - Initblk = 0xFE18, - Initobj = 0xFE15, - Isinst = 0x75, - Jmp = 0x27, - Ldarg = 0xFE09, - Ldarg0 = 0x02, - Ldarg1 = 0x03, - Ldarg2 = 0x04, - Ldarg3 = 0x05, - LdargS = 0x0E, - Ldarga = 0xFE0A, - LdargaS = 0x0F, - LdcI4 = 0x20, - LdcI40 = 0x16, - LdcI41 = 0x17, - LdcI42 = 0x18, - LdcI43 = 0x19, - LdcI44 = 0x1A, - LdcI45 = 0x1B, - LdcI46 = 0x1C, - LdcI47 = 0x1D, - LdcI48 = 0x1E, - LdcI4M1 = 0x15, - LdcI4S = 0x1F, - LdcI8 = 0x21, - LdcR4 = 0x22, - LdcR8 = 0x23, - Ldelem = 0xA3, - LdelemI = 0x97, - LdelemI1 = 0x90, - LdelemI2 = 0x92, - LdelemI4 = 0x94, - LdelemI8 = 0x96, - LdelemR4 = 0x98, - LdelemR8 = 0x99, - LdelemRef = 0x9A, - LdelemU1 = 0x91, - LdelemU2 = 0x93, - LdelemU4 = 0x95, - Ldelema = 0x8F, - Ldfld = 0x7B, - Ldflda = 0x7C, - Ldftn = 0xFF06, - LdindI = 0x4D, - LdindI1 = 0x46, - LdindI2 = 0x48, - LdindI4 = 0x4A, - LdindI8 = 0x4C, - LdindR4 = 0x4E, - LdindR8 = 0x4F, - LdindRef = 0x50, - LdindU1 = 0x47, - LdindU2 = 0x49, - LdindU4 = 0x4B, - Ldlen = 0x8E, - Ldloc = 0xFE0C, - Ldloc0 = 0x06, - Ldloc1 = 0x07, - Ldloc2 = 0x08, - Ldloc3 = 0x09, - LdlocS = 0x11, - Ldloca = 0xFE0D, - LdlocaS = 0x12, - Ldnull = 0x14, - Ldobj = 0x71, - Ldsfld = 0x7E, - Ldsflda = 0x7F, - Ldstr = 0x72, - Ldtoken = 0xD0, - Ldvirtftn = 0xFF07, - Leave = 0xDD, - LeaveS = 0xDE, - Localloc = 0xFE0F, - Mkrefany = 0xC6, - Mul = 0x5A, - MulOvf = 0xD8, - MulOvfUn = 0xD9, - Neg = 0x65, - Newarr = 0x8D, - Newobj = 0x73, - Nop = 0x00, - Not = 0x66, - Or = 0x60, - Pop = 0x26, - Readonly = 0xFE1E, - Refanytype = 0xFF1D, - Refanyval = 0xC2, - Rem = 0x5D, - RemUn = 0x5E, - Ret = 0x2A, - Rethrow = 0xFF1A, - Shl = 0x62, - Shr = 0x63, - ShrUn = 0x64, - Sizeof = 0xFE1C, - Starg = 0xFE0B, - StargS = 0x10, - Stelem = 0xA4, - StelemI = 0x9B, - StelemI1 = 0x9C, - StelemI2 = 0x9D, - StelemI4 = 0x9E, - StelemI8 = 0x9F, - StelemR4 = 0xA0, - StelemR8 = 0xA1, - StelemRef = 0xA2, - Stfld = 0x7D, - StindI = 0xDF, - StindI1 = 0x52, - StintI2 = 0x53, - StindI4 = 0x54, - StindI8 = 0x55, - StindR4 = 0x56, - StintR8 = 0x57, - StindRef = 0x51, - Stloc = 0xFF0E, - Stloc0 = 0x0A, - Stloc1 = 0x0B, - Stloc2 = 0x0C, - Stloc3 = 0x0D, - StlocS = 0x13, - Stobj = 0x81, - Stsfld = 0x80, - Sub = 0x59, - SubOvf = 0xDA, - SubOvfUn = 0xDB, - Switch = 0x45, - Tailcall = 0xFF14, - Throw = 0x7A, - Unaligned = 0xFE12, - Unbox = 0x79, - UnboxAny = 0xA5, - Volatile = 0xFE13, - Xor = 0x61, - }; - }; // namespace DotNet -} // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Emit/Java/JavaEmitter.h b/src/Mamba/Code Analysis/Emit/Java/JavaEmitter.h deleted file mode 100644 index deb73d3..0000000 --- a/src/Mamba/Code Analysis/Emit/Java/JavaEmitter.h +++ /dev/null @@ -1,23 +0,0 @@ -#pragma once - -#include "BoundBinaryExpression.h" -#include "BoundBinaryOperator.h" -#include "BoundBinaryOperatorKind.h" -#include "Emitter.h" - -namespace Mamba -{ - class JavaEmitter final : public Emitter - { - public: - void EmitBinaryExpression(const BoundBinaryExpression& Expression) - { - if (Expression.Operator.Kind == BoundBinaryOperatorKind::Addition) - { - // ldc insn Expression.Left - // ldc insn Expression.Right - // add - } - } - }; -} // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Symbol/FunctionSymbol.cpp b/src/Mamba/Code Analysis/Symbol/FunctionSymbol.cpp index 0f29825..83ee1cf 100644 --- a/src/Mamba/Code Analysis/Symbol/FunctionSymbol.cpp +++ b/src/Mamba/Code Analysis/Symbol/FunctionSymbol.cpp @@ -1,38 +1,22 @@ #include "FunctionSymbol.h" -#include "fast_io.h" +#include "TypeSymbol.h" -namespace Mamba +using namespace Mamba; + +FunctionSymbol::FunctionSymbol(StringView Name, std::vector&& Parameters, const TypeSymbol* Type, const BoundFunctionDeclaration* BoundDeclaration) noexcept : + Super(Name), Parameters(std::move(Parameters)), BoundDeclaration(BoundDeclaration), Type(Type) { - FunctionSymbol::FunctionSymbol( - const std::shared_ptr Name, - const std::span> Parameters, - const std::shared_ptr Type, - const std::shared_ptr BoundDeclaration - ) noexcept : - Super(Name), -#if __cpp_lib_containers_ranges == 202202L - Parameters(std::from_range, Parameters) -#else - Parameters(Parameters.begin(), Parameters.end()) -#endif - , - BoundDeclaration(BoundDeclaration), - Type(Type) - { - } +} - FunctionSymbol::FunctionSymbol( - const std::shared_ptr Name, - std::vector>&& Parameters, - const std::shared_ptr Type, - const std::shared_ptr BoundDeclaration - ) noexcept : - Super(Name), Parameters(std::move(Parameters)), BoundDeclaration(BoundDeclaration), Type(Type) +FunctionSymbol::~FunctionSymbol() noexcept +{ + if (!TypeSymbol::IsBuiltInType(Type)) { + delete Type; } +} - SymbolKind FunctionSymbol::Kind() const noexcept - { - return SymbolKind::Function; - } -} // namespace Mamba \ No newline at end of file +SymbolKind FunctionSymbol::Kind() const noexcept +{ + return SymbolKind::Function; +} \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Symbol/FunctionSymbol.h b/src/Mamba/Code Analysis/Symbol/FunctionSymbol.h index b1b7068..83a19f1 100644 --- a/src/Mamba/Code Analysis/Symbol/FunctionSymbol.h +++ b/src/Mamba/Code Analysis/Symbol/FunctionSymbol.h @@ -2,9 +2,8 @@ #include "BoundFunctionDeclaration.h" #include "MambaCore.h" +#include "ParameterSymbol.h" #include "Symbol.h" -#include -#include namespace Mamba { @@ -13,24 +12,13 @@ namespace Mamba public: using Super = Symbol; - [[nodiscard]] FunctionSymbol( - const std::shared_ptr Name, - const std::span> Parameters, - const std::shared_ptr Type, - const std::shared_ptr BoundDeclaration - ) noexcept; - - [[nodiscard]] FunctionSymbol( - const std::shared_ptr Name, - std::vector>&& Parameters, - const std::shared_ptr Type, - const std::shared_ptr BoundDeclaration - ) noexcept; - - std::vector> Parameters; - std::shared_ptr BoundDeclaration; - std::shared_ptr Type; + [[nodiscard]] FunctionSymbol(StringView Name, std::vector&& Parameters, const TypeSymbol* Type, const BoundFunctionDeclaration* BoundDeclaration) noexcept; + ~FunctionSymbol() noexcept override; SymbolKind Kind() const noexcept override; + + std::vector Parameters; + const BoundFunctionDeclaration* BoundDeclaration; + const TypeSymbol* Type; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Symbol/ParameterSymbol.cpp b/src/Mamba/Code Analysis/Symbol/ParameterSymbol.cpp index ddefaba..4cfeea8 100644 --- a/src/Mamba/Code Analysis/Symbol/ParameterSymbol.cpp +++ b/src/Mamba/Code Analysis/Symbol/ParameterSymbol.cpp @@ -2,19 +2,22 @@ #include "TypeSymbol.h" -namespace Mamba +using namespace Mamba; + +ParameterSymbol::ParameterSymbol(StringView Name, const TypeSymbol* Type, std::size_t Oridinal) noexcept : + Super(Name, false, Type, {}), Oridinal(Oridinal) { - ParameterSymbol::ParameterSymbol( - const std::shared_ptr Name, - const std::shared_ptr Type, - const std::size_t Oridinal - ) noexcept : - Super(Name, false, Type, nullptr), Oridinal(Oridinal) - { - } +} - SymbolKind ParameterSymbol::Kind() const noexcept +ParameterSymbol::~ParameterSymbol() noexcept +{ + if (!TypeSymbol::IsBuiltInType(Type)) { - return SymbolKind::Parameter; + delete Type; } -} // namespace Mamba \ No newline at end of file +} + +SymbolKind ParameterSymbol::Kind() const noexcept +{ + return SymbolKind::Parameter; +} \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Symbol/ParameterSymbol.h b/src/Mamba/Code Analysis/Symbol/ParameterSymbol.h index 394430a..dba7081 100644 --- a/src/Mamba/Code Analysis/Symbol/ParameterSymbol.h +++ b/src/Mamba/Code Analysis/Symbol/ParameterSymbol.h @@ -1,7 +1,5 @@ #pragma once -#include - #include "MambaCore.h" #include "VariableSymbol.h" @@ -12,14 +10,11 @@ namespace Mamba public: using Super = VariableSymbol; - [[nodiscard]] ParameterSymbol( - const std::shared_ptr Name, - const std::shared_ptr Type, - const std::size_t Oridinal - ) noexcept; - - const std::size_t Oridinal; + [[nodiscard]] ParameterSymbol(StringView Name, const TypeSymbol* Type, std::size_t Oridinal) noexcept; + ~ParameterSymbol() noexcept override; SymbolKind Kind() const noexcept override; + + std::size_t Oridinal; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Symbol/TypeSymbol.cpp b/src/Mamba/Code Analysis/Symbol/TypeSymbol.cpp index 7a053aa..7cecf1b 100644 --- a/src/Mamba/Code Analysis/Symbol/TypeSymbol.cpp +++ b/src/Mamba/Code Analysis/Symbol/TypeSymbol.cpp @@ -2,21 +2,24 @@ using namespace Mamba; -// why qualified name is required here? -TypeSymbol::TypeSymbol(const std::shared_ptr Name) noexcept : Super(Name) {} - -Mamba::TypeSymbol::~TypeSymbol() noexcept {} +TypeSymbol::TypeSymbol(StringView Name) noexcept : + Super(Name) {} SymbolKind TypeSymbol::Kind() const noexcept { return SymbolKind::Type; } -const std::shared_ptr TypeSymbol::Int = - std::make_shared(std::make_shared(TEXT("int"))); -const std::shared_ptr TypeSymbol::Bool = - std::make_shared(std::make_shared(TEXT("bool"))); -const std::shared_ptr TypeSymbol::String = - std::make_shared(std::make_shared(TEXT("string"))); -const std::shared_ptr TypeSymbol::Void = - std::make_shared(std::make_shared(TEXT("void"))); \ No newline at end of file +bool TypeSymbol::IsBuiltInType(const TypeSymbol* Type) noexcept +{ + return Type == &TypeSymbol::Int || + Type == &TypeSymbol::Bool || + Type == &TypeSymbol::String || + Type == &TypeSymbol::Void; +} + +const TypeSymbol TypeSymbol::Int = TypeSymbol(TEXT("int")); +const TypeSymbol TypeSymbol::Bool = TypeSymbol(TEXT("bool")); +const TypeSymbol TypeSymbol::String = TypeSymbol(TEXT("string")); +const TypeSymbol TypeSymbol::Void = TypeSymbol(TEXT("void")); +const TypeSymbol TypeSymbol::Double = TypeSymbol(TEXT("double")); \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Symbol/TypeSymbol.h b/src/Mamba/Code Analysis/Symbol/TypeSymbol.h index a080f56..e828ddf 100644 --- a/src/Mamba/Code Analysis/Symbol/TypeSymbol.h +++ b/src/Mamba/Code Analysis/Symbol/TypeSymbol.h @@ -13,14 +13,17 @@ namespace Mamba public: using Super = Symbol; - [[nodiscard]] TypeSymbol(const std::shared_ptr Name) noexcept; - virtual ~TypeSymbol() noexcept; + [[nodiscard]] TypeSymbol(StringView Name) noexcept; + virtual ~TypeSymbol() noexcept = default; SymbolKind Kind() const noexcept override; - static const std::shared_ptr Int; - static const std::shared_ptr Bool; - static const std::shared_ptr String; - static const std::shared_ptr Void; + static const TypeSymbol Int; + static const TypeSymbol Bool; + static const TypeSymbol String; + static const TypeSymbol Void; + static const TypeSymbol Double; + + static bool IsBuiltInType(const TypeSymbol* Type) noexcept; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Symbol/VariableSymbol.cpp b/src/Mamba/Code Analysis/Symbol/VariableSymbol.cpp index ba06bda..5501359 100644 --- a/src/Mamba/Code Analysis/Symbol/VariableSymbol.cpp +++ b/src/Mamba/Code Analysis/Symbol/VariableSymbol.cpp @@ -1,22 +1,21 @@ #include "VariableSymbol.h" -#include "TypeSymbol.h" +using namespace Mamba; -namespace Mamba +VariableSymbol::VariableSymbol(StringView Name, bool IsConstant, const TypeSymbol* Type, struct Constant Constant) noexcept : + Super(Name), IsConstant(IsConstant), Type(Type), Constant(Constant) { - VariableSymbol::VariableSymbol( - const std::shared_ptr Name, - const bool IsConstant, - const std::shared_ptr Type, - const NullableSharedPtr Constant - ) noexcept : - Super(Name), IsConstant(IsConstant), Type(Type), Constant(Constant) - { - } +} - SymbolKind VariableSymbol::Kind() const noexcept +VariableSymbol::~VariableSymbol() noexcept +{ + if (!TypeSymbol::IsBuiltInType(Type)) { - return SymbolKind::Variable; + delete Type; } +} -} // namespace Mamba \ No newline at end of file +SymbolKind VariableSymbol::Kind() const noexcept +{ + return SymbolKind::Variable; +} \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Symbol/VariableSymbol.h b/src/Mamba/Code Analysis/Symbol/VariableSymbol.h index d037a07..0f61d23 100644 --- a/src/Mamba/Code Analysis/Symbol/VariableSymbol.h +++ b/src/Mamba/Code Analysis/Symbol/VariableSymbol.h @@ -1,10 +1,10 @@ #pragma once -#include - +#include "Constant.h" #include "MambaCore.h" #include "Symbol.h" #include "SymbolKind.h" +#include "TypeSymbol.h" namespace Mamba { @@ -13,17 +13,13 @@ namespace Mamba public: using Super = Symbol; - [[nodiscard]] VariableSymbol( - const std::shared_ptr Name, - const bool IsConstant, - const std::shared_ptr Type, - const NullableSharedPtr Constant - ) noexcept; + [[nodiscard]] VariableSymbol(StringView Name, bool IsConstant, const TypeSymbol* Type, struct Constant Constant) noexcept; + ~VariableSymbol() noexcept override; SymbolKind Kind() const noexcept override; - const bool IsConstant; - const std::shared_ptr Type; - const NullableSharedPtr Constant; + bool IsConstant; + const TypeSymbol* Type; + struct Constant Constant; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/AssignmentExpressionSyntax.cpp b/src/Mamba/Code Analysis/Syntax/AssignmentExpressionSyntax.cpp index e72abb6..2eb8c6e 100644 --- a/src/Mamba/Code Analysis/Syntax/AssignmentExpressionSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/AssignmentExpressionSyntax.cpp @@ -17,12 +17,27 @@ AssignmentExpressionSyntax::~AssignmentExpressionSyntax() noexcept delete Expression; } -std::vector AssignmentExpressionSyntax::Children() const noexcept +SyntaxKind AssignmentExpressionSyntax::Kind() const noexcept { - return { IdentifierToken, AssignmentToken, Expression }; + return SyntaxKind::AssignmentExpression; } -SyntaxKind AssignmentExpressionSyntax::Kind() const noexcept +std::size_t AssignmentExpressionSyntax::ChildrenCount() const noexcept { - return SyntaxKind::AssignmentExpression; -} \ No newline at end of file + return 3; +} + +const SyntaxNode* AssignmentExpressionSyntax::ChildAt(std::size_t Index) const noexcept +{ + switch (Index) + { + case 0: + return IdentifierToken; + case 1: + return AssignmentToken; + case 2: + return Expression; + default: + ReportChildrenAccessOutOfBounds(Index); + } +} diff --git a/src/Mamba/Code Analysis/Syntax/AssignmentExpressionSyntax.h b/src/Mamba/Code Analysis/Syntax/AssignmentExpressionSyntax.h index 855f911..f5937f5 100644 --- a/src/Mamba/Code Analysis/Syntax/AssignmentExpressionSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/AssignmentExpressionSyntax.h @@ -3,7 +3,6 @@ #include "ExpressionSyntax.h" #include "SyntaxKind.h" #include "SyntaxToken.h" -#include namespace Mamba { @@ -21,11 +20,14 @@ namespace Mamba ~AssignmentExpressionSyntax() noexcept override; - std::vector Children() const noexcept override; SyntaxKind Kind() const noexcept override; const SyntaxToken* IdentifierToken; const SyntaxToken* AssignmentToken; const ExpressionSyntax* Expression; + + private: + std::size_t ChildrenCount() const noexcept override; + const SyntaxNode* ChildAt(std::size_t Index) const noexcept override; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/BinaryExpressionSyntax.cpp b/src/Mamba/Code Analysis/Syntax/BinaryExpressionSyntax.cpp index 18f6bee..0eee0ca 100644 --- a/src/Mamba/Code Analysis/Syntax/BinaryExpressionSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/BinaryExpressionSyntax.cpp @@ -23,7 +23,22 @@ SyntaxKind BinaryExpressionSyntax::Kind() const noexcept return SyntaxKind::BinaryExpression; } -std::vector BinaryExpressionSyntax::Children() const noexcept +std::size_t BinaryExpressionSyntax::ChildrenCount() const noexcept { - return { Left, OperatorToken, Right }; -} \ No newline at end of file + return 3; +} + +const SyntaxNode* BinaryExpressionSyntax::ChildAt(std::size_t Index) const noexcept +{ + switch (Index) + { + case 0: + return Left; + case 1: + return OperatorToken; + case 2: + return Right; + default: + ReportChildrenAccessOutOfBounds(Index); + } +} diff --git a/src/Mamba/Code Analysis/Syntax/BinaryExpressionSyntax.h b/src/Mamba/Code Analysis/Syntax/BinaryExpressionSyntax.h index 113417e..77f26a0 100644 --- a/src/Mamba/Code Analysis/Syntax/BinaryExpressionSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/BinaryExpressionSyntax.h @@ -21,10 +21,13 @@ namespace Mamba ~BinaryExpressionSyntax() noexcept override; SyntaxKind Kind() const noexcept override; - std::vector Children() const noexcept override; const ExpressionSyntax* Left; const SyntaxToken* OperatorToken; const ExpressionSyntax* Right; + + private: + std::size_t ChildrenCount() const noexcept override; + const SyntaxNode* ChildAt(std::size_t Index) const noexcept override; }; } // namespace Mamba diff --git a/src/Mamba/Code Analysis/Syntax/BlockStatementSyntax.cpp b/src/Mamba/Code Analysis/Syntax/BlockStatementSyntax.cpp index 4a4ec36..95dfe00 100644 --- a/src/Mamba/Code Analysis/Syntax/BlockStatementSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/BlockStatementSyntax.cpp @@ -18,9 +18,9 @@ BlockStatementSyntax::BlockStatementSyntax( BlockStatementSyntax::~BlockStatementSyntax() noexcept { for (auto&& Statement : Statements) - { - delete Statement; - } + { + delete Statement; + } } SyntaxKind BlockStatementSyntax::Kind() const noexcept @@ -28,23 +28,25 @@ SyntaxKind BlockStatementSyntax::Kind() const noexcept return SyntaxKind::BlockStatement; } -std::vector BlockStatementSyntax::Children() const noexcept +std::size_t BlockStatementSyntax::ChildrenCount() const noexcept { - auto Result = std::vector(); - Result.reserve(Statements.size() + 2); - - Result.emplace_back(OpenBraceToken); - -#if __cpp_lib_containers_ranges >= 202202L - Result.append_range(Statements); -#else - for (auto Statement : Statements) - { - Result.emplace_back(Statement); - } -#endif - - Result.emplace_back(CloseBraceToken); + return Statements.size() + 2; +} - return Result; +const SyntaxNode* BlockStatementSyntax::ChildAt(std::size_t Index) const noexcept +{ + if (Index == 0) + { + return OpenBraceToken; + } + else if (Index < Statements.size() + 1) + { + return Statements[Index - 1]; + } + else if (Index == Statements.size() + 1) + { + return CloseBraceToken; + } + + ReportChildrenAccessOutOfBounds(Index); } \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/BlockStatementSyntax.h b/src/Mamba/Code Analysis/Syntax/BlockStatementSyntax.h index fbb2419..a22ea77 100644 --- a/src/Mamba/Code Analysis/Syntax/BlockStatementSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/BlockStatementSyntax.h @@ -23,10 +23,13 @@ namespace Mamba ~BlockStatementSyntax() noexcept override; SyntaxKind Kind() const noexcept override; - std::vector Children() const noexcept override; const SyntaxToken* OpenBraceToken; std::vector Statements; const SyntaxToken* CloseBraceToken; + + private: + std::size_t ChildrenCount() const noexcept override; + const SyntaxNode* ChildAt(std::size_t Index) const noexcept override; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/BreakStatementSyntax.cpp b/src/Mamba/Code Analysis/Syntax/BreakStatementSyntax.cpp index bc252fb..0b70ae7 100644 --- a/src/Mamba/Code Analysis/Syntax/BreakStatementSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/BreakStatementSyntax.cpp @@ -14,7 +14,17 @@ SyntaxKind BreakStatementSyntax::Kind() const noexcept return SyntaxKind::BreakStatement; } -std::vector BreakStatementSyntax::Children() const noexcept +std::size_t BreakStatementSyntax::ChildrenCount() const noexcept { - return { Keyword }; + return 1; +} + +const SyntaxNode* BreakStatementSyntax::ChildAt(std::size_t Index) const noexcept +{ + if (Index != 0) + { + ReportChildrenAccessOutOfBounds(Index); + } + + return Keyword; } \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/BreakStatementSyntax.h b/src/Mamba/Code Analysis/Syntax/BreakStatementSyntax.h index 9490675..0b577c2 100644 --- a/src/Mamba/Code Analysis/Syntax/BreakStatementSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/BreakStatementSyntax.h @@ -13,8 +13,11 @@ namespace Mamba [[nodiscard]] BreakStatementSyntax(const class SyntaxTree* SyntaxTree, const SyntaxToken* Keyword) noexcept; SyntaxKind Kind() const noexcept override; - std::vector Children() const noexcept override; const SyntaxToken* Keyword; + + private: + std::size_t ChildrenCount() const noexcept override; + const SyntaxNode* ChildAt(std::size_t Index) const noexcept override; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/CallExpressionSyntax.cpp b/src/Mamba/Code Analysis/Syntax/CallExpressionSyntax.cpp index bd2d467..03ea455 100644 --- a/src/Mamba/Code Analysis/Syntax/CallExpressionSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/CallExpressionSyntax.cpp @@ -20,9 +20,9 @@ CallExpressionSyntax::CallExpressionSyntax( CallExpressionSyntax::~CallExpressionSyntax() noexcept { for (auto Argument : Arguments.Nodes()) - { - delete Argument; - } + { + delete Argument; + } } SyntaxKind CallExpressionSyntax::Kind() const noexcept @@ -30,25 +30,29 @@ SyntaxKind CallExpressionSyntax::Kind() const noexcept return SyntaxKind::CallExpression; } -std::vector CallExpressionSyntax::Children() const noexcept +std::size_t CallExpressionSyntax::ChildrenCount() const noexcept { - auto Result = std::vector(); - - // Arguments->Count() returns nodes count, so multiply by 2 to count with separators - Result.reserve(2 + Arguments.Count() * 2); - Result.emplace_back(Identifier); - Result.emplace_back(OpenParenthesisToken); - -#if __cpp_lib_containers_ranges >= 202202L - Result.append_range(Arguments.WithSeperators()); -#else - for (auto Argument : Arguments.WithSeperators()) - { - Result.emplace_back(std::forward(Argument)); - } -#endif - - Result.emplace_back(CloseParenthesisToken); + return 2 + Arguments.size(); +} - return Result; +const SyntaxNode* CallExpressionSyntax::ChildAt(std::size_t Index) const noexcept +{ + if (Index == 0) + { + return Identifier; + } + else if (Index == 1) + { + return OpenParenthesisToken; + } + else if (Index < Arguments.size() + 2) + { + return Arguments[Index - 2]; + } + else if (Index == Arguments.size() + 2) + { + return CloseParenthesisToken; + } + + ReportChildrenAccessOutOfBounds(Index); } \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/CallExpressionSyntax.h b/src/Mamba/Code Analysis/Syntax/CallExpressionSyntax.h index 2e5fa22..96edb7b 100644 --- a/src/Mamba/Code Analysis/Syntax/CallExpressionSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/CallExpressionSyntax.h @@ -23,11 +23,14 @@ namespace Mamba ~CallExpressionSyntax() noexcept override; SyntaxKind Kind() const noexcept override; - std::vector Children() const noexcept override; const SyntaxToken* Identifier; const SyntaxToken* OpenParenthesisToken; SeperatedSyntaxList Arguments; const SyntaxToken* CloseParenthesisToken; + + private: + std::size_t ChildrenCount() const noexcept override; + const SyntaxNode* ChildAt(std::size_t Index) const noexcept override; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/CompilationUnitSyntax.cpp b/src/Mamba/Code Analysis/Syntax/CompilationUnitSyntax.cpp index de51ea9..02de407 100644 --- a/src/Mamba/Code Analysis/Syntax/CompilationUnitSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/CompilationUnitSyntax.cpp @@ -10,9 +10,9 @@ CompilationUnitSyntax::CompilationUnitSyntax(const SyntaxTree* SyntaxTree, std:: CompilationUnitSyntax::~CompilationUnitSyntax() noexcept { for (auto&& Member : Members) - { - delete Member; - } + { + delete Member; + } } SyntaxKind CompilationUnitSyntax::Kind() const noexcept @@ -20,20 +20,21 @@ SyntaxKind CompilationUnitSyntax::Kind() const noexcept return SyntaxKind::CompilationUnit; } -std::vector CompilationUnitSyntax::Children() const noexcept +std::size_t CompilationUnitSyntax::ChildrenCount() const noexcept { - auto Children = std::vector(); - Children.reserve(Members.size() + 1); + return Members.size() + 1; +} -#if __cpp_lib_containers_ranges >= 202202L - Children.append_range(Members); -#else - for (auto&& Member : Members) - { - Children.emplace_back(Member); - } -#endif +const SyntaxNode* CompilationUnitSyntax::ChildAt(std::size_t Index) const noexcept +{ + if (Index < Members.size()) + { + return Members[Index]; + } + else if (Index == Members.size()) + { + return EndOfFileToken; + } - Children.emplace_back(EndOfFileToken); - return Children; + ReportChildrenAccessOutOfBounds(Index); } \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/CompilationUnitSyntax.h b/src/Mamba/Code Analysis/Syntax/CompilationUnitSyntax.h index b17904c..3b2490f 100644 --- a/src/Mamba/Code Analysis/Syntax/CompilationUnitSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/CompilationUnitSyntax.h @@ -21,10 +21,13 @@ namespace Mamba ~CompilationUnitSyntax() noexcept override; SyntaxKind Kind() const noexcept override; - std::vector Children() const noexcept override; std::vector Members; const SyntaxToken* EndOfFileToken; + + private: + std::size_t ChildrenCount() const noexcept override; + const SyntaxNode* ChildAt(std::size_t Index) const noexcept override; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/ContinueStatementSyntax.cpp b/src/Mamba/Code Analysis/Syntax/ContinueStatementSyntax.cpp index 7169025..00dd825 100644 --- a/src/Mamba/Code Analysis/Syntax/ContinueStatementSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/ContinueStatementSyntax.cpp @@ -14,7 +14,17 @@ SyntaxKind ContinueStatementSyntax::Kind() const noexcept return SyntaxKind::ContinueStatement; } -std::vector ContinueStatementSyntax::Children() const noexcept +std::size_t ContinueStatementSyntax::ChildrenCount() const noexcept { - return { Keyword }; -} \ No newline at end of file + return 1; +} + +const SyntaxNode* ContinueStatementSyntax::ChildAt(std::size_t Index) const noexcept +{ + if (Index != 0) + { + ReportChildrenAccessOutOfBounds(Index); + } + + return Keyword; +} diff --git a/src/Mamba/Code Analysis/Syntax/ContinueStatementSyntax.h b/src/Mamba/Code Analysis/Syntax/ContinueStatementSyntax.h index 8830fe5..3246309 100644 --- a/src/Mamba/Code Analysis/Syntax/ContinueStatementSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/ContinueStatementSyntax.h @@ -13,8 +13,11 @@ namespace Mamba [[nodiscard]] ContinueStatementSyntax(const class SyntaxTree* SyntaxTree, const SyntaxToken* Keyword) noexcept; SyntaxKind Kind() const noexcept override; - std::vector Children() const noexcept override; const SyntaxToken* Keyword; + + private: + std::size_t ChildrenCount() const noexcept override; + const SyntaxNode* ChildAt(std::size_t Index) const noexcept override; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/DoWhileStatementSyntax.cpp b/src/Mamba/Code Analysis/Syntax/DoWhileStatementSyntax.cpp index b865aad..4e615e9 100644 --- a/src/Mamba/Code Analysis/Syntax/DoWhileStatementSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/DoWhileStatementSyntax.cpp @@ -24,7 +24,24 @@ SyntaxKind DoWhileStatementSyntax::Kind() const noexcept return SyntaxKind::DoWhileStatement; } -std::vector DoWhileStatementSyntax::Children() const noexcept +std::size_t DoWhileStatementSyntax::ChildrenCount() const noexcept { - return { DoKeyword, Body, WhileKeyword, Condition }; + return 4; +} + +const SyntaxNode* Mamba::DoWhileStatementSyntax::ChildAt(std::size_t Index) const noexcept +{ + switch (Index) + { + case 0: + return DoKeyword; + case 1: + return Body; + case 2: + return WhileKeyword; + case 3: + return Condition; + default: + ReportChildrenAccessOutOfBounds(Index); + } } \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/DoWhileStatementSyntax.h b/src/Mamba/Code Analysis/Syntax/DoWhileStatementSyntax.h index 188f162..71d47cc 100644 --- a/src/Mamba/Code Analysis/Syntax/DoWhileStatementSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/DoWhileStatementSyntax.h @@ -23,11 +23,14 @@ namespace Mamba ~DoWhileStatementSyntax() noexcept override; SyntaxKind Kind() const noexcept override; - std::vector Children() const noexcept override; const SyntaxToken* DoKeyword; const StatementSyntax* Body; const SyntaxToken* WhileKeyword; const ExpressionSyntax* Condition; + + private: + std::size_t ChildrenCount() const noexcept override; + const SyntaxNode* ChildAt(std::size_t Index) const noexcept override; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/ElseClauseSyntax.cpp b/src/Mamba/Code Analysis/Syntax/ElseClauseSyntax.cpp index 825e9c4..ff09d45 100644 --- a/src/Mamba/Code Analysis/Syntax/ElseClauseSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/ElseClauseSyntax.cpp @@ -21,7 +21,20 @@ SyntaxKind ElseClauseSyntax::Kind() const noexcept return SyntaxKind::ElseClause; } -std::vector ElseClauseSyntax::Children() const noexcept +std::size_t ElseClauseSyntax::ChildrenCount() const noexcept { - return { ElseKeyword, ElseStatement }; + return 2; +} + +const SyntaxNode* ElseClauseSyntax::ChildAt(std::size_t Index) const noexcept +{ + switch (Index) + { + case 0: + return ElseKeyword; + case 1: + return ElseStatement; + default: + ReportChildrenAccessOutOfBounds(Index); + } } \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/ElseClauseSyntax.h b/src/Mamba/Code Analysis/Syntax/ElseClauseSyntax.h index b57b248..2480047 100644 --- a/src/Mamba/Code Analysis/Syntax/ElseClauseSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/ElseClauseSyntax.h @@ -20,9 +20,12 @@ namespace Mamba ~ElseClauseSyntax() noexcept override; SyntaxKind Kind() const noexcept override; - std::vector Children() const noexcept override; const SyntaxToken* ElseKeyword; const StatementSyntax* ElseStatement; + + private: + std::size_t ChildrenCount() const noexcept override; + const SyntaxNode* ChildAt(std::size_t Index) const noexcept override; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/ExpressionStatementSyntax.cpp b/src/Mamba/Code Analysis/Syntax/ExpressionStatementSyntax.cpp index a991012..a36cf3d 100644 --- a/src/Mamba/Code Analysis/Syntax/ExpressionStatementSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/ExpressionStatementSyntax.cpp @@ -22,7 +22,17 @@ SyntaxKind ExpressionStatementSyntax::Kind() const noexcept return SyntaxKind::ExpressionStatement; } -std::vector ExpressionStatementSyntax::Children() const noexcept +std::size_t ExpressionStatementSyntax::ChildrenCount() const noexcept { - return { Expression }; -} \ No newline at end of file + return 1; +} + +const SyntaxNode* ExpressionStatementSyntax::ChildAt(std::size_t Index) const noexcept +{ + if (Index != 0) + { + ReportChildrenAccessOutOfBounds(Index); + } + + return Expression; +} diff --git a/src/Mamba/Code Analysis/Syntax/ExpressionStatementSyntax.h b/src/Mamba/Code Analysis/Syntax/ExpressionStatementSyntax.h index c3d121f..0e8f5cc 100644 --- a/src/Mamba/Code Analysis/Syntax/ExpressionStatementSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/ExpressionStatementSyntax.h @@ -19,8 +19,11 @@ namespace Mamba ~ExpressionStatementSyntax() noexcept override; SyntaxKind Kind() const noexcept override; - std::vector Children() const noexcept override; const ExpressionSyntax* Expression; + + private: + std::size_t ChildrenCount() const noexcept override; + const SyntaxNode* ChildAt(std::size_t Index) const noexcept override; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/ForStatementSyntax.cpp b/src/Mamba/Code Analysis/Syntax/ForStatementSyntax.cpp index 24a3bba..7682ddb 100644 --- a/src/Mamba/Code Analysis/Syntax/ForStatementSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/ForStatementSyntax.cpp @@ -43,7 +43,34 @@ SyntaxKind ForStatementSyntax::Kind() const noexcept return SyntaxKind::ForStatement; } -std::vector ForStatementSyntax::Children() const noexcept +std::size_t ForStatementSyntax::ChildrenCount() const noexcept { - return { Keyword, OpenParenthesisToken, InitStatement, InitStatementColonToken, Condition, ConditionColonToken, Expression, CloseParenthesisToken, Body }; + return 9; +} + +const SyntaxNode* ForStatementSyntax::ChildAt(std::size_t Index) const noexcept +{ + switch (Index) + { + case 0: + return Keyword; + case 1: + return OpenParenthesisToken; + case 2: + return InitStatement; + case 3: + return InitStatementColonToken; + case 4: + return Condition; + case 5: + return ConditionColonToken; + case 6: + return Expression; + case 7: + return CloseParenthesisToken; + case 8: + return Body; + default: + ReportChildrenAccessOutOfBounds(Index); + } } \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/ForStatementSyntax.h b/src/Mamba/Code Analysis/Syntax/ForStatementSyntax.h index 2823e78..4cd465c 100644 --- a/src/Mamba/Code Analysis/Syntax/ForStatementSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/ForStatementSyntax.h @@ -30,7 +30,6 @@ namespace Mamba ~ForStatementSyntax() noexcept override; SyntaxKind Kind() const noexcept override; - std::vector Children() const noexcept override; const SyntaxToken* Keyword; const SyntaxToken* OpenParenthesisToken; @@ -41,5 +40,9 @@ namespace Mamba const ExpressionSyntax* Expression; const SyntaxToken* CloseParenthesisToken; const StatementSyntax* Body; + + private: + std::size_t ChildrenCount() const noexcept override; + const SyntaxNode* ChildAt(std::size_t Index) const noexcept override; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/FunctionDeclarationSyntax.cpp b/src/Mamba/Code Analysis/Syntax/FunctionDeclarationSyntax.cpp index 77e8b25..8fc5b3d 100644 --- a/src/Mamba/Code Analysis/Syntax/FunctionDeclarationSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/FunctionDeclarationSyntax.cpp @@ -38,24 +38,41 @@ SyntaxKind FunctionDeclarationSyntax::Kind() const noexcept return SyntaxKind::FunctionDeclaration; } -std::vector FunctionDeclarationSyntax::Children() const noexcept +std::size_t FunctionDeclarationSyntax::ChildrenCount() const noexcept { - auto Children = std::vector(); - Children.reserve(6 + Parameters.Count() * 2); + return 6 + Parameters.size(); +} - Children.emplace_back(FunctionKeyword); - Children.emplace_back(Identifier); - Children.emplace_back(OpenParenthesisToken); - for (auto Parameter : Parameters.Nodes()) +const SyntaxNode* FunctionDeclarationSyntax::ChildAt(std::size_t Index) const noexcept +{ + if (Index == 0) + { + return FunctionKeyword; + } + else if (Index == 1) + { + return Identifier; + } + else if (Index == 2) + { + return OpenParenthesisToken; + } + else if (Index < Parameters.size() + 3) + { + return Parameters[Index - 3]; + } + else if (Index == Parameters.size() + 3) + { + return CloseParenthesisToken; + } + else if (Index == Parameters.size() + 4) { - Children.emplace_back(Parameter); + return Type ? static_cast(Type) : Body; } - Children.emplace_back(CloseParenthesisToken); - if (Type) + else if (Index == Parameters.size() + 5 && Type) { - Children.emplace_back(Type); + return Body; } - Children.emplace_back(Body); - return Children; + ReportChildrenAccessOutOfBounds(Index); } \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/FunctionDeclarationSyntax.h b/src/Mamba/Code Analysis/Syntax/FunctionDeclarationSyntax.h index 80712f4..951de39 100644 --- a/src/Mamba/Code Analysis/Syntax/FunctionDeclarationSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/FunctionDeclarationSyntax.h @@ -29,7 +29,6 @@ namespace Mamba ~FunctionDeclarationSyntax() noexcept override; SyntaxKind Kind() const noexcept override; - std::vector Children() const noexcept override; const SyntaxToken* FunctionKeyword; const SyntaxToken* Identifier; @@ -38,5 +37,9 @@ namespace Mamba const SyntaxToken* CloseParenthesisToken; NullablePointer Type; const BlockStatementSyntax* Body; + + private: + std::size_t ChildrenCount() const noexcept override; + const SyntaxNode* ChildAt(std::size_t Index) const noexcept override; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/GlobalStatementSyntax.cpp b/src/Mamba/Code Analysis/Syntax/GlobalStatementSyntax.cpp index ef37c5c..9fb8452 100644 --- a/src/Mamba/Code Analysis/Syntax/GlobalStatementSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/GlobalStatementSyntax.cpp @@ -22,7 +22,17 @@ SyntaxKind GlobalStatementSyntax::Kind() const noexcept return SyntaxKind::GlobalStatement; } -std::vector GlobalStatementSyntax::Children() const noexcept +std::size_t GlobalStatementSyntax::ChildrenCount() const noexcept { - return { Statement }; -} \ No newline at end of file + return 1; +} + +const SyntaxNode* GlobalStatementSyntax::ChildAt(std::size_t Index) const noexcept +{ + if (Index != 0) + { + ReportChildrenAccessOutOfBounds(Index); + } + + return Statement; +} diff --git a/src/Mamba/Code Analysis/Syntax/GlobalStatementSyntax.h b/src/Mamba/Code Analysis/Syntax/GlobalStatementSyntax.h index b7ef2a6..1ed57a1 100644 --- a/src/Mamba/Code Analysis/Syntax/GlobalStatementSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/GlobalStatementSyntax.h @@ -19,8 +19,11 @@ namespace Mamba ~GlobalStatementSyntax() noexcept override; SyntaxKind Kind() const noexcept override; - std::vector Children() const noexcept override; const StatementSyntax* Statement; + + private: + std::size_t ChildrenCount() const noexcept override; + const SyntaxNode* ChildAt(std::size_t Index) const noexcept override; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/IfStatementSyntax.cpp b/src/Mamba/Code Analysis/Syntax/IfStatementSyntax.cpp index 909bd86..0072994 100644 --- a/src/Mamba/Code Analysis/Syntax/IfStatementSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/IfStatementSyntax.cpp @@ -29,42 +29,28 @@ SyntaxKind IfStatementSyntax::Kind() const noexcept return SyntaxKind::IfStatement; } -std::vector IfStatementSyntax::Children() const noexcept +std::size_t IfStatementSyntax::ChildrenCount() const noexcept { - // Calculates the number of children, in for statement, parentheses and else clause are optional, - // so there are at least 3 children - auto ChildrenCount = 3; - if (OpenParenthesisToken) - { - ++ChildrenCount; - } - if (CloseParenthesisToken) - { - ++ChildrenCount; - } - if (ElseClause) - { - ++ChildrenCount; - } - - auto Children = std::vector(); - Children.reserve(ChildrenCount); + return ElseClause ? 3 : 4; +} - Children.emplace_back(IfKeyword); - if (OpenParenthesisToken) - { - Children.emplace_back(OpenParenthesisToken); - } - Children.emplace_back(Condition); - if (CloseParenthesisToken) - { - Children.emplace_back(CloseParenthesisToken); - } - Children.emplace_back(ThenStatement); - if (ElseClause) +const SyntaxNode* IfStatementSyntax::ChildAt(std::size_t Index) const noexcept +{ + switch (Index) { - Children.emplace_back(ElseClause); + case 0: + return IfKeyword; + case 1: + return Condition; + case 2: + return ThenStatement; + case 3: + if (ElseClause) + { + return ElseClause; + } + [[fallthrough]]; + default: + ReportChildrenAccessOutOfBounds(Index); } - - return Children; } \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/IfStatementSyntax.h b/src/Mamba/Code Analysis/Syntax/IfStatementSyntax.h index 4ca7219..9906f19 100644 --- a/src/Mamba/Code Analysis/Syntax/IfStatementSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/IfStatementSyntax.h @@ -23,11 +23,14 @@ namespace Mamba ~IfStatementSyntax() noexcept override; SyntaxKind Kind() const noexcept override; - std::vector Children() const noexcept override; const SyntaxToken* IfKeyword; const ExpressionSyntax* Condition; const StatementSyntax* ThenStatement; NullablePointer ElseClause; + + private: + std::size_t ChildrenCount() const noexcept override; + const SyntaxNode* ChildAt(std::size_t Index) const noexcept override; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/LegacySyntaxTree.h b/src/Mamba/Code Analysis/Syntax/LegacySyntaxTree.h deleted file mode 100644 index fbdf3d2..0000000 --- a/src/Mamba/Code Analysis/Syntax/LegacySyntaxTree.h +++ /dev/null @@ -1,90 +0,0 @@ -#pragma once - -#include "MambaCore.h" - -#include -#include -#include -#include -#include - -namespace Mamba -{ - class Compilation; - - class SyntaxTree : std::enable_shared_from_this - { - friend Compilation; - using ParentsMapType = - std::unordered_map, NullableSharedPtr>; - - std::optional Parents; - - [[nodiscard]] SyntaxTree(const std::shared_ptr Text, auto&& Handler) noexcept - requires requires { - Handler( - shared_from_this(), - std::declval&>(), - std::declval&>() - ); - } - : - Text(Text) - { - Handler(std::make_shared(*this), PrivateRoot, PrivateDiagnostics); - } - - std::shared_ptr PrivateRoot; - std::vector PrivateDiagnostics; - - static void Parse( - const std::shared_ptr SyntaxTree, - std::shared_ptr& Root, - std::vector& Diagnostics - ) noexcept; - - public: - [[nodiscard]] SyntaxTree(const std::shared_ptr Text) noexcept; - - const std::shared_ptr Text; - [[nodiscard]] const std::shared_ptr Root() const noexcept; - [[nodiscard]] const std::vector& Diagnostics() const noexcept; - - [[deprecated("No longer support contructing SyntaxTree from file directly.")]] [[nodiscard]] static SyntaxTree - Load(const std::shared_ptr FileName) noexcept; - - [[nodiscard]] static SyntaxTree Parse(const std::shared_ptr Text) noexcept; - [[nodiscard]] static SyntaxTree Parse(const std::shared_ptr Text) noexcept; - - [[nodiscard]] static std::vector> ParseTokens( - const std::shared_ptr Text, - const bool IncludeEndOfFile = false - ) noexcept; - - [[nodiscard]] static std::vector> ParseTokens( - const std::shared_ptr Text, - NullablePointer> Diagnostics, - const bool IncludeEndOfFile = false - ) noexcept; - - [[nodiscard]] static std::vector> ParseTokens( - const std::shared_ptr Text, - const bool IncludeEndOfFile = false - ) noexcept; - [[nodiscard]] static std::vector> ParseTokens( - const std::shared_ptr Text, - NullablePointer> Diagnostics, - const bool IncludeEndOfFile = false - ) noexcept; - - [[nodiscard]] NullableSharedPtr - GetParent(const std::shared_ptr Node) const noexcept; - - private: - [[nodiscard]] ParentsMapType CreateParentsMap(const std::shared_ptr Root - ) const noexcept; - - void - CreateParentsMap(ParentsMapType& Result, const std::shared_ptr Node) const noexcept; - }; -} // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/Lexer.cpp b/src/Mamba/Code Analysis/Syntax/Lexer.cpp index befc18b..dc76829 100644 --- a/src/Mamba/Code Analysis/Syntax/Lexer.cpp +++ b/src/Mamba/Code Analysis/Syntax/Lexer.cpp @@ -7,38 +7,31 @@ #include "SyntaxKind.h" #include "SyntaxToken.h" #include "SyntaxTree.h" -#include "TextLocation.h" -#include "TextSpan.h" - -#include -#include -#include namespace Mamba { Lexer::Lexer(const class SyntaxTree* SyntaxTree) : - SyntaxTree(SyntaxTree), Text(SyntaxTree->Text), Position(), Start(), Kind(SyntaxKind::BadToken) + SyntaxTree(SyntaxTree), Position(), Start(), Kind(SyntaxKind::BadToken) { } - std::shared_ptr Lexer::Lex() noexcept + SyntaxToken Lexer::Lex() noexcept { - const auto TokenStart = Position; + auto TokenStart = Position; ReadToken(); - const auto TokenKind = Kind; - const auto TokenValue = Value; - const auto TokenLength = Position - Start; + auto TokenValue = Value; + auto TokenLength = Position - Start; - auto TokenText = - std::make_shared(Hatcher([&] { return String(SyntaxFacts::GetText(TokenKind)); })); - if (TokenText->empty()) - { - TokenText = Text->ToString(TokenStart, TokenLength); - } + auto TokenText = Text().SubView(TokenStart, TokenLength); + + return SyntaxToken(SyntaxTree, Kind, TokenText, TokenValue); + } - return std::make_shared(SyntaxTree, Kind, TokenStart, TokenText, TokenValue); + const SourceText& Lexer::Text() const noexcept + { + return SyntaxTree->Text(); } Char Lexer::Current() const noexcept @@ -51,236 +44,236 @@ namespace Mamba return Peek(1); } - Char Lexer::Peek(const std::size_t Offset) const noexcept + Char Lexer::Peek(std::size_t Offset) const noexcept { - const auto Index = Position + Offset; - if (Index >= Text->Length()) - { - return '\0'; - } + auto Index = Position + Offset; + if (Index >= Text().Length()) + { + return '\0'; + } - return (*Text)[Index]; + return Text()[Index]; } void Lexer::ReadToken() noexcept { Start = Position; Kind = SyntaxKind::BadToken; - Value = nullptr; + Value = {}; switch (Current()) - { - case TEXT('\0'): - Kind = SyntaxKind::EndOfFileToken; - break; - case TEXT('+'): - ++Position; - if (Current() != TEXT('=')) - { - Kind = SyntaxKind::PlusToken; - } - else - { - Kind = SyntaxKind::PlusEqualsToken; - ++Position; - } - break; - case TEXT('-'): - ++Position; - if (Current() != TEXT('=')) - { - Kind = SyntaxKind::MinusToken; - } - else - { - Kind = SyntaxKind::MinusEqualsToken; - ++Position; - } - break; - case TEXT('*'): - ++Position; - if (Current() != TEXT('=')) - { - Kind = SyntaxKind::StarToken; - } - else - { - Kind = SyntaxKind::StarEqualsToken; - ++Position; - } - break; - case TEXT('/'): - ++Position; - if (Current() != TEXT('=')) - { - Kind = SyntaxKind::SlashToken; - } - else - { - Kind = SyntaxKind::SlashEqualsToken; - ++Position; - } - break; - case TEXT('('): - Kind = SyntaxKind::OpenParenthesisToken; - ++Position; - break; - case TEXT(')'): - Kind = SyntaxKind::CloseParenthesisToken; + { + case TEXT('\0'): + Kind = SyntaxKind::EndOfFileToken; + break; + case TEXT('+'): + ++Position; + if (Current() != TEXT('=')) + { + Kind = SyntaxKind::PlusToken; + } + else + { + Kind = SyntaxKind::PlusEqualsToken; ++Position; - break; - case TEXT('{'): - Kind = SyntaxKind::OpenBraceToken; + } + break; + case TEXT('-'): + ++Position; + if (Current() != TEXT('=')) + { + Kind = SyntaxKind::MinusToken; + } + else + { + Kind = SyntaxKind::MinusEqualsToken; ++Position; - break; - case TEXT('}'): - Kind = SyntaxKind::CloseBraceToken; + } + break; + case TEXT('*'): + ++Position; + if (Current() != TEXT('=')) + { + Kind = SyntaxKind::StarToken; + } + else + { + Kind = SyntaxKind::StarEqualsToken; ++Position; - break; - case TEXT(':'): - Kind = SyntaxKind::ColonToken; + } + break; + case TEXT('/'): + ++Position; + if (Current() != TEXT('=')) + { + Kind = SyntaxKind::SlashToken; + } + else + { + Kind = SyntaxKind::SlashEqualsToken; ++Position; - break; - case TEXT(','): - Kind = SyntaxKind::CommaToken; + } + break; + case TEXT('('): + Kind = SyntaxKind::OpenParenthesisToken; + ++Position; + break; + case TEXT(')'): + Kind = SyntaxKind::CloseParenthesisToken; + ++Position; + break; + case TEXT('{'): + Kind = SyntaxKind::OpenBraceToken; + ++Position; + break; + case TEXT('}'): + Kind = SyntaxKind::CloseBraceToken; + ++Position; + break; + case TEXT(':'): + Kind = SyntaxKind::ColonToken; + ++Position; + break; + case TEXT(','): + Kind = SyntaxKind::CommaToken; + ++Position; + break; + case TEXT('~'): + Kind = SyntaxKind::TildeToken; + ++Position; + break; + case TEXT('^'): + ++Position; + if (Current() != TEXT('=')) + { + Kind = SyntaxKind::HatToken; + } + else + { + Kind = SyntaxKind::HatEqualsToken; ++Position; - break; - case TEXT('~'): - Kind = SyntaxKind::TildeToken; + } + break; + case TEXT('&'): + ++Position; + if (Current() == TEXT('&')) + { + Kind = SyntaxKind::AmpersandAmpersandToken; ++Position; - break; - case TEXT('^'): + } + else if (Current() == TEXT('=')) + { + Kind = SyntaxKind::AmpersandEqualsToken; ++Position; - if (Current() != TEXT('=')) - { - Kind = SyntaxKind::HatToken; - } - else - { - Kind = SyntaxKind::HatEqualsToken; - ++Position; - } - break; - case TEXT('&'): + } + else + { + Kind = SyntaxKind::AmpersandToken; + } + break; + case TEXT('|'): + ++Position; + if (Current() == TEXT('|')) + { + Kind = SyntaxKind::PipePipeToken; ++Position; - if (Current() == TEXT('&')) - { - Kind = SyntaxKind::AmpersandAmpersandToken; - ++Position; - } - else if (Current() == TEXT('=')) - { - Kind = SyntaxKind::AmpersandEqualsToken; - ++Position; - } - else - { - Kind = SyntaxKind::AmpersandToken; - } - break; - case TEXT('|'): + } + else if (Current() == TEXT('=')) + { + Kind = SyntaxKind::PipeEqualsToken; ++Position; - if (Current() == TEXT('|')) - { - Kind = SyntaxKind::PipePipeToken; - ++Position; - } - else if (Current() == TEXT('=')) - { - Kind = SyntaxKind::PipeEqualsToken; - ++Position; - } - else - { - Kind = SyntaxKind::PipeToken; - } - break; - case TEXT('='): + } + else + { + Kind = SyntaxKind::PipeToken; + } + break; + case TEXT('='): + ++Position; + if (Current() != TEXT('=')) + { + Kind = SyntaxKind::EqualsToken; + } + else + { + Kind = SyntaxKind::EqualsEqualsToken; ++Position; - if (Current() != TEXT('=')) - { - Kind = SyntaxKind::EqualsToken; - } - else - { - Kind = SyntaxKind::EqualsEqualsToken; - ++Position; - } - break; - case TEXT('!'): + } + break; + case TEXT('!'): + ++Position; + if (Current() != TEXT('=')) + { + Kind = SyntaxKind::BangToken; + } + else + { + Kind = SyntaxKind::BangEqualsToken; ++Position; - if (Current() != TEXT('=')) - { - Kind = SyntaxKind::BangToken; - } - else - { - Kind = SyntaxKind::BangEqualsToken; - ++Position; - } - break; - case TEXT('<'): + } + break; + case TEXT('<'): + ++Position; + if (Current() != TEXT('=')) + { + Kind = SyntaxKind::LessToken; + } + else + { + Kind = SyntaxKind::LessOrEqualsToken; ++Position; - if (Current() != TEXT('=')) - { - Kind = SyntaxKind::LessToken; - } - else - { - Kind = SyntaxKind::LessOrEqualsToken; - ++Position; - } - break; - case TEXT('>'): + } + break; + case TEXT('>'): + ++Position; + if (Current() != TEXT('=')) + { + Kind = SyntaxKind::GreaterToken; + } + else + { + Kind = SyntaxKind::GreaterOrEqualsToken; ++Position; - if (Current() != TEXT('=')) - { - Kind = SyntaxKind::GreaterToken; - } - else - { - Kind = SyntaxKind::GreaterOrEqualsToken; - ++Position; - } - break; - case TEXT('"'): - ReadString(); - break; - case TEXT('0'): - case TEXT('1'): - case TEXT('2'): - case TEXT('3'): - case TEXT('4'): - case TEXT('5'): - case TEXT('6'): - case TEXT('7'): - case TEXT('8'): - case TEXT('9'): - ReadNumber(); - break; - case TEXT(' '): - case TEXT('\n'): - case TEXT('\t'): - case TEXT('\r'): - ReadWhitespace(); - break; - case TEXT('_'): + } + break; + case TEXT('"'): + ReadString(); + break; + case TEXT('0'): + case TEXT('1'): + case TEXT('2'): + case TEXT('3'): + case TEXT('4'): + case TEXT('5'): + case TEXT('6'): + case TEXT('7'): + case TEXT('8'): + case TEXT('9'): + ReadNumber(); + break; + case TEXT(' '): + case TEXT('\n'): + case TEXT('\t'): + case TEXT('\r'): + ReadWhitespace(); + break; + case TEXT('_'): + ReadIdentifierOrKeyword(); + break; + default: + if (IsLetter(Current())) + { ReadIdentifierOrKeyword(); - break; - default: - if (IsLetter(Current())) - { - ReadIdentifierOrKeyword(); - } - else - { - const auto Span = TextSpan(Position, 1); - const auto Location = TextLocation(Text, Span); - Diagnostics.ReportInvalidCharacter(Location, Current()); - ++Position; - } - break; - } + } + else + { + auto View = Text().SubView(Position, 1); + auto Location = TextLocation(Text(), View); + Diagnostics.ReportInvalidCharacter(Location, Current()); + ++Position; + } + break; + } } void Lexer::ReadString() noexcept @@ -290,61 +283,63 @@ namespace Mamba bool Done = false; while (!Done) + { + switch (Current()) { - switch (Current()) + case TEXT('\0'): + case TEXT('\r'): + case TEXT('\n'): + { + auto View = Text().SubView(Position, 1); + auto Location = TextLocation(Text(), View); + Diagnostics.ReportUnterminatedString(Location); + Done = true; + break; + } + case TEXT('"'): + if (Lookahead() == TEXT('"')) + { + Position += 2; + } + else { - case TEXT('\0'): - case TEXT('\r'): - case TEXT('\n'): - { - const auto Span = TextSpan(Start, 1); - const auto Location = TextLocation(Text, Span); - Diagnostics.ReportUnterminatedString(Location); - Done = true; - break; - } - case TEXT('"'): - if (Lookahead() == TEXT('"')) - { - Position += 2; - } - else - { - ++Position; - Done = true; - } - break; - default: - ++Position; - break; + ++Position; + Done = true; } + break; + default: + ++Position; + break; } + } - const auto Length = Position - Start; + auto Length = Position - Start; Kind = SyntaxKind::StringToken; - Value = std::make_shared(Literal(Text->ToString(Start + 1, Length - 2))); + Value = Text().SubView(Start + 1, Length - 2); } void Lexer::ReadIdentifierOrKeyword() noexcept { while (IsLetterOrDigit(Current()) || Current() == TEXT('_')) - { - ++Position; - } + { + ++Position; + } - const auto Length = Position - Start; - const auto Span = TextSpan(Start, Length); - const auto Text = this->Text->ToView(Span); + auto Length = Position - Start; + auto Text = this->Text().SubView(Start, Length); Kind = SyntaxFacts::GetKeywordKind(Text); } void Lexer::ReadWhitespace() noexcept { - while (Current() == TEXT(' ') || Current() == TEXT('\n') || Current() == TEXT('\t') || Current() == TEXT('\r')) - { - ++Position; - } + while (Current() == TEXT(' ') || + Current() == TEXT('\n') || + Current() == TEXT('\t') || + Current() == TEXT('\r')) + { + ++Position; + } Kind = SyntaxKind::WhitespaceToken; } @@ -359,17 +354,17 @@ namespace Mamba // The current character is guaranteed to be a digit if (Current() != TEXT('0')) - { - ReadDecimal(); - } + { + ReadDecimal(); + } else if (Lookahead() == TEXT('x') || Lookahead() == TEXT('X')) - { - ReadHexadecimal(); - } + { + ReadHexadecimal(); + } else if (Lookahead() == TEXT('b') || Lookahead() == TEXT('B')) - { - ReadBinary(); - } + { + ReadBinary(); + } ReadOctal(); @@ -379,102 +374,84 @@ namespace Mamba void Lexer::ReadDecimal() noexcept { while (IsDecimalDigit(Current())) - { - ++Position; - } + { + ++Position; + } - const auto Length = Position - Start; - const auto Span = TextSpan(Start, Length); - const auto Number = ParseNumber<10>(Span); - NarrowNumber(Number); + auto Length = Position - Start; + auto View = Text().SubView(Start, Length); + Value = ParseNumber<10>(View); } void Lexer::ReadHexadecimal() noexcept { while (IsHexadecimalDigit(Current())) - { - ++Position; - } + { + ++Position; + } // Skip the '0x' or '0X' character sequence - const auto Length = Position - Start; - const auto Span = TextSpan(Start + 2, Length); - const auto Number = ParseNumber<16>(Span); - NarrowNumber(Number); + auto Length = Position - Start; + auto View = Text().SubView(Start + 2, Length); + Value = ParseNumber<16>(View); } void Lexer::ReadBinary() noexcept { while (IsHexadecimalDigit(Current())) - { - ++Position; - } + { + ++Position; + } // Skip the '0b' or '0B' character sequence - const auto Length = Position - Start; - const auto Span = TextSpan(Start + 2, Length); - const auto Number = ParseNumber<2>(Span); - NarrowNumber(Number); + auto Length = Position - Start; + auto View = Text().SubView(Start + 2, Length); + Value = ParseNumber<2>(View); } void Lexer::ReadOctal() noexcept { while (IsHexadecimalDigit(Current())) - { - ++Position; - } + { + ++Position; + } // Skip the 0 prefix - const auto Length = Position - Start; - const auto Span = TextSpan(Start + 1, Length); - const auto Number = ParseNumber<8>(Span); - NarrowNumber(Number); + auto Length = Position - Start; + auto View = Text().SubView(Start + 1, Length); + Value = ParseNumber<8>(View); } - bool Lexer::IsLetter(const Char Character) noexcept + bool Lexer::IsLetter(Char Character) noexcept { - return (Character >= TEXT('a') && Character <= TEXT('z')) || (Character >= TEXT('A') && Character <= TEXT('Z')); + return (Character >= TEXT('a') && Character <= TEXT('z')) || + (Character >= TEXT('A') && Character <= TEXT('Z')); } - bool Lexer::IsLetterOrDigit(const Char Character) noexcept + bool Lexer::IsLetterOrDigit(Char Character) noexcept { return IsLetter(Character) || IsDecimalDigit(Character); } - bool Lexer::IsDecimalDigit(const Char Character) noexcept + bool Lexer::IsDecimalDigit(Char Character) noexcept { return Character >= TEXT('0') && Character <= TEXT('9'); } - bool Lexer::IsHexadecimalDigit(const Char Character) noexcept + bool Lexer::IsHexadecimalDigit(Char Character) noexcept { - return (Character >= TEXT('0') && Character <= TEXT('9')) || (Character >= TEXT('a') && Character <= TEXT('f')) || (Character >= TEXT('A') && Character <= TEXT('F')); + return (Character >= TEXT('0') && Character <= TEXT('9')) || + (Character >= TEXT('a') && Character <= TEXT('f')) || + (Character >= TEXT('A') && Character <= TEXT('F')); } - bool Lexer::IsBinaryDigit(const Char Character) noexcept + bool Lexer::IsBinaryDigit(Char Character) noexcept { return Character == TEXT('0') || Character == TEXT('1'); } - bool Lexer::IsOctalDigit(const Char Character) noexcept + bool Lexer::IsOctalDigit(Char Character) noexcept { return Character >= TEXT('0') && Character <= TEXT('7'); } - - void Lexer::NarrowNumber(const std::uint64_t Value) noexcept - { - // Literals can be represented by int32 if they are capable of being represented by int32, - // otherwise they are int64. If the literal represents a value outside the range of int64, - // it is represented by unsigned int64, otherwise diagnostics are required. - if (Value <= std::numeric_limits::max()) - { - this->Value = std::make_shared(static_cast(Value)); - } - else if (Value <= std::numeric_limits::max()) - { - this->Value = std::make_shared(static_cast(Value)); - } - - this->Value = std::make_shared(Value); - } } // namespace Mamba diff --git a/src/Mamba/Code Analysis/Syntax/Lexer.h b/src/Mamba/Code Analysis/Syntax/Lexer.h index a45fb7e..1b9508d 100644 --- a/src/Mamba/Code Analysis/Syntax/Lexer.h +++ b/src/Mamba/Code Analysis/Syntax/Lexer.h @@ -1,37 +1,37 @@ #pragma once #include "DiagnosticBag.h" +#include "Literal.h" #include "MambaCore.h" #include "SourceText.h" #include "SyntaxKind.h" -#include "TextSpan.h" - -#include +#include "SyntaxToken.h" namespace Mamba { class Lexer { const class SyntaxTree* SyntaxTree; - const std::shared_ptr Text; std::size_t Position; std::size_t Start; SyntaxKind Kind; - NullableSharedPtr Value; + Literal Value; public: DiagnosticBag Diagnostics; [[nodiscard]] Lexer(const class SyntaxTree* SyntaxTree); - [[nodiscard]] std::shared_ptr Lex() noexcept; + [[nodiscard]] SyntaxToken Lex() noexcept; private: + const SourceText& Text() const noexcept; + [[nodiscard]] Char Current() const noexcept; [[nodiscard]] Char Lookahead() const noexcept; - [[nodiscard]] Char Peek(const std::size_t Offset) const noexcept; + [[nodiscard]] Char Peek(std::size_t Offset) const noexcept; void ReadToken() noexcept; void ReadString() noexcept; @@ -44,65 +44,53 @@ namespace Mamba void ReadBinary() noexcept; void ReadOctal() noexcept; - [[nodiscard]] static bool IsLetter(const Char Character) noexcept; - [[nodiscard]] static bool IsLetterOrDigit(const Char Character) noexcept; - [[nodiscard]] static bool IsDecimalDigit(const Char Character) noexcept; - [[nodiscard]] static bool IsHexadecimalDigit(const Char Character) noexcept; - [[nodiscard]] static bool IsBinaryDigit(const Char Character) noexcept; - [[nodiscard]] static bool IsOctalDigit(const Char Character) noexcept; - - // Narrow down the supplied number, choose the smallest type that can represent it, - // and save it to the member variable 'Value'. - void NarrowNumber(const std::uint64_t Value) noexcept; + [[nodiscard]] static bool IsLetter(Char Character) noexcept; + [[nodiscard]] static bool IsLetterOrDigit(Char Character) noexcept; + [[nodiscard]] static bool IsDecimalDigit(Char Character) noexcept; + [[nodiscard]] static bool IsHexadecimalDigit(Char Character) noexcept; + [[nodiscard]] static bool IsBinaryDigit(Char Character) noexcept; + [[nodiscard]] static bool IsOctalDigit(Char Character) noexcept; // Parse a literal number with a specified base, diagnostics are required if any error occurs. template - [[nodiscard]] std::uint64_t ParseNumber(const TextSpan Span) noexcept + [[nodiscard]] std::uint64_t ParseNumber(StringView LiteralText) noexcept requires(Base == 2 || Base == 8 || Base == 10 || Base == 16) { - const auto Literal = Text->ToView(Span); - auto Result = 0ULL; -#ifdef MAMBA_NO_EXCEPTIONS - fast_io::io::scan(fast_io::basic_ibuffer_view(Literal), fast_io::mnp::base_get(Result)); -#else try { - fast_io::io::scan(fast_io::basic_ibuffer_view(Literal), fast_io::mnp::base_get(Result)); + fast_io::io::scan(fast_io::basic_ibuffer_view(LiteralText), fast_io::mnp::base_get(Result)); } - catch (const fast_io::error& error) + catch (fast_io::error error) { - ReportInvalidNumber(Span, Literal); - fast_io::io::perrln(error); + ReportInvalidNumber(LiteralText); } -#endif return Result; } // Report an invalid number diagnostic with the specified base and literal template - void ReportInvalidNumber(const TextSpan Span, const StringView Literal) - + void ReportInvalidNumber(StringView LiteralText) requires(Base == 2 || Base == 8 || Base == 10 || Base == 16) { - const auto Location = TextLocation(Text, Span); + const auto Location = TextLocation(Text(), LiteralText); if constexpr (Base == 10) { - Diagnostics.ReportInvalidDecimal(Location, Literal); + Diagnostics.ReportInvalidDecimal(Location, LiteralText); } else if constexpr (Base == 16) { - Diagnostics.ReportInvalidHexadecimal(Location, Literal); + Diagnostics.ReportInvalidHexadecimal(Location, LiteralText); } else if constexpr (Base == 2) { - Diagnostics.ReportInvalidBinary(Location, Literal); + Diagnostics.ReportInvalidBinary(Location, LiteralText); } else if constexpr (Base == 8) { - Diagnostics.ReportInvalidOctal(Location, Literal); + Diagnostics.ReportInvalidOctal(Location, LiteralText); } } }; diff --git a/src/Mamba/Code Analysis/Syntax/Literal.cpp b/src/Mamba/Code Analysis/Syntax/Literal.cpp deleted file mode 100644 index e7a1dee..0000000 --- a/src/Mamba/Code Analysis/Syntax/Literal.cpp +++ /dev/null @@ -1,696 +0,0 @@ -#include "Literal.h" - -#include - -#include "MambaCore.h" - -using namespace Mamba; - -LiteralValue::LiteralValue() noexcept {} - -LiteralValue::LiteralValue(const StringView String) noexcept : - StringValue(String) {} - -LiteralValue::LiteralValue(const std::int8_t Integer) noexcept : - SignedByteValue(Integer) {} - -LiteralValue::LiteralValue(const std::int16_t Integer) noexcept : - SignedShortValue(Integer) {} - -LiteralValue::LiteralValue(const std::int32_t Integer) noexcept : - SignedIntValue(Integer) {} - -LiteralValue::LiteralValue(const std::int64_t Integer) noexcept : - SignedLongValue(Integer) {} - -LiteralValue::LiteralValue(const std::uint8_t Integer) noexcept : - UnsignedShortValue(Integer) {} - -LiteralValue::LiteralValue(const std::uint16_t Integer) noexcept : - UnsignedShortValue(Integer) {} - -LiteralValue::LiteralValue(const std::uint32_t Integer) noexcept : - UnsignedIntValue(Integer) {} - -LiteralValue::LiteralValue(const std::uint64_t Integer) noexcept : - UnsignedLongValue(Integer) {} - -LiteralValue::LiteralValue(const float Value) noexcept : - FloatValue(Value) {} - -LiteralValue::LiteralValue(const double Value) noexcept : - DoubleValue(Value) {} - -LiteralValue::LiteralValue(const bool Value) noexcept : - BooleanValue(Value) {} - -Literal::Literal() noexcept {} - -Literal::Literal(const std::shared_ptr String) noexcept : - Value(StringView(*String)), Type(LiteralType::String), StringValue(String) -{ -} - -Literal::Literal(const std::int8_t Integer) noexcept : - Value(Integer), Type(LiteralType::SignedByte) {} - -Literal::Literal(const std::int32_t Integer) noexcept : - Value(Integer), Type(LiteralType::SignedInt) {} - -Literal::Literal(const std::int64_t Integer) noexcept : - Value(Integer), Type(LiteralType::SignedLong) {} - -Literal::Literal(const std::uint8_t Integer) noexcept : - Value(Integer), Type(LiteralType::UnsignedByte) {} - -Literal::Literal(const std::uint16_t Integer) noexcept : - Value(Integer), Type(LiteralType::UnsignedShort) {} - -Literal::Literal(const std::uint32_t Integer) noexcept : - Value(Integer), Type(LiteralType::UnsignedInt) {} - -Literal::Literal(const std::uint64_t Integer) noexcept : - Value(Integer), Type(LiteralType::UnsignedLong) {} - -Literal::Literal(const Char Character) noexcept : - Value(Character), Type(LiteralType::Character) {} - -Literal::Literal(const float Value) noexcept : - Value(Value), Type(LiteralType::Float) {} - -Literal::Literal(const double Value) noexcept : - Value(Value), Type(LiteralType::Double) {} - -Literal::Literal(const bool Value) noexcept : - Value(Value), Type(LiteralType::Boolean) {} - -NullableSharedPtr Literal::Negative(const Literal& Literal) noexcept -{ - switch (Literal.Type) - { - case LiteralType::SignedByte: - return std::make_shared(-Literal.Value.SignedByteValue); - case LiteralType::SignedShort: - return std::make_shared(-Literal.Value.SignedShortValue); - case LiteralType::SignedInt: - return std::make_shared(-Literal.Value.SignedIntValue); - case LiteralType::SignedLong: - return std::make_shared(-Literal.Value.SignedLongValue); - case LiteralType::Double: - return std::make_shared(-Literal.Value.DoubleValue); - case LiteralType::Float: - return std::make_shared(-Literal.Value.FloatValue); - - case LiteralType::String: - case LiteralType::Character: - case LiteralType::UnsignedByte: - case LiteralType::UnsignedShort: - case LiteralType::UnsignedInt: - case LiteralType::UnsignedLong: - case LiteralType::Boolean: - case LiteralType::Empty: - default: - return {}; - } -} - -NullableSharedPtr Literal::LogicalNegative(const Literal& Literal) noexcept -{ - switch (Literal.Type) - { - case LiteralType::Boolean: - return std::make_shared(!Literal.Value.BooleanValue); - - case LiteralType::SignedByte: - case LiteralType::SignedShort: - case LiteralType::SignedInt: - case LiteralType::SignedLong: - case LiteralType::Double: - case LiteralType::Float: - case LiteralType::String: - case LiteralType::Character: - case LiteralType::UnsignedByte: - case LiteralType::UnsignedShort: - case LiteralType::UnsignedInt: - case LiteralType::UnsignedLong: - case LiteralType::Empty: - default: - return {}; - } -} - -NullableSharedPtr Literal::OnesComplement(const Literal& Literal) noexcept -{ - switch (Literal.Type) - { - case LiteralType::UnsignedByte: - return std::make_shared(~Literal.Value.UnsignedByteValue); - case LiteralType::UnsignedShort: - return std::make_shared(~Literal.Value.UnsignedShortValue); - case LiteralType::UnsignedInt: - return std::make_shared(~Literal.Value.UnsignedIntValue); - case LiteralType::UnsignedLong: - return std::make_shared(~Literal.Value.UnsignedLongValue); - case LiteralType::SignedByte: - return std::make_shared(~Literal.Value.SignedByteValue); - case LiteralType::SignedShort: - return std::make_shared(~Literal.Value.SignedShortValue); - case LiteralType::SignedInt: - return std::make_shared(~Literal.Value.SignedIntValue); - case LiteralType::SignedLong: - return std::make_shared(~Literal.Value.SignedLongValue); - - case LiteralType::Double: - case LiteralType::Float: - case LiteralType::String: - case LiteralType::Character: - case LiteralType::Empty: - case LiteralType::Boolean: - default: - return {}; - } -} - -static void MatchOperandType(const LiteralType Left, const LiteralType Right) noexcept -{ - if (Left != Right) - { -#ifdef DEBUG - fast_io::io::perrln( - "Operand type not match, ", - static_cast(Left), - " != ", - static_cast(Right) - ); -#endif - std::unreachable(); - } -} - -NullableSharedPtr Literal::operator+(const Literal& Other) const noexcept -{ - MatchOperandType(Type, Other.Type); - switch (Type) - { - case LiteralType::String: - return std::make_shared(Hatcher( - [&] - { return std::make_shared(Concat(Value.StringValue, Other.Value.StringValue)); } - )); - case LiteralType::UnsignedByte: - return std::make_shared(Value.UnsignedByteValue + Other.Value.UnsignedByteValue); - case LiteralType::UnsignedShort: - return std::make_shared(Value.UnsignedShortValue + Other.Value.UnsignedShortValue); - case LiteralType::UnsignedInt: - return std::make_shared(Value.UnsignedIntValue + Other.Value.UnsignedIntValue); - case LiteralType::UnsignedLong: - return std::make_shared(Value.UnsignedLongValue + Other.Value.UnsignedLongValue); - case LiteralType::SignedByte: - return std::make_shared(Value.SignedByteValue + Other.Value.SignedByteValue); - case LiteralType::SignedShort: - return std::make_shared(Value.SignedShortValue + Other.Value.SignedShortValue); - case LiteralType::SignedInt: - return std::make_shared(Value.SignedIntValue + Other.Value.SignedIntValue); - case LiteralType::SignedLong: - return std::make_shared(Value.SignedLongValue + Other.Value.SignedLongValue); - case LiteralType::Double: - return std::make_shared(Value.DoubleValue + Other.Value.DoubleValue); - case LiteralType::Float: - return std::make_shared(Value.FloatValue + Other.Value.FloatValue); - case LiteralType::Character: - case LiteralType::Boolean: - case LiteralType::Empty: - default: - return {}; - } -} - -NullableSharedPtr Literal::operator-(const Literal& Other) const noexcept -{ - MatchOperandType(Type, Other.Type); - switch (Type) - { - case LiteralType::UnsignedByte: - return std::make_shared(Value.UnsignedByteValue - Other.Value.UnsignedByteValue); - case LiteralType::UnsignedShort: - return std::make_shared(Value.UnsignedShortValue - Other.Value.UnsignedShortValue); - case LiteralType::UnsignedInt: - return std::make_shared(Value.UnsignedIntValue - Other.Value.UnsignedIntValue); - case LiteralType::UnsignedLong: - return std::make_shared(Value.UnsignedLongValue - Other.Value.UnsignedLongValue); - case LiteralType::SignedByte: - return std::make_shared(Value.SignedByteValue - Other.Value.SignedByteValue); - case LiteralType::SignedShort: - return std::make_shared(Value.SignedShortValue - Other.Value.SignedShortValue); - case LiteralType::SignedInt: - return std::make_shared(Value.SignedIntValue - Other.Value.SignedIntValue); - case LiteralType::SignedLong: - return std::make_shared(Value.SignedLongValue - Other.Value.SignedLongValue); - case LiteralType::Double: - return std::make_shared(Value.DoubleValue - Other.Value.DoubleValue); - case LiteralType::Float: - return std::make_shared(Value.FloatValue - Other.Value.FloatValue); - - case LiteralType::String: - case LiteralType::Character: - case LiteralType::Boolean: - case LiteralType::Empty: - default: - return {}; - } -} - -NullableSharedPtr Literal::operator*(const Literal& Other) const noexcept -{ - MatchOperandType(Type, Other.Type); - switch (Type) - { - case LiteralType::UnsignedByte: - return std::make_shared(Value.UnsignedByteValue * Other.Value.UnsignedByteValue); - case LiteralType::UnsignedShort: - return std::make_shared(Value.UnsignedShortValue * Other.Value.UnsignedShortValue); - case LiteralType::UnsignedInt: - return std::make_shared(Value.UnsignedIntValue * Other.Value.UnsignedIntValue); - case LiteralType::UnsignedLong: - return std::make_shared(Value.UnsignedLongValue * Other.Value.UnsignedLongValue); - case LiteralType::SignedByte: - return std::make_shared(Value.SignedByteValue * Other.Value.SignedByteValue); - case LiteralType::SignedShort: - return std::make_shared(Value.SignedShortValue * Other.Value.SignedShortValue); - case LiteralType::SignedInt: - return std::make_shared(Value.SignedIntValue * Other.Value.SignedIntValue); - case LiteralType::SignedLong: - return std::make_shared(Value.SignedLongValue * Other.Value.SignedLongValue); - case LiteralType::Double: - return std::make_shared(Value.DoubleValue * Other.Value.DoubleValue); - case LiteralType::Float: - return std::make_shared(Value.FloatValue * Other.Value.FloatValue); - - case LiteralType::String: - case LiteralType::Character: - case LiteralType::Boolean: - case LiteralType::Empty: - default: - return {}; - } -} - -NullableSharedPtr Literal::operator/(const Literal& Other) const noexcept -{ - MatchOperandType(Type, Other.Type); - switch (Type) - { - case LiteralType::UnsignedByte: - return std::make_shared(Value.UnsignedByteValue / Other.Value.UnsignedByteValue); - case LiteralType::UnsignedShort: - return std::make_shared(Value.UnsignedShortValue / Other.Value.UnsignedShortValue); - case LiteralType::UnsignedInt: - return std::make_shared(Value.UnsignedIntValue / Other.Value.UnsignedIntValue); - case LiteralType::UnsignedLong: - return std::make_shared(Value.UnsignedLongValue / Other.Value.UnsignedLongValue); - case LiteralType::SignedByte: - return std::make_shared(Value.SignedByteValue / Other.Value.SignedByteValue); - case LiteralType::SignedShort: - return std::make_shared(Value.SignedShortValue / Other.Value.SignedShortValue); - case LiteralType::SignedInt: - return std::make_shared(Value.SignedIntValue / Other.Value.SignedIntValue); - case LiteralType::SignedLong: - return std::make_shared(Value.SignedLongValue / Other.Value.SignedLongValue); - case LiteralType::Double: - return std::make_shared(Value.DoubleValue / Other.Value.DoubleValue); - case LiteralType::Float: - return std::make_shared(Value.FloatValue / Other.Value.FloatValue); - - case LiteralType::Boolean: - case LiteralType::Empty: - case LiteralType::String: - case LiteralType::Character: - default: - return {}; - } -} - -NullableSharedPtr Literal::operator&(const Literal& Other) const noexcept -{ - MatchOperandType(Type, Other.Type); - switch (Type) - { - case LiteralType::UnsignedByte: - return std::make_shared(Value.UnsignedByteValue & Other.Value.UnsignedByteValue); - case LiteralType::UnsignedShort: - return std::make_shared(Value.UnsignedShortValue & Other.Value.UnsignedShortValue); - case LiteralType::UnsignedInt: - return std::make_shared(Value.UnsignedIntValue & Other.Value.UnsignedIntValue); - case LiteralType::UnsignedLong: - return std::make_shared(Value.UnsignedLongValue & Other.Value.UnsignedLongValue); - case LiteralType::SignedByte: - return std::make_shared(Value.SignedByteValue & Other.Value.SignedByteValue); - case LiteralType::SignedShort: - return std::make_shared(Value.SignedShortValue & Other.Value.SignedShortValue); - case LiteralType::SignedInt: - return std::make_shared(Value.SignedIntValue & Other.Value.SignedIntValue); - case LiteralType::SignedLong: - return std::make_shared(Value.SignedLongValue & Other.Value.SignedLongValue); - - case LiteralType::String: - case LiteralType::Character: - case LiteralType::Double: - case LiteralType::Float: - case LiteralType::Boolean: - case LiteralType::Empty: - default: - return {}; - } -} - -NullableSharedPtr Literal::operator|(const Literal& Other) const noexcept -{ - MatchOperandType(Type, Other.Type); - switch (Type) - { - case LiteralType::UnsignedByte: - return std::make_shared(Value.UnsignedByteValue | Other.Value.UnsignedByteValue); - case LiteralType::UnsignedShort: - return std::make_shared(Value.UnsignedShortValue | Other.Value.UnsignedShortValue); - case LiteralType::UnsignedInt: - return std::make_shared(Value.UnsignedIntValue | Other.Value.UnsignedIntValue); - case LiteralType::UnsignedLong: - return std::make_shared(Value.UnsignedLongValue | Other.Value.UnsignedLongValue); - case LiteralType::SignedByte: - return std::make_shared(Value.SignedByteValue | Other.Value.SignedByteValue); - case LiteralType::SignedShort: - return std::make_shared(Value.SignedShortValue | Other.Value.SignedShortValue); - case LiteralType::SignedInt: - return std::make_shared(Value.SignedIntValue | Other.Value.SignedIntValue); - case LiteralType::SignedLong: - return std::make_shared(Value.SignedLongValue | Other.Value.SignedLongValue); - case LiteralType::Boolean: - return std::make_shared(Value.BooleanValue | Other.Value.BooleanValue); - - case LiteralType::String: - case LiteralType::Character: - case LiteralType::Double: - case LiteralType::Float: - case LiteralType::Empty: - default: - return {}; - } -} - -NullableSharedPtr Literal::operator^(const Literal& Other) const noexcept -{ - MatchOperandType(Type, Other.Type); - switch (Type) - { - case LiteralType::UnsignedByte: - return std::make_shared(Value.UnsignedByteValue ^ Other.Value.UnsignedByteValue); - case LiteralType::UnsignedShort: - return std::make_shared(Value.UnsignedShortValue ^ Other.Value.UnsignedShortValue); - case LiteralType::UnsignedInt: - return std::make_shared(Value.UnsignedIntValue ^ Other.Value.UnsignedIntValue); - case LiteralType::UnsignedLong: - return std::make_shared(Value.UnsignedLongValue ^ Other.Value.UnsignedLongValue); - case LiteralType::SignedByte: - return std::make_shared(Value.SignedByteValue ^ Other.Value.SignedByteValue); - case LiteralType::SignedShort: - return std::make_shared(Value.SignedShortValue ^ Other.Value.SignedShortValue); - - case LiteralType::SignedInt: - return std::make_shared(Value.SignedIntValue ^ Other.Value.SignedIntValue); - case LiteralType::SignedLong: - return std::make_shared(Value.SignedLongValue ^ Other.Value.SignedLongValue); - - case LiteralType::String: - case LiteralType::Character: - case LiteralType::Double: - case LiteralType::Float: - case LiteralType::Boolean: - case LiteralType::Empty: - default: - return {}; - } -} - -NullableSharedPtr Literal::operator&&(const Literal& Other) const noexcept -{ - MatchOperandType(Type, Other.Type); - switch (Type) - { - case LiteralType::Boolean: - return std::make_shared(Value.BooleanValue && Other.Value.BooleanValue); - - case LiteralType::String: - case LiteralType::Character: - case LiteralType::UnsignedByte: - case LiteralType::UnsignedShort: - case LiteralType::UnsignedInt: - case LiteralType::UnsignedLong: - case LiteralType::SignedByte: - case LiteralType::SignedShort: - case LiteralType::SignedInt: - case LiteralType::SignedLong: - case LiteralType::Double: - case LiteralType::Float: - case LiteralType::Empty: - default: - return {}; - } -} - -NullableSharedPtr Literal::operator||(const Literal& Other) const noexcept -{ - MatchOperandType(Type, Other.Type); - switch (Type) - { - case LiteralType::Boolean: - return std::make_shared(Value.BooleanValue || Other.Value.BooleanValue); - - case LiteralType::String: - case LiteralType::Character: - case LiteralType::UnsignedByte: - case LiteralType::UnsignedShort: - case LiteralType::UnsignedInt: - case LiteralType::UnsignedLong: - case LiteralType::SignedByte: - case LiteralType::SignedShort: - case LiteralType::SignedInt: - case LiteralType::SignedLong: - case LiteralType::Double: - case LiteralType::Float: - case LiteralType::Empty: - default: - return {}; - } -} - -NullableSharedPtr Literal::operator==(const Literal& Other) const noexcept -{ - MatchOperandType(Type, Other.Type); - switch (Type) - { - case LiteralType::UnsignedByte: - return std::make_shared(Value.UnsignedByteValue == Other.Value.UnsignedByteValue); - case LiteralType::UnsignedShort: - return std::make_shared(Value.UnsignedShortValue == Other.Value.UnsignedShortValue); - case LiteralType::UnsignedInt: - return std::make_shared(Value.UnsignedIntValue == Other.Value.UnsignedIntValue); - case LiteralType::UnsignedLong: - return std::make_shared(Value.UnsignedLongValue == Other.Value.UnsignedLongValue); - case LiteralType::SignedByte: - return std::make_shared(Value.SignedByteValue == Other.Value.SignedByteValue); - case LiteralType::SignedShort: - return std::make_shared(Value.SignedShortValue == Other.Value.SignedShortValue); - case LiteralType::SignedInt: - return std::make_shared(Value.SignedIntValue == Other.Value.SignedIntValue); - case LiteralType::SignedLong: - return std::make_shared(Value.SignedLongValue == Other.Value.SignedLongValue); - case LiteralType::Double: - return std::make_shared(Value.DoubleValue == Other.Value.DoubleValue); - case LiteralType::Float: - return std::make_shared(Value.FloatValue == Other.Value.FloatValue); - case LiteralType::Boolean: - return std::make_shared(Value.BooleanValue == Other.Value.BooleanValue); - case LiteralType::String: - return std::make_shared(Value.StringValue == Other.Value.StringValue); - case LiteralType::Character: - return std::make_shared(Value.CharacterValue == Other.Value.CharacterValue); - case LiteralType::Empty: - default: - return {}; - } -} - -NullableSharedPtr Literal::operator!=(const Literal& Other) const noexcept -{ - MatchOperandType(Type, Other.Type); - switch (Type) - { - case LiteralType::String: - return std::make_shared(Value.StringValue != Other.Value.StringValue); - case LiteralType::Character: - return std::make_shared(Value.CharacterValue != Other.Value.CharacterValue); - case LiteralType::UnsignedByte: - return std::make_shared(Value.UnsignedByteValue != Other.Value.UnsignedByteValue); - case LiteralType::UnsignedShort: - return std::make_shared(Value.UnsignedShortValue != Other.Value.UnsignedShortValue); - case LiteralType::UnsignedInt: - return std::make_shared(Value.UnsignedIntValue != Other.Value.UnsignedIntValue); - case LiteralType::UnsignedLong: - return std::make_shared(Value.UnsignedLongValue != Other.Value.UnsignedLongValue); - case LiteralType::SignedByte: - return std::make_shared(Value.SignedByteValue != Other.Value.SignedByteValue); - case LiteralType::SignedShort: - return std::make_shared(Value.SignedShortValue != Other.Value.SignedShortValue); - case LiteralType::SignedInt: - return std::make_shared(Value.SignedIntValue != Other.Value.SignedIntValue); - case LiteralType::SignedLong: - return std::make_shared(Value.SignedLongValue != Other.Value.SignedLongValue); - case LiteralType::Double: - return std::make_shared(Value.DoubleValue != Other.Value.DoubleValue); - case LiteralType::Float: - return std::make_shared(Value.FloatValue != Other.Value.FloatValue); - case LiteralType::Boolean: - return std::make_shared(Value.BooleanValue != Other.Value.BooleanValue); - case LiteralType::Empty: - default: - return {}; - } -} - -NullableSharedPtr Literal::operator<(const Literal& Other) const noexcept -{ - MatchOperandType(Type, Other.Type); - switch (Type) - { - case LiteralType::UnsignedByte: - return std::make_shared(Value.UnsignedByteValue < Other.Value.UnsignedByteValue); - case LiteralType::UnsignedShort: - return std::make_shared(Value.UnsignedShortValue < Other.Value.UnsignedShortValue); - case LiteralType::UnsignedInt: - return std::make_shared(Value.UnsignedIntValue < Other.Value.UnsignedIntValue); - case LiteralType::UnsignedLong: - return std::make_shared(Value.UnsignedLongValue < Other.Value.UnsignedLongValue); - case LiteralType::SignedByte: - return std::make_shared(Value.SignedByteValue < Other.Value.SignedByteValue); - case LiteralType::SignedShort: - return std::make_shared(Value.SignedShortValue < Other.Value.SignedShortValue); - case LiteralType::SignedInt: - return std::make_shared(Value.SignedIntValue < Other.Value.SignedIntValue); - case LiteralType::SignedLong: - return std::make_shared(Value.SignedLongValue < Other.Value.SignedLongValue); - case LiteralType::Double: - return std::make_shared(Value.DoubleValue < Other.Value.DoubleValue); - case LiteralType::Float: - return std::make_shared(Value.FloatValue < Other.Value.FloatValue); - - case LiteralType::String: - case LiteralType::Character: - case LiteralType::Boolean: - case LiteralType::Empty: - default: - return {}; - } -} - -NullableSharedPtr Literal::operator<=(const Literal& Other) const noexcept -{ - MatchOperandType(Type, Other.Type); - switch (Type) - { - case LiteralType::UnsignedByte: - return std::make_shared(Value.UnsignedByteValue <= Other.Value.UnsignedByteValue); - case LiteralType::UnsignedShort: - return std::make_shared(Value.UnsignedShortValue <= Other.Value.UnsignedShortValue); - case LiteralType::UnsignedInt: - return std::make_shared(Value.UnsignedIntValue <= Other.Value.UnsignedIntValue); - case LiteralType::UnsignedLong: - return std::make_shared(Value.UnsignedLongValue <= Other.Value.UnsignedLongValue); - case LiteralType::SignedByte: - return std::make_shared(Value.SignedByteValue <= Other.Value.SignedByteValue); - case LiteralType::SignedShort: - return std::make_shared(Value.SignedShortValue <= Other.Value.SignedShortValue); - case LiteralType::SignedInt: - return std::make_shared(Value.SignedIntValue <= Other.Value.SignedIntValue); - case LiteralType::SignedLong: - return std::make_shared(Value.SignedLongValue <= Other.Value.SignedLongValue); - case LiteralType::Double: - return std::make_shared(Value.DoubleValue <= Other.Value.DoubleValue); - case LiteralType::Float: - return std::make_shared(Value.FloatValue <= Other.Value.FloatValue); - - case LiteralType::String: - case LiteralType::Character: - case LiteralType::Boolean: - case LiteralType::Empty: - default: - return {}; - } -} - -NullableSharedPtr Literal::operator>(const Literal& Other) const noexcept -{ - switch (Type) - { - case LiteralType::UnsignedByte: - return std::make_shared(Value.UnsignedByteValue > Other.Value.UnsignedByteValue); - case LiteralType::UnsignedShort: - return std::make_shared(Value.UnsignedShortValue > Other.Value.UnsignedShortValue); - case LiteralType::UnsignedInt: - return std::make_shared(Value.UnsignedIntValue > Other.Value.UnsignedIntValue); - case LiteralType::UnsignedLong: - return std::make_shared(Value.UnsignedLongValue > Other.Value.UnsignedLongValue); - case LiteralType::SignedByte: - return std::make_shared(Value.SignedByteValue > Other.Value.SignedByteValue); - case LiteralType::SignedShort: - return std::make_shared(Value.SignedShortValue > Other.Value.SignedShortValue); - case LiteralType::SignedInt: - return std::make_shared(Value.SignedIntValue > Other.Value.SignedIntValue); - case LiteralType::SignedLong: - return std::make_shared(Value.SignedLongValue > Other.Value.SignedLongValue); - case LiteralType::Double: - return std::make_shared(Value.DoubleValue > Other.Value.DoubleValue); - case LiteralType::Float: - return std::make_shared(Value.FloatValue > Other.Value.FloatValue); - case LiteralType::String: - case LiteralType::Character: - case LiteralType::Boolean: - case LiteralType::Empty: - default: - return {}; - } -} - -NullableSharedPtr Literal::operator>=(const Literal& Other) const noexcept -{ - MatchOperandType(Type, Other.Type); - switch (Type) - { - case LiteralType::UnsignedByte: - return std::make_shared(Value.UnsignedByteValue >= Other.Value.UnsignedByteValue); - case LiteralType::UnsignedShort: - return std::make_shared(Value.UnsignedShortValue >= Other.Value.UnsignedShortValue); - case LiteralType::UnsignedInt: - return std::make_shared(Value.UnsignedIntValue >= Other.Value.UnsignedIntValue); - case LiteralType::UnsignedLong: - return std::make_shared(Value.UnsignedLongValue >= Other.Value.UnsignedLongValue); - case LiteralType::SignedByte: - return std::make_shared(Value.SignedByteValue >= Other.Value.SignedByteValue); - case LiteralType::SignedShort: - return std::make_shared(Value.SignedShortValue >= Other.Value.SignedShortValue); - case LiteralType::SignedInt: - return std::make_shared(Value.SignedIntValue >= Other.Value.SignedIntValue); - case LiteralType::SignedLong: - return std::make_shared(Value.SignedLongValue >= Other.Value.SignedLongValue); - case LiteralType::Double: - return std::make_shared(Value.DoubleValue >= Other.Value.DoubleValue); - case LiteralType::Float: - return std::make_shared(Value.FloatValue >= Other.Value.FloatValue); - - case LiteralType::String: - case LiteralType::Character: - case LiteralType::Boolean: - case LiteralType::Empty: - default: - return {}; - } -} \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/Literal.h b/src/Mamba/Code Analysis/Syntax/Literal.h index db98558..727f26e 100644 --- a/src/Mamba/Code Analysis/Syntax/Literal.h +++ b/src/Mamba/Code Analysis/Syntax/Literal.h @@ -18,6 +18,8 @@ namespace Mamba { using ValueType = std::variant; + ValueType Value; + [[nodiscard]] constexpr Literal() noexcept = default; template @@ -32,10 +34,5 @@ namespace Mamba { return std::get(Value); } - - private: - ValueType Value; }; - - static_assert(std::constructible_from); } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/LiteralExpressionSyntax.cpp b/src/Mamba/Code Analysis/Syntax/LiteralExpressionSyntax.cpp index 1093a3d..c6a939e 100644 --- a/src/Mamba/Code Analysis/Syntax/LiteralExpressionSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/LiteralExpressionSyntax.cpp @@ -24,7 +24,17 @@ SyntaxKind LiteralExpressionSyntax::Kind() const noexcept return SyntaxKind::LiteralExpression; } -std::vector LiteralExpressionSyntax::Children() const noexcept +std::size_t LiteralExpressionSyntax::ChildrenCount() const noexcept { - return { LiteralToken }; + return 1; +} + +const SyntaxNode* LiteralExpressionSyntax::ChildAt(std::size_t Index) const noexcept +{ + if (Index != 0) + { + ReportChildrenAccessOutOfBounds(Index); + } + + return LiteralToken; } \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/LiteralExpressionSyntax.h b/src/Mamba/Code Analysis/Syntax/LiteralExpressionSyntax.h index 08ade75..ec0df70 100644 --- a/src/Mamba/Code Analysis/Syntax/LiteralExpressionSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/LiteralExpressionSyntax.h @@ -10,21 +10,16 @@ namespace Mamba public: using Super = ExpressionSyntax; - [[nodiscard]] LiteralExpressionSyntax( - const class SyntaxTree* SyntaxTree, - const SyntaxToken* LiteralToken - ) noexcept; - - [[nodiscard]] LiteralExpressionSyntax( - const class SyntaxTree* SyntaxTree, - const SyntaxToken* LiteralToken, - const Literal Value - ) noexcept; + [[nodiscard]] LiteralExpressionSyntax(const class SyntaxTree* SyntaxTree, const SyntaxToken* LiteralToken) noexcept; + [[nodiscard]] LiteralExpressionSyntax(const class SyntaxTree* SyntaxTree, const SyntaxToken* LiteralToken, Literal Value) noexcept; SyntaxKind Kind() const noexcept override; - std::vector Children() const noexcept override; const SyntaxToken* LiteralToken; Literal Value; + + private: + std::size_t ChildrenCount() const noexcept override; + const SyntaxNode* ChildAt(std::size_t Index) const noexcept override; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/NameExpressionSyntax.cpp b/src/Mamba/Code Analysis/Syntax/NameExpressionSyntax.cpp index 1a2bc48..2804e97 100644 --- a/src/Mamba/Code Analysis/Syntax/NameExpressionSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/NameExpressionSyntax.cpp @@ -15,7 +15,17 @@ SyntaxKind NameExpressionSyntax::Kind() const noexcept return SyntaxKind::NameExpression; } -std::vector NameExpressionSyntax::Children() const noexcept +std::size_t NameExpressionSyntax::ChildrenCount() const noexcept { - return { IdentifierToken }; -} \ No newline at end of file + return 1; +} + +const SyntaxNode* NameExpressionSyntax::ChildAt(std::size_t Index) const noexcept +{ + if (Index != 0) + { + ReportChildrenAccessOutOfBounds(Index); + } + + return IdentifierToken; +} diff --git a/src/Mamba/Code Analysis/Syntax/NameExpressionSyntax.h b/src/Mamba/Code Analysis/Syntax/NameExpressionSyntax.h index cc5b1cb..3a6e730 100644 --- a/src/Mamba/Code Analysis/Syntax/NameExpressionSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/NameExpressionSyntax.h @@ -17,8 +17,11 @@ namespace Mamba ) noexcept; SyntaxKind Kind() const noexcept override; - std::vector Children() const noexcept override; const SyntaxToken* IdentifierToken; + + private: + std::size_t ChildrenCount() const noexcept override; + const SyntaxNode* ChildAt(std::size_t Index) const noexcept override; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/ParameterSyntax.cpp b/src/Mamba/Code Analysis/Syntax/ParameterSyntax.cpp index d39b095..be7746e 100644 --- a/src/Mamba/Code Analysis/Syntax/ParameterSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/ParameterSyntax.cpp @@ -23,7 +23,20 @@ SyntaxKind ParameterSyntax::Kind() const noexcept return SyntaxKind::Parameter; } -std::vector ParameterSyntax::Children() const noexcept +std::size_t ParameterSyntax::ChildrenCount() const noexcept { - return { Identifier, Type }; + return 2; +} + +const SyntaxNode* ParameterSyntax::ChildAt(std::size_t Index) const noexcept +{ + switch (Index) + { + case 0: + return Identifier; + case 1: + return Type; + default: + ReportChildrenAccessOutOfBounds(Index); + } } \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/ParameterSyntax.h b/src/Mamba/Code Analysis/Syntax/ParameterSyntax.h index 5e0a20d..0ef6217 100644 --- a/src/Mamba/Code Analysis/Syntax/ParameterSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/ParameterSyntax.h @@ -21,9 +21,12 @@ namespace Mamba ~ParameterSyntax() noexcept override; SyntaxKind Kind() const noexcept override; - std::vector Children() const noexcept override; const SyntaxToken* Identifier; const class TypeClauseSyntax* Type; + + private: + std::size_t ChildrenCount() const noexcept override; + const SyntaxNode* ChildAt(std::size_t Index) const noexcept override; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/ParenthesizedExpressionSyntax.cpp b/src/Mamba/Code Analysis/Syntax/ParenthesizedExpressionSyntax.cpp index 347669b..3791158 100644 --- a/src/Mamba/Code Analysis/Syntax/ParenthesizedExpressionSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/ParenthesizedExpressionSyntax.cpp @@ -25,7 +25,22 @@ SyntaxKind ParenthesizedExpressionSyntax::Kind() const noexcept return SyntaxKind::ParenthesizedExpression; } -std::vector ParenthesizedExpressionSyntax::Children() const noexcept +std::size_t ParenthesizedExpressionSyntax::ChildrenCount() const noexcept { - return { OpenParenthesisToken, Expression, CloseParenthesisToken }; -} \ No newline at end of file + return 3; +} + +const SyntaxNode* ParenthesizedExpressionSyntax::ChildAt(std::size_t Index) const noexcept +{ + switch (Index) + { + case 0: + return OpenParenthesisToken; + case 1: + return Expression; + case 2: + return CloseParenthesisToken; + default: + ReportChildrenAccessOutOfBounds(Index); + } +} diff --git a/src/Mamba/Code Analysis/Syntax/ParenthesizedExpressionSyntax.h b/src/Mamba/Code Analysis/Syntax/ParenthesizedExpressionSyntax.h index 3e5f2eb..ec967ec 100644 --- a/src/Mamba/Code Analysis/Syntax/ParenthesizedExpressionSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/ParenthesizedExpressionSyntax.h @@ -21,10 +21,13 @@ namespace Mamba ~ParenthesizedExpressionSyntax() noexcept override; SyntaxKind Kind() const noexcept override; - std::vector Children() const noexcept override; const SyntaxToken* OpenParenthesisToken; const ExpressionSyntax* Expression; const SyntaxToken* CloseParenthesisToken; + + private: + std::size_t ChildrenCount() const noexcept override; + const SyntaxNode* ChildAt(std::size_t Index) const noexcept override; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/Parser.cpp b/src/Mamba/Code Analysis/Syntax/Parser.cpp index 0f750cb..eae14c7 100644 --- a/src/Mamba/Code Analysis/Syntax/Parser.cpp +++ b/src/Mamba/Code Analysis/Syntax/Parser.cpp @@ -5,8 +5,8 @@ using namespace Mamba; -Parser::Parser(const class SyntaxTree* SyntaxTree, std::span Tokens) noexcept : - SyntaxTree(SyntaxTree), Tokens(Tokens), Position(0) +Parser::Parser(const class SyntaxTree* SyntaxTree, std::vector&& Tokens) noexcept : + SyntaxTree(SyntaxTree), Tokens(std::move(Tokens)), Position(0) { } diff --git a/src/Mamba/Code Analysis/Syntax/Parser.h b/src/Mamba/Code Analysis/Syntax/Parser.h index 4b60f5f..4f1acff 100644 --- a/src/Mamba/Code Analysis/Syntax/Parser.h +++ b/src/Mamba/Code Analysis/Syntax/Parser.h @@ -31,13 +31,13 @@ namespace Mamba class Parser { const class SyntaxTree* SyntaxTree; - std::span Tokens; + std::vector Tokens; std::size_t Position; public: DiagnosticBag Diagnostics; - [[nodiscard]] Parser(const class SyntaxTree* SyntaxTree, std::span Tokens) noexcept; + [[nodiscard]] Parser(const class SyntaxTree* SyntaxTree, std::vector&& Tokens) noexcept; private: [[nodiscard]] const SyntaxToken* Peek(std::size_t Offset) noexcept; diff --git a/src/Mamba/Code Analysis/Syntax/ReturnStatementSyntax.cpp b/src/Mamba/Code Analysis/Syntax/ReturnStatementSyntax.cpp index 41deaff..118dc9a 100644 --- a/src/Mamba/Code Analysis/Syntax/ReturnStatementSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/ReturnStatementSyntax.cpp @@ -21,7 +21,20 @@ SyntaxKind ReturnStatementSyntax::Kind() const noexcept return SyntaxKind::ReturnStatement; } -std::vector ReturnStatementSyntax::Children() const noexcept +std::size_t ReturnStatementSyntax::ChildrenCount() const noexcept { - return { ReturnKeyword, Expression }; + return 2; +} + +const SyntaxNode* ReturnStatementSyntax::ChildAt(std::size_t Index) const noexcept +{ + switch (Index) + { + case 0: + return ReturnKeyword; + case 1: + return Expression; + default: + ReportChildrenAccessOutOfBounds(Index); + } } \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/ReturnStatementSyntax.h b/src/Mamba/Code Analysis/Syntax/ReturnStatementSyntax.h index 103c247..56cdf53 100644 --- a/src/Mamba/Code Analysis/Syntax/ReturnStatementSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/ReturnStatementSyntax.h @@ -20,9 +20,12 @@ namespace Mamba ~ReturnStatementSyntax() noexcept override; SyntaxKind Kind() const noexcept override; - std::vector Children() const noexcept override; const SyntaxToken* ReturnKeyword; NullablePointer Expression; + + private: + std::size_t ChildrenCount() const noexcept override; + const SyntaxNode* ChildAt(std::size_t Index) const noexcept override; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/SeperatedSyntaxList.h b/src/Mamba/Code Analysis/Syntax/SeperatedSyntaxList.h index d2aacee..6e72fc0 100644 --- a/src/Mamba/Code Analysis/Syntax/SeperatedSyntaxList.h +++ b/src/Mamba/Code Analysis/Syntax/SeperatedSyntaxList.h @@ -22,18 +22,18 @@ namespace Mamba // NodesAndSeparators | std::views::enumerate; #endif if (NodesAndSeparators.size() == 1) - { - return Container{ static_cast(NodesAndSeparators.front()) }; - } + { + return Container{ static_cast(NodesAndSeparators.front()) }; + } auto Result = Container(NodesAndSeparators.size() / 2); #if __cpp_size_t_suffix >= 202011L for (auto Index = 0uz; Index < NodesAndSeparators.size() / 2; ++Index) #else for (auto Index = std::size_t(); Index < NodesAndSeparators.size() / 2; ++Index) #endif - { - Result[Index] = static_cast(NodesAndSeparators[Index * 2]); - } + { + Result[Index] = static_cast(NodesAndSeparators[Index * 2]); + } return Result; } @@ -51,7 +51,7 @@ namespace Mamba noexcept(noexcept(std::forward(Self).Super::operator[](Index)) ) -> decltype(std::forward(Self).Super::operator[](Index)) { - return static_cast(std::forward(Self).Super::operator[](Index * 2)); + return static_cast(std::forward(Self).Super::operator[](Index * 2)); } [[nodiscard]] constexpr std::size_t Count() const noexcept @@ -64,6 +64,7 @@ namespace Mamba return SkipSeperators(*this); } + // TODO: use ranges instead [[nodiscard]] constexpr T GetSeparator(const std::size_t Index) const noexcept { diff --git a/src/Mamba/Code Analysis/Syntax/StatementSyntax.h b/src/Mamba/Code Analysis/Syntax/StatementSyntax.h index 8c0ce28..77ed32c 100644 --- a/src/Mamba/Code Analysis/Syntax/StatementSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/StatementSyntax.h @@ -2,8 +2,6 @@ #include "SyntaxNode.h" -#include - namespace Mamba { class StatementSyntax : public SyntaxNode diff --git a/src/Mamba/Code Analysis/Syntax/SyntaxFacts.cpp b/src/Mamba/Code Analysis/Syntax/SyntaxFacts.cpp index debf0e0..7e932fc 100644 --- a/src/Mamba/Code Analysis/Syntax/SyntaxFacts.cpp +++ b/src/Mamba/Code Analysis/Syntax/SyntaxFacts.cpp @@ -90,22 +90,36 @@ namespace Mamba std::vector SyntaxFacts::GetUnaryOperatorKinds() noexcept { - return { SyntaxKind::PlusToken, SyntaxKind::MinusToken, SyntaxKind::BangToken, SyntaxKind::TildeToken }; + return { + SyntaxKind::PlusToken, + SyntaxKind::MinusToken, + SyntaxKind::BangToken, + SyntaxKind::TildeToken + }; } std::vector SyntaxFacts::GetBinaryOperatorKinds() noexcept { - return { SyntaxKind::StarToken, SyntaxKind::SlashToken, - SyntaxKind::PlusToken, SyntaxKind::MinusToken, - SyntaxKind::EqualsEqualsToken, SyntaxKind::BangEqualsToken, - SyntaxKind::LessToken, SyntaxKind::LessOrEqualsToken, - SyntaxKind::GreaterToken, SyntaxKind::GreaterOrEqualsToken, - SyntaxKind::AmpersandToken, SyntaxKind::AmpersandAmpersandToken, - SyntaxKind::PipeToken, SyntaxKind::PipePipeToken, - SyntaxKind::HatToken }; + return { + SyntaxKind::StarToken, + SyntaxKind::SlashToken, + SyntaxKind::PlusToken, + SyntaxKind::MinusToken, + SyntaxKind::EqualsEqualsToken, + SyntaxKind::BangEqualsToken, + SyntaxKind::LessToken, + SyntaxKind::LessOrEqualsToken, + SyntaxKind::GreaterToken, + SyntaxKind::GreaterOrEqualsToken, + SyntaxKind::AmpersandToken, + SyntaxKind::AmpersandAmpersandToken, + SyntaxKind::PipeToken, + SyntaxKind::PipePipeToken, + SyntaxKind::HatToken + }; } - String SyntaxFacts::GetText(const SyntaxKind Kind) noexcept + StringView SyntaxFacts::GetText(const SyntaxKind Kind) noexcept { switch (Kind) { @@ -202,7 +216,7 @@ namespace Mamba } } - String SyntaxFacts::ToString(const SyntaxKind Kind) noexcept + StringView SyntaxFacts::ToString(const SyntaxKind Kind) noexcept { switch (Kind) { diff --git a/src/Mamba/Code Analysis/Syntax/SyntaxFacts.h b/src/Mamba/Code Analysis/Syntax/SyntaxFacts.h index bc0185d..13300d1 100644 --- a/src/Mamba/Code Analysis/Syntax/SyntaxFacts.h +++ b/src/Mamba/Code Analysis/Syntax/SyntaxFacts.h @@ -19,8 +19,8 @@ namespace Mamba [[nodiscard]] static SyntaxKind GetKeywordKind(const StringView Text) noexcept; [[nodiscard]] static std::vector GetUnaryOperatorKinds() noexcept; [[nodiscard]] static std::vector GetBinaryOperatorKinds() noexcept; - [[nodiscard]] static String GetText(const SyntaxKind Kind) noexcept; - [[nodiscard]] static String ToString(const SyntaxKind Kind) noexcept; + [[nodiscard]] static StringView GetText(const SyntaxKind Kind) noexcept; + [[nodiscard]] static StringView ToString(const SyntaxKind Kind) noexcept; [[nodiscard]] static bool IsKeyword(const SyntaxKind Kind) noexcept; [[nodiscard]] static bool IsToken(const SyntaxKind Kind) noexcept; [[nodiscard]] static SyntaxKind GetBinaryOperatorOfAssignmentOperator(const SyntaxKind Kind) noexcept; diff --git a/src/Mamba/Code Analysis/Syntax/SyntaxNode.cpp b/src/Mamba/Code Analysis/Syntax/SyntaxNode.cpp index b4e5b05..3ba2071 100644 --- a/src/Mamba/Code Analysis/Syntax/SyntaxNode.cpp +++ b/src/Mamba/Code Analysis/Syntax/SyntaxNode.cpp @@ -35,20 +35,114 @@ TextLocation SyntaxNode::Location() const noexcept }; } -std::vector SyntaxNode::AncestorsAndSelf() const noexcept +std::ranges::subrange SyntaxNode::Children() const noexcept { - auto Ancestors = std::vector(); - auto Node = this; - while (Node) - { - Ancestors.emplace_back(Node); - Node = Node->Parent(); - } + auto Begin = ChildIterator{ this, 0 }; + auto End = ChildIterator{ this, ChildrenCount() }; + return std::ranges::subrange(Begin, End); +} + +std::ranges::subrange SyntaxNode::AncestorsAndSelf() const noexcept +{ + return std::ranges::subrange(AncestorsIterator(this), AncestorsIterator()); +} + +std::ranges::subrange SyntaxNode::Ancestors() const noexcept +{ + return AncestorsAndSelf() | std::views::drop(1); +} + +void SyntaxNode::ReportChildrenAccessOutOfBounds(std::size_t Index, std::source_location Location) noexcept +{ + InternalCompilerError(Location, "Children access out of bounds: ", Index); +} + +SyntaxNode::AncestorsIterator& SyntaxNode::AncestorsIterator::operator++() noexcept +{ + Current = Current->Parent(); + return *this; +} + +SyntaxNode::AncestorsIterator SyntaxNode::AncestorsIterator::operator++(int) noexcept +{ + auto Temp = *this; + ++*this; + return Temp; +} + +const SyntaxNode* SyntaxNode::AncestorsIterator::operator*() const +{ + return Current; +} + +SyntaxNode::ChildIterator& SyntaxNode::ChildIterator::operator++() noexcept +{ + ++Index; + return *this; +} + +SyntaxNode::ChildIterator SyntaxNode::ChildIterator::operator++(int) noexcept +{ + auto Temp = *this; + ++*this; + return Temp; +} - return Ancestors; +SyntaxNode::ChildIterator& SyntaxNode::ChildIterator::operator+=(difference_type Offset) noexcept +{ + Index += Offset; + return *this; +} + +SyntaxNode::ChildIterator SyntaxNode::ChildIterator::operator+(const ChildIterator& Other) const noexcept +{ + auto Temp = *this; + Temp += Other.Index; + return Temp; +} + +SyntaxNode::ChildIterator& SyntaxNode::ChildIterator::operator--() noexcept +{ + --Index; + return *this; +} + +SyntaxNode::ChildIterator SyntaxNode::ChildIterator::operator--(int) noexcept +{ + auto Temp = *this; + --*this; + return Temp; +} + +SyntaxNode::ChildIterator& SyntaxNode::ChildIterator::operator-=(difference_type Offset) noexcept +{ + Index -= Offset; + return *this; +} + +SyntaxNode::ChildIterator SyntaxNode::ChildIterator::operator-(difference_type Offset) const noexcept +{ + auto Temp = *this; + Temp -= Offset; + return Temp; +} + +SyntaxNode::ChildIterator::difference_type SyntaxNode::ChildIterator::operator-(const ChildIterator& Other) const noexcept +{ + return Index - Other.Index; +} + +const SyntaxNode* SyntaxNode::ChildIterator::operator->() const noexcept +{ + return **this; +} + +const SyntaxNode* Mamba::SyntaxNode::ChildIterator::operator[](difference_type Index) const noexcept +{ + return Node->ChildAt(Index); } -std::vector SyntaxNode::Ancestors() const noexcept +const SyntaxNode* SyntaxNode::ChildIterator::operator*() const { - return AncestorsAndSelf() | std::views::drop(1) | std::ranges::to(); + return Node->ChildAt(Index); } \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/SyntaxNode.h b/src/Mamba/Code Analysis/Syntax/SyntaxNode.h index 5023021..503d93f 100644 --- a/src/Mamba/Code Analysis/Syntax/SyntaxNode.h +++ b/src/Mamba/Code Analysis/Syntax/SyntaxNode.h @@ -4,7 +4,7 @@ #include "TextLocation.h" #include -#include +#include namespace Mamba { @@ -14,10 +14,71 @@ namespace Mamba class SyntaxNode { const class SyntaxTree* PrivateSyntaxTree; - TextLocation PrivateLocation; public: + struct AncestorsIterator + { + using difference_type = std::ptrdiff_t; + + const SyntaxNode* Current; + + AncestorsIterator& operator++() noexcept; + AncestorsIterator operator++(int) noexcept; + + const SyntaxNode* operator*() const; + + friend bool operator==(const AncestorsIterator& Left, const AncestorsIterator& Right) noexcept = default; + }; + + struct ChildIterator + { + using difference_type = std::ptrdiff_t; + using value_type = const SyntaxNode*; + + const SyntaxNode* Node; + std::size_t Index; + + ChildIterator& operator++() noexcept; + ChildIterator operator++(int) noexcept; + ChildIterator& operator+=(difference_type Offset) noexcept; + ChildIterator operator+(const ChildIterator& Other) const noexcept; + + ChildIterator& operator--() noexcept; + ChildIterator operator--(int) noexcept; + ChildIterator& operator-=(difference_type Offset) noexcept; + ChildIterator operator-(difference_type Offset) const noexcept; + + difference_type operator-(const ChildIterator& Other) const noexcept; + + friend std::partial_ordering operator<=>(const ChildIterator& Left, const ChildIterator& Right) noexcept + { + return Left.Index <=> Right.Index; + } + + const SyntaxNode* operator->() const noexcept; + const SyntaxNode* operator[](difference_type Index) const noexcept; + + const SyntaxNode* operator*() const; + + friend bool operator==(const ChildIterator& Left, const ChildIterator& Right) noexcept = default; + + friend ChildIterator operator+(const ChildIterator& Left, difference_type Offset) noexcept + { + auto Temp = Left; + Temp += Offset; + return Temp; + } + + friend ChildIterator operator+(difference_type Offset, const ChildIterator& Right) noexcept + { + auto Temp = Right; + Temp += Offset; + return Temp; + } + }; + [[nodiscard]] SyntaxNode(const class SyntaxTree* SyntaxTree) noexcept; + virtual ~SyntaxNode() noexcept = default; [[nodiscard]] NullablePointer Parent() const noexcept; @@ -36,21 +97,25 @@ namespace Mamba // from SyntaxNode, when implementing, the result sequence of children should conform to the sequence in which // they were defined within the type. If the member variable is a container whose element type is, or directly // or indirectly derived from SyntaxNode, it should be expanded and inserted in its original sequence. - [[nodiscard]] virtual std::vector Children() const noexcept = 0; + [[nodiscard]] std::ranges::subrange Children() const noexcept; // Gets all the ancestors of the node, including the node itself, in the order of closest to farthest. - [[nodiscard]] std::vector AncestorsAndSelf() const noexcept; + [[nodiscard]] std::ranges::subrange AncestorsAndSelf() const noexcept; // Gets all the ancestors of the node, excluding the node itself, in the order of closest to farthest. - [[nodiscard]] std::vector Ancestors() const noexcept; + [[nodiscard]] std::ranges::subrange Ancestors() const noexcept; -#if __cpp_lib_ranges_to_container >= 202202L + private: + [[nodiscard]] virtual std::size_t ChildrenCount() const noexcept = 0; + [[nodiscard]] virtual const SyntaxNode* ChildAt(std::size_t Index) const noexcept = 0; - template typename ContainerType> - [[nodiscard]] auto Children() const noexcept - { - return Children() | std::ranges::to(); - } -#endif + protected: + [[noreturn]] static void ReportChildrenAccessOutOfBounds(std::size_t Index, std::source_location Location = std::source_location::current()) noexcept; }; + + static_assert(std::input_or_output_iterator); + static_assert(std::forward_iterator); + static_assert(std::bidirectional_iterator); + static_assert(std::ranges::common_range>); + static_assert(std::random_access_iterator); } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/SyntaxToken.cpp b/src/Mamba/Code Analysis/Syntax/SyntaxToken.cpp index bab3dd1..a379a44 100644 --- a/src/Mamba/Code Analysis/Syntax/SyntaxToken.cpp +++ b/src/Mamba/Code Analysis/Syntax/SyntaxToken.cpp @@ -1,11 +1,10 @@ #include "SyntaxToken.h" -#include "MambaCore.h" #include "SyntaxTree.h" using namespace Mamba; SyntaxToken::SyntaxToken(const SyntaxTree* SyntaxTree, SyntaxKind Kind, StringView Text, Literal Value) noexcept : - Super(SyntaxTree), PrivateKind(Kind), PrivateText(Text), PrivateValue(Value) + Super(SyntaxTree), PrivateText(Text), PrivateValue(Value), PrivateKind(Kind) { } @@ -19,7 +18,12 @@ StringView SyntaxToken::Text() const noexcept return PrivateText; } -std::vector SyntaxToken::Children() const noexcept +std::size_t SyntaxToken::ChildrenCount() const noexcept +{ + return 0; +} + +const SyntaxNode* SyntaxToken::ChildAt(std::size_t Index [[maybe_unused]]) const noexcept { return {}; } diff --git a/src/Mamba/Code Analysis/Syntax/SyntaxToken.h b/src/Mamba/Code Analysis/Syntax/SyntaxToken.h index 9782ee4..722c0f6 100644 --- a/src/Mamba/Code Analysis/Syntax/SyntaxToken.h +++ b/src/Mamba/Code Analysis/Syntax/SyntaxToken.h @@ -22,7 +22,9 @@ namespace Mamba virtual SyntaxKind Kind() const noexcept override; virtual StringView Text() const noexcept override; - virtual std::vector Children() const noexcept override; + + std::size_t ChildrenCount() const noexcept override; + const SyntaxNode* ChildAt(std::size_t Index) const noexcept override; [[nodiscard]] std::size_t Position() const noexcept; [[nodiscard]] Literal Value() const noexcept; diff --git a/src/Mamba/Code Analysis/Syntax/SyntaxTree.cpp b/src/Mamba/Code Analysis/Syntax/SyntaxTree.cpp index 9038fc5..54f90f4 100644 --- a/src/Mamba/Code Analysis/Syntax/SyntaxTree.cpp +++ b/src/Mamba/Code Analysis/Syntax/SyntaxTree.cpp @@ -7,6 +7,11 @@ SyntaxTree::SyntaxTree(const SourceText& SourceText) noexcept : { } +SyntaxTree::~SyntaxTree() noexcept +{ + delete PrivateRoot; +} + NullablePointer SyntaxTree::Parent(const SyntaxNode& Node) const noexcept { const auto Iterator = ParentsMap.find(&Node); diff --git a/src/Mamba/Code Analysis/Syntax/SyntaxTree.h b/src/Mamba/Code Analysis/Syntax/SyntaxTree.h index a5d35d8..311c2f9 100644 --- a/src/Mamba/Code Analysis/Syntax/SyntaxTree.h +++ b/src/Mamba/Code Analysis/Syntax/SyntaxTree.h @@ -12,18 +12,19 @@ namespace Mamba class SyntaxTree { - std::optional PrivateRoot; + CompilationUnitSyntax* PrivateRoot; const SourceText& PrivateSourceText; friend class Compiler; public: [[nodiscard]] SyntaxTree(const class SourceText& SourceText) noexcept; + ~SyntaxTree() noexcept; template [[nodiscard]] auto&& Root(this SelfT&& Self) noexcept { - return std::forward(Self).PrivateRoot.value(); + return std::forward(Self).PrivateRoot; } template diff --git a/src/Mamba/Code Analysis/Syntax/TypeClauseSyntax.cpp b/src/Mamba/Code Analysis/Syntax/TypeClauseSyntax.cpp index c4b03a5..1e9d7b0 100644 --- a/src/Mamba/Code Analysis/Syntax/TypeClauseSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/TypeClauseSyntax.cpp @@ -18,7 +18,20 @@ SyntaxKind TypeClauseSyntax::Kind() const noexcept return SyntaxKind::TypeClause; } -std::vector TypeClauseSyntax::Children() const noexcept +std::size_t TypeClauseSyntax::ChildrenCount() const noexcept { - return { ColonToken, Identifier }; + return 2; +} + +const SyntaxNode* TypeClauseSyntax::ChildAt(std::size_t Index) const noexcept +{ + switch (Index) + { + case 0: + return ColonToken; + case 1: + return Identifier; + default: + ReportChildrenAccessOutOfBounds(Index); + } } \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/TypeClauseSyntax.h b/src/Mamba/Code Analysis/Syntax/TypeClauseSyntax.h index 6715137..04b2bc4 100644 --- a/src/Mamba/Code Analysis/Syntax/TypeClauseSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/TypeClauseSyntax.h @@ -17,9 +17,12 @@ namespace Mamba ) noexcept; SyntaxKind Kind() const noexcept override; - std::vector Children() const noexcept override; const SyntaxToken* ColonToken; const SyntaxToken* Identifier; + + private: + std::size_t ChildrenCount() const noexcept override; + const SyntaxNode* ChildAt(std::size_t Index) const noexcept override; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/UnaryExpressionSyntax.cpp b/src/Mamba/Code Analysis/Syntax/UnaryExpressionSyntax.cpp index 525d035..fbee1cf 100644 --- a/src/Mamba/Code Analysis/Syntax/UnaryExpressionSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/UnaryExpressionSyntax.cpp @@ -21,7 +21,20 @@ SyntaxKind UnaryExpressionSyntax::Kind() const noexcept return SyntaxKind::UnaryExpression; } -std::vector UnaryExpressionSyntax::Children() const noexcept +std::size_t UnaryExpressionSyntax::ChildrenCount() const noexcept { - return { OperatorToken, Operand }; + return 2; +} + +const SyntaxNode* UnaryExpressionSyntax::ChildAt(std::size_t Index) const noexcept +{ + switch (Index) + { + case 0: + return OperatorToken; + case 1: + return Operand; + default: + ReportChildrenAccessOutOfBounds(Index); + } } \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/UnaryExpressionSyntax.h b/src/Mamba/Code Analysis/Syntax/UnaryExpressionSyntax.h index fff6f19..cd9f83b 100644 --- a/src/Mamba/Code Analysis/Syntax/UnaryExpressionSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/UnaryExpressionSyntax.h @@ -20,9 +20,12 @@ namespace Mamba ~UnaryExpressionSyntax() noexcept override; SyntaxKind Kind() const noexcept override; - std::vector Children() const noexcept override; const SyntaxToken* OperatorToken; const ExpressionSyntax* Operand; + + private: + std::size_t ChildrenCount() const noexcept override; + const SyntaxNode* ChildAt(std::size_t Index) const noexcept override; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/VariableDeclarationSyntax.cpp b/src/Mamba/Code Analysis/Syntax/VariableDeclarationSyntax.cpp index 3176bd1..43e3b87 100644 --- a/src/Mamba/Code Analysis/Syntax/VariableDeclarationSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/VariableDeclarationSyntax.cpp @@ -30,7 +30,43 @@ SyntaxKind VariableDeclarationSyntax::Kind() const noexcept return SyntaxKind::VariableDeclaration; } -std::vector VariableDeclarationSyntax::Children() const noexcept +std::size_t VariableDeclarationSyntax::ChildrenCount() const noexcept { - return { Keyword, Identifier, TypeClause, EqualsToken, Initializer }; + return TypeClause ? 5 : 4; +} + +const SyntaxNode* VariableDeclarationSyntax::ChildAt(std::size_t Index) const noexcept +{ + if (TypeClause) + { + switch (Index) + { + case 0: + return Keyword; + case 1: + return Identifier; + case 2: + return TypeClause; + case 3: + return EqualsToken; + case 4: + return Initializer; + default: + ReportChildrenAccessOutOfBounds(Index); + } + } + + switch (Index) + { + case 0: + return Keyword; + case 1: + return Identifier; + case 2: + return EqualsToken; + case 3: + return Initializer; + default: + ReportChildrenAccessOutOfBounds(Index); + } } \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/VariableDeclarationSyntax.h b/src/Mamba/Code Analysis/Syntax/VariableDeclarationSyntax.h index 9a1cd23..5bbe486 100644 --- a/src/Mamba/Code Analysis/Syntax/VariableDeclarationSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/VariableDeclarationSyntax.h @@ -24,12 +24,15 @@ namespace Mamba ~VariableDeclarationSyntax() noexcept override; SyntaxKind Kind() const noexcept override; - std::vector Children() const noexcept override; const SyntaxToken* Keyword; const SyntaxToken* Identifier; NullablePointer TypeClause; const SyntaxToken* EqualsToken; const ExpressionSyntax* Initializer; + + private: + std::size_t ChildrenCount() const noexcept override; + const SyntaxNode* ChildAt(std::size_t Index) const noexcept override; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/WhileStatementSyntax.cpp b/src/Mamba/Code Analysis/Syntax/WhileStatementSyntax.cpp index 897d52e..ad5c5a4 100644 --- a/src/Mamba/Code Analysis/Syntax/WhileStatementSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/WhileStatementSyntax.cpp @@ -17,11 +17,28 @@ SyntaxKind WhileStatementSyntax::Kind() const noexcept return SyntaxKind::WhileStatement; } -WhileStatementSyntax::~WhileStatementSyntax() noexcept +std::size_t WhileStatementSyntax::ChildrenCount() const noexcept { + return 3; } -std::vector WhileStatementSyntax::Children() const noexcept +const SyntaxNode* WhileStatementSyntax::ChildAt(std::size_t Index) const noexcept +{ + switch (Index) + { + case 0: + return WhileKeyword; + case 1: + return Condition; + case 2: + return Body; + default: + ReportChildrenAccessOutOfBounds(Index); + } +} + +WhileStatementSyntax::~WhileStatementSyntax() noexcept { - return { WhileKeyword, Condition, Body }; + delete Condition; + delete Body; } \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/WhileStatementSyntax.h b/src/Mamba/Code Analysis/Syntax/WhileStatementSyntax.h index 24c4279..fa75943 100644 --- a/src/Mamba/Code Analysis/Syntax/WhileStatementSyntax.h +++ b/src/Mamba/Code Analysis/Syntax/WhileStatementSyntax.h @@ -21,10 +21,13 @@ namespace Mamba ~WhileStatementSyntax() noexcept override; SyntaxKind Kind() const noexcept override; - std::vector Children() const noexcept override; const SyntaxToken* WhileKeyword; const ExpressionSyntax* Condition; const StatementSyntax* Body; + + private: + std::size_t ChildrenCount() const noexcept override; + const SyntaxNode* ChildAt(std::size_t Index) const noexcept override; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Text/SourceText.cpp b/src/Mamba/Code Analysis/Text/SourceText.cpp index 734e7af..bb9b49e 100644 --- a/src/Mamba/Code Analysis/Text/SourceText.cpp +++ b/src/Mamba/Code Analysis/Text/SourceText.cpp @@ -1,16 +1,15 @@ #include "SourceText.h" #include "TextLine.h" -#include "TextSpan.h" #include using namespace Mamba; -[[nodiscard]] constexpr std::size_t GetLineBreakWidth(const StringView Text, const std::size_t Position) noexcept +[[nodiscard]] constexpr std::size_t GetLineBreakWidth(StringView Text, std::size_t Position) noexcept { - const auto Character = Text[Position]; - const auto LineBreakCharacter = (Position + 1 >= Text.length() ? TEXT('\0') : Text[Position + 1]); + auto Character = Text[Position]; + auto LineBreakCharacter = (Position + 1 >= Text.length() ? TEXT('\0') : Text[Position + 1]); if (Character == TEXT('\r') && LineBreakCharacter == TEXT('\n')) { @@ -41,8 +40,8 @@ std::size_t SourceText::LineIndex(const std::size_t Position) const noexcept while (Lower <= Upper) { - const auto Index = Lower + (Upper - Lower) / 2; - const auto Start = PrivateLines[Index].Start; + auto Index = Lower + (Upper - Lower) / 2; + auto Start = PrivateLines[Index].Start; if (Position == Start) { @@ -67,26 +66,21 @@ const std::vector& SourceText::Lines() const noexcept return PrivateLines; } -StringView SourceText::SubView(const std::size_t Start, const std::size_t Length) const noexcept +StringView SourceText::SubView(std::size_t Start, std::size_t Length) const noexcept { - const auto End = Start + Length; - const auto ViewBegin = PrivateInfo.Text.data() + Start; - const auto ViewEnd = PrivateInfo.Text.data() + End; + auto End = Start + Length; + auto ViewBegin = PrivateInfo.Text.data() + Start; + auto ViewEnd = PrivateInfo.Text.data() + End; return StringView(ViewBegin, ViewEnd); } -StringView SourceText::SubView(const TextSpan Span) const noexcept -{ - return SubView(Span.Start, Span.Length); -} - -std::size_t SourceText::RelativeBegin(const StringView View) const noexcept +std::size_t SourceText::RelativeBegin(StringView View) const noexcept { return View.data() - PrivateInfo.Text.data(); } -std::size_t SourceText::RelativeEnd(const StringView View) const noexcept +std::size_t SourceText::RelativeEnd(StringView View) const noexcept { return RelativeBegin(View) + View.length(); } @@ -117,15 +111,15 @@ std::vector SourceText::SplitLines(const SourceTextInfo& Info) while (Position < Text.length()) { - const auto LineBreakWidth = GetLineBreakWidth(Text, Position); + auto LineBreakWidth = GetLineBreakWidth(Text, Position); if (LineBreakWidth == 0) { ++Position; } else { - const auto LineLength = Position - LineStart; - const auto LineLengthIncludingLineBreak = LineLength + LineBreakWidth; + auto LineLength = Position - LineStart; + auto LineLengthIncludingLineBreak = LineLength + LineBreakWidth; Lines.emplace_back(LineStart, LineLength, LineLengthIncludingLineBreak); Position += LineBreakWidth; @@ -135,7 +129,7 @@ std::vector SourceText::SplitLines(const SourceTextInfo& Info) if (Position >= LineStart) { - const auto LineLength = Position - LineStart; + auto LineLength = Position - LineStart; Lines.emplace_back(LineStart, LineLength, LineLength); } diff --git a/src/Mamba/Code Analysis/Text/SourceText.h b/src/Mamba/Code Analysis/Text/SourceText.h index d630cd0..686a789 100644 --- a/src/Mamba/Code Analysis/Text/SourceText.h +++ b/src/Mamba/Code Analysis/Text/SourceText.h @@ -19,19 +19,19 @@ namespace Mamba #if __cpp_explicit_this_parameter >= 202110L template - [[nodiscard]] auto&& operator[](this SelfT&& Self, const std::size_t Position) noexcept + [[nodiscard]] auto&& operator[](this SelfT&& Self, std::size_t Position) noexcept { return std::forward_like(Self.PrivateInfo.Text[Position]); } #else - [[nodiscard]] Char operator[](const std::size_t Position) const noexcept + [[nodiscard]] Char operator[](std::size_t Position) const noexcept { return PrivateInfo.Text[Position]; } #endif [[nodiscard]] std::size_t Length() const noexcept; - [[nodiscard]] std::size_t LineIndex(const std::size_t Position) const noexcept; + [[nodiscard]] std::size_t LineIndex(std::size_t Position) const noexcept; [[nodiscard]] const std::vector& Lines() const noexcept; template @@ -40,11 +40,10 @@ namespace Mamba return std::forward_like(Self.PrivateInfo.Text); } - [[nodiscard]] StringView SubView(const std::size_t Start, const std::size_t Length) const noexcept; - [[nodiscard]] StringView SubView(const TextSpan Span) const noexcept; + [[nodiscard]] StringView SubView(std::size_t Start, std::size_t Length) const noexcept; - [[nodiscard]] std::size_t RelativeBegin(const StringView View) const noexcept; - [[nodiscard]] std::size_t RelativeEnd(const StringView View) const noexcept; + [[nodiscard]] std::size_t RelativeBegin(StringView View) const noexcept; + [[nodiscard]] std::size_t RelativeEnd(StringView View) const noexcept; private: static std::vector SplitLines(const SourceTextInfo& Info); diff --git a/src/Mamba/Code Analysis/Text/TextLocation.h b/src/Mamba/Code Analysis/Text/TextLocation.h index aebd3cd..7885ca3 100644 --- a/src/Mamba/Code Analysis/Text/TextLocation.h +++ b/src/Mamba/Code Analysis/Text/TextLocation.h @@ -1,7 +1,6 @@ #pragma once #include "SourceText.h" -#include "TextSpan.h" namespace Mamba { @@ -13,7 +12,7 @@ namespace Mamba template [[nodiscard]] decltype(auto) FileName(this SelfT&& Self) noexcept { - return std::forward_like(Self.Text.FileName); + return std::forward_like(Self.Text).Info().FileName; } [[nodiscard]] std::size_t StartLine() const noexcept; diff --git a/src/Mamba/Mamba.cpp b/src/Mamba/Mamba.cpp index 9e9606c..1884f95 100644 --- a/src/Mamba/Mamba.cpp +++ b/src/Mamba/Mamba.cpp @@ -1,141 +1,21 @@ #include "Mamba.h" -#include "Colors.h" -#include "Compilation.h" -#include "Diagnostic.h" -#include "SourceText.h" - -#include -#include -#include -#include +#include "Compiler.h" using namespace Mamba; -using namespace fast_io::io; - -void PrintError(const Diagnostic& Diagnostic) noexcept -{ - println( - Color(fast_io::mnp::code_cvt(*Diagnostic.Location.FileName()), Colors::BrightForegroundWhite), - Color(":", Colors::BrightForegroundWhite), - Color(Diagnostic.Location.StartLine(), Colors::BrightForegroundWhite), - Color(":", Colors::BrightForegroundWhite), - Color(Diagnostic.Location.StartCharacter(), Colors::BrightForegroundWhite), - " ", - Color("error: ", Colors::BrightForegroundRed), - Color(fast_io::mnp::code_cvt(Diagnostic.Message), Colors::BrightForegroundWhite) - ); -} - -void PrintWarning(const Diagnostic& Diagnostic) noexcept -{ - println( - Color(fast_io::mnp::code_cvt(*Diagnostic.Location.FileName()), Colors::BrightForegroundWhite), - Color(":", Colors::BrightForegroundWhite), - Color(Diagnostic.Location.StartLine(), Colors::BrightForegroundWhite), - Color(":", Colors::BrightForegroundWhite), - Color(Diagnostic.Location.StartCharacter(), Colors::BrightForegroundWhite), - " ", - Color("warning: ", Colors::BrightForegroundWhite), - Color(fast_io::mnp::code_cvt(Diagnostic.Message), Colors::BrightForegroundWhite) - ); -} - -void PrintInformation(const Diagnostic& Diagnostic) noexcept -{ - println( - Color(fast_io::mnp::code_cvt(*Diagnostic.Location.FileName()), Colors::BrightForegroundWhite), - Color(":", Colors::BrightForegroundWhite), - Color(Diagnostic.Location.StartLine(), Colors::BrightForegroundWhite), - Color(":", Colors::BrightForegroundWhite), - Color(Diagnostic.Location.StartCharacter(), Colors::BrightForegroundWhite), - " ", - Color("note: ", Colors::BrightForegroundCyan), - Color(fast_io::mnp::code_cvt(Diagnostic.Message), Colors::BrightForegroundWhite) - ); -} - -void PrintDiagnostic(const Diagnostic& Diagnostic) noexcept -{ - switch (Diagnostic.Severity) - { - case DiagnosticSeverity::Error: - PrintError(Diagnostic); - break; - case DiagnosticSeverity::Warning: - PrintWarning(Diagnostic); - break; - case DiagnosticSeverity::Information: - PrintInformation(Diagnostic); - break; - default: - std::unreachable(); - } -} - -void PrintDiagnostics(const std::span Diagnostics) noexcept -{ - if (Diagnostics.empty()) - { - println(Color("Compilation successful", Colors::BrightForegroundGreen)); - return; - } - - for (auto&& Diagnostic : Diagnostics) - { - PrintDiagnostic(Diagnostic); - } -} - -std::shared_ptr ReadFile(std::string_view FileName) noexcept -try -{ - auto FileLoader = fast_io::native_file_loader(FileName); - - const auto Text = std::make_shared(FileLoader.begin(), FileLoader.end()); - auto SharedFileName = std::make_shared(FileName.begin(), FileName.end()); - return std::make_shared(SourceText::From(Text, SharedFileName)); -} -catch (fast_io::error error) -{ - // error: error reading '': - perrln( - Color("error: ", Colors::BrightForegroundRed), - Color("error reading '", Colors::BrightForegroundWhite), - Color(FileName, Colors::BrightForegroundWhite), - Color("': ", Colors::BrightForegroundWhite), - Color(error, Colors::BrightForegroundWhite) - ); - std::exit(-1); -} - -void ProcessInputFiles(const std::span InputFiles) noexcept -{ - auto Sources = std::vector>(); - Sources.reserve(InputFiles.size()); - - for (auto InputFile : InputFiles) - { - Sources.emplace_back(ReadFile(InputFile)); - } - - auto Compilation = ::Mamba::Compilation(Sources); - Compilation.Compile(TEXT("a")); - PrintDiagnostics(Compilation.Diagnostics()); -} std::int32_t Mamba::InitMamba(int ArgumentCount, [[maybe_unused]] char* Arguments[]) noexcept { - if (ArgumentCount <= 1) + auto Begin = Arguments + 1; + auto End = Arguments + ArgumentCount; + auto ArgumentRange = std::ranges::subrange(Begin, End); + + auto Compiler = ::Mamba::Compiler(); + for (auto&& Argument : ArgumentRange) { - // mamba: error: no input files - println("mamba: ", Color("error: ", Colors::BrightForegroundRed), Color("no input files", Colors::BrightForegroundWhite)); - return -1; + Compiler.AddSourceFile(std::string_view(Argument)); } - const auto Begin = Arguments + 1; // skip program name - const auto End = Arguments + ArgumentCount + 1; - auto InputFiles = std::vector(Begin, End); - ProcessInputFiles(InputFiles); + Compiler.Compile(); return 0; } diff --git a/src/Mamba/MambaCore.h b/src/Mamba/MambaCore.h index a397a86..d0b1984 100644 --- a/src/Mamba/MambaCore.h +++ b/src/Mamba/MambaCore.h @@ -1,6 +1,8 @@ #pragma once +#include "Colors.h" #include +#include #include #include @@ -128,6 +130,13 @@ namespace Mamba std::unreachable(); } + template + [[noreturn]] void InternalCompilerError(std::source_location SourceLocation = std::source_location::current(), T&&... Args) noexcept + { + fast_io::io::perrln(SourceLocation, ": ", Color("internal compiler error: ", Colors::BrightForegroundRed), std::forward(Args)...); + fast_io::fast_terminate(); + } + // Hatcher stores a callable object, so that the result of the call can be emplace constructed into a container by // copy elision, the container must support adding new elements by forwarding arguments to the constructor // (emplace). From 5dd795ec87aa7be7839ce17e1e4c3abc15728c56 Mon Sep 17 00:00:00 2001 From: heckerpowered <72550834+heckerpowered@users.noreply.github.com> Date: Tue, 27 Aug 2024 22:37:23 +0800 Subject: [PATCH 12/30] LLVM backend --- src/Mamba/Code Analysis/Compiler.cpp | 6 ++++ .../Syntax/SeperatedSyntaxList.h | 3 +- src/Mamba/Code Generation/Backend.h | 15 +++++++++ .../Emit => Code Generation}/Emitter.h | 4 +-- src/Mamba/Code Generation/LLVMBackend.cpp | 18 +++++++++++ src/Mamba/Code Generation/LLVMBackend.h | 13 ++++++++ src/Mamba/Mamba.h | 1 - xmake.lua | 32 ++++++++++++++++--- 8 files changed, 82 insertions(+), 10 deletions(-) create mode 100644 src/Mamba/Code Generation/Backend.h rename src/Mamba/{Code Analysis/Emit => Code Generation}/Emitter.h (85%) create mode 100644 src/Mamba/Code Generation/LLVMBackend.cpp create mode 100644 src/Mamba/Code Generation/LLVMBackend.h diff --git a/src/Mamba/Code Analysis/Compiler.cpp b/src/Mamba/Code Analysis/Compiler.cpp index c204384..b66f038 100644 --- a/src/Mamba/Code Analysis/Compiler.cpp +++ b/src/Mamba/Code Analysis/Compiler.cpp @@ -1,4 +1,6 @@ +#include "BoundCompilationUnit.h" #include "Lexer.h" +#include "LLVMBackend.h" #include "MambaCore.h" #include "Binder.h" @@ -153,4 +155,8 @@ void Compiler::Compile() noexcept { delete BoundCompilationUnit; } + + auto vector = BoundCompilationUnits | std::ranges::to(); + auto span = std::span(vector); + LLVMBackend::GenerateCode(span, "Main"); } \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Syntax/SeperatedSyntaxList.h b/src/Mamba/Code Analysis/Syntax/SeperatedSyntaxList.h index 6e72fc0..2688e95 100644 --- a/src/Mamba/Code Analysis/Syntax/SeperatedSyntaxList.h +++ b/src/Mamba/Code Analysis/Syntax/SeperatedSyntaxList.h @@ -48,8 +48,7 @@ namespace Mamba template [[nodiscard]] auto operator[](this SelfType&& Self, std::size_t Index) - noexcept(noexcept(std::forward(Self).Super::operator[](Index)) - ) -> decltype(std::forward(Self).Super::operator[](Index)) + noexcept(noexcept(std::forward(Self).Super::operator[](Index))) { return static_cast(std::forward(Self).Super::operator[](Index * 2)); } diff --git a/src/Mamba/Code Generation/Backend.h b/src/Mamba/Code Generation/Backend.h new file mode 100644 index 0000000..ba19925 --- /dev/null +++ b/src/Mamba/Code Generation/Backend.h @@ -0,0 +1,15 @@ +#pragma once + +#include "BoundCompilationUnit.h" + +namespace Mamba +{ + template + struct Backend + { + static void GenerateCode(std::span CompilationUnits, StringView ModuleName) noexcept + { + T::GenerateCode(CompilationUnits, ModuleName); + } + }; +} // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Emit/Emitter.h b/src/Mamba/Code Generation/Emitter.h similarity index 85% rename from src/Mamba/Code Analysis/Emit/Emitter.h rename to src/Mamba/Code Generation/Emitter.h index eb970cc..699ca41 100644 --- a/src/Mamba/Code Analysis/Emit/Emitter.h +++ b/src/Mamba/Code Generation/Emitter.h @@ -1,7 +1,5 @@ #pragma once -#include - #include "BoundProgram.h" #include "Diagnostic.h" @@ -19,6 +17,6 @@ namespace Mamba Emitter { public: - virtual std::vector Emit(const BoundProgram& Program, const StringView ModuleName) noexcept = 0; + virtual std::vector Emit(const BoundProgram& Program, StringView ModuleName) noexcept = 0; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Generation/LLVMBackend.cpp b/src/Mamba/Code Generation/LLVMBackend.cpp new file mode 100644 index 0000000..a542abe --- /dev/null +++ b/src/Mamba/Code Generation/LLVMBackend.cpp @@ -0,0 +1,18 @@ +#include "LLVMBackend.h" + +#include "llvm/IR/IRBuilder.h" +#include "llvm/IR/LLVMContext.h" +#include "llvm/IR/Module.h" + +using namespace Mamba; +using namespace llvm; + +void LLVMBackend::GenerateCode(std::span CompilationUnits, std::string_view ModuleName) noexcept +{ + auto Context = LLVMContext(); + auto LLVMModule = Module(ModuleName, Context); + + auto Builder = IRBuilder<>(Context); + + LLVMModule.print(errs(), {}); +} \ No newline at end of file diff --git a/src/Mamba/Code Generation/LLVMBackend.h b/src/Mamba/Code Generation/LLVMBackend.h new file mode 100644 index 0000000..851c28f --- /dev/null +++ b/src/Mamba/Code Generation/LLVMBackend.h @@ -0,0 +1,13 @@ +#pragma once + +#include + +#include "Backend.h" + +namespace Mamba +{ + struct LLVMBackend : public Backend + { + static void GenerateCode(std::span CompilationUnits, std::string_view ModuleName) noexcept; + }; +} // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Mamba.h b/src/Mamba/Mamba.h index 59e1214..e602ba3 100644 --- a/src/Mamba/Mamba.h +++ b/src/Mamba/Mamba.h @@ -1,6 +1,5 @@ #pragma once -#include "Colors.h" #include #include diff --git a/xmake.lua b/xmake.lua index 491b699..0c558e8 100644 --- a/xmake.lua +++ b/xmake.lua @@ -3,17 +3,36 @@ add_rules("plugin.compile_commands.autoupdate") add_requires("fast_io") +local includedirs = { + "src/Mamba", + "src/Mamba/Core", + "src/Mamba/Code Analysis", + "src/Mamba/Code Analysis/Syntax", + "src/Mamba/Code Analysis/Text", + "src/Mamba/Code Analysis/Binding", + "src/Mamba/Code Analysis/Symbol", + "src/Mamba/Code Analysis/Linking", + "src/Mamba/Code Generation", +} + +local llvm_config = "/opt/homebrew/opt/llvm/bin/llvm-config" + + +set_languages("c++20") +add_languages("c++26") + target("Jvav") set_kind("binary") add_files("src/Mamba/**.cpp") add_headerfiles("src/Mamba/**.h") - set_languages("clatest", "c++latest") add_packages("fast_io") - set_toolchains("llvm") + set_toolchains("clang") + set_filename("mamba") set_warnings("all", "extra") - add_includedirs("src/Mamba", "src/Mamba/Core", "src/Mamba/Code Analysis", "src/Mamba/Code Analysis/Syntax", "src/Mamba/Code Analysis/Text", "src/Mamba/Code Analysis/Binding", "src/Mamba/Code Analysis/Symbol", "src/Mamba/Code Analysis/Emit", "src/Mamba/Code Analysis/Linking") + add_includedirs(includedirs) if is_os("macosx") then add_linkdirs("/opt/homebrew/opt/llvm/lib/c++") -- macOS compability + add_includedirs("/opt/homebrew/opt/llvm/include") end if is_mode("release") then set_optimize("fastest") @@ -25,6 +44,11 @@ target("Jvav") add_defines("DEBUG") end + add_cxxflags("$(shell " .. llvm_config .. " --cxxflags)") + add_ldflags("$(shell " .. llvm_config .. " --ldflags)") + add_syslinks("$(shell " .. llvm_config .. " --system-libs)") + + for _, file in ipairs(os.files("src/Test/**.cpp")) do local name = path.basename(file) target(name) @@ -33,7 +57,7 @@ for _, file in ipairs(os.files("src/Test/**.cpp")) do add_files("src/Mamba/**.cpp") add_headerfiles("src/Mamba/**.h") set_languages("clatest", "c++latest") - add_includedirs("src/Mamba", "src/Mamba/Core", "src/Mamba/Code Analysis", "src/Mamba/Code Analysis/Syntax", "src/Mamba/Code Analysis/Text", "src/Mamba/Code Analysis/Binding", "src/Mamba/Code Analysis/Symbol", "src/Mamba/Code Analysis/Emit", "src/Mamba/Code Analysis/Linking") + add_includedirs(includedirs) add_files("src/Test/" .. name .. ".cpp") add_packages("fast_io") add_tests("default") From adbfd054f8d94f099e5a2bb006416b8e04879ae3 Mon Sep 17 00:00:00 2001 From: heckerpowered <72550834+heckerpowered@users.noreply.github.com> Date: Wed, 28 Aug 2024 18:27:28 +0800 Subject: [PATCH 13/30] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug=20&=20=E5=AE=8C?= =?UTF-8?q?=E5=96=84=E8=AF=8A=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Mamba/Code Analysis/Compiler.cpp | 107 +++++------------- src/Mamba/Code Analysis/DiagnosticBag.cpp | 29 +++-- .../Syntax/FunctionDeclarationSyntax.cpp | 2 +- src/Mamba/Code Analysis/Syntax/Lexer.cpp | 2 + src/Mamba/Code Analysis/Syntax/Parser.cpp | 21 +++- src/Mamba/Code Analysis/Syntax/Parser.h | 6 +- src/Mamba/Code Analysis/Syntax/SyntaxToken.h | 1 + src/Mamba/Code Analysis/Syntax/SyntaxTree.cpp | 8 ++ src/Mamba/Code Analysis/Syntax/SyntaxTree.h | 6 + src/Mamba/Code Analysis/Text/SourceText.cpp | 1 + src/Mamba/Code Analysis/Text/TextLocation.cpp | 4 +- src/Mamba/Code Analysis/Text/TextLocation.h | 2 +- src/Mamba/Core/DiagnosticPrinter.h | 88 ++++++++++++++ src/Mamba/MambaCore.h | 13 ++- xmake.lua | 88 ++------------ 15 files changed, 207 insertions(+), 171 deletions(-) create mode 100644 src/Mamba/Core/DiagnosticPrinter.h diff --git a/src/Mamba/Code Analysis/Compiler.cpp b/src/Mamba/Code Analysis/Compiler.cpp index b66f038..2889c07 100644 --- a/src/Mamba/Code Analysis/Compiler.cpp +++ b/src/Mamba/Code Analysis/Compiler.cpp @@ -1,4 +1,5 @@ #include "BoundCompilationUnit.h" +#include "DiagnosticPrinter.h" #include "Lexer.h" #include "LLVMBackend.h" #include "MambaCore.h" @@ -6,76 +7,22 @@ #include "Binder.h" #include "Colors.h" #include "Compiler.h" +#include "fast_io.h" #include "Parser.h" using namespace fast_io::io; using namespace Mamba; -void PrintError(const Diagnostic& Diagnostic) noexcept -{ - println( - Color(fast_io::mnp::code_cvt(Diagnostic.Location.FileName()), Colors::BrightForegroundWhite), - Color(":", Colors::BrightForegroundWhite), - Color(Diagnostic.Location.StartLine(), Colors::BrightForegroundWhite), - Color(":", Colors::BrightForegroundWhite), - Color(Diagnostic.Location.StartCharacter(), Colors::BrightForegroundWhite), - " ", - Color("error: ", Colors::BrightForegroundRed), - Color(fast_io::mnp::code_cvt(Diagnostic.Message), Colors::BrightForegroundWhite) - ); -} - -void PrintWarning(const Diagnostic& Diagnostic) noexcept -{ - println( - Color(fast_io::mnp::code_cvt(Diagnostic.Location.FileName()), Colors::BrightForegroundWhite), - Color(":", Colors::BrightForegroundWhite), - Color(Diagnostic.Location.StartLine(), Colors::BrightForegroundWhite), - Color(":", Colors::BrightForegroundWhite), - Color(Diagnostic.Location.StartCharacter(), Colors::BrightForegroundWhite), - " ", - Color("warning: ", Colors::BrightForegroundWhite), - Color(fast_io::mnp::code_cvt(Diagnostic.Message), Colors::BrightForegroundWhite) - ); -} - -void PrintInformation(const Diagnostic& Diagnostic) noexcept -{ - println( - Color(fast_io::mnp::code_cvt(Diagnostic.Location.FileName()), Colors::BrightForegroundWhite), - Color(":", Colors::BrightForegroundWhite), - Color(Diagnostic.Location.StartLine(), Colors::BrightForegroundWhite), - Color(":", Colors::BrightForegroundWhite), - Color(Diagnostic.Location.StartCharacter(), Colors::BrightForegroundWhite), - " ", - Color("note: ", Colors::BrightForegroundCyan), - Color(fast_io::mnp::code_cvt(Diagnostic.Message), Colors::BrightForegroundWhite) - ); -} - -void PrintDiagnostic(const Diagnostic& Diagnostic) noexcept +void PrintDiagnostics(std::span Diagnostics) noexcept { - switch (Diagnostic.Severity) + for (auto&& Diagnostic : Diagnostics) { - case DiagnosticSeverity::Error: - PrintError(Diagnostic); - break; - case DiagnosticSeverity::Warning: - PrintWarning(Diagnostic); - break; - case DiagnosticSeverity::Information: - PrintInformation(Diagnostic); - break; - default: - std::unreachable(); + fast_io::io::println(Diagnostic); } -} -void PrintDiagnostics(std::span Diagnostics) noexcept -{ - for (auto&& Diagnostic : Diagnostics) + if (!Diagnostics.empty()) { - PrintDiagnostic(Diagnostic); + exit(0); } } @@ -112,16 +59,25 @@ void Compiler::ReportNoInputFiles() noexcept ); } -Parser Parse(const std::tuple& Input) noexcept +Parser Parse(std::tuple Input) noexcept { auto [SyntaxTree, Lexer] = Input; - auto Tokens = std::vector{}; - auto Token = Lexer.Lex(); - do + auto Tokens = std::vector{}; + while (true) { + auto Token = Lexer.Lex(); + if (Token.Kind() == SyntaxKind::WhitespaceToken) + { + continue; + } + Tokens.emplace_back(Token); - Token = Lexer.Lex(); - } while (Token.Kind() != SyntaxKind::EndOfFileToken); + if (Token.Kind() == SyntaxKind::EndOfFileToken) + { + break; + } + } + PrintDiagnostics(Lexer.Diagnostics); return Parser(&SyntaxTree, std::move(Tokens)); } @@ -134,18 +90,18 @@ void Compiler::Compile() noexcept return; } - auto SyntaxTrees = SourceTexts | std::views::transform([](auto SourceText) { return SyntaxTree(SourceText); }); - auto Lexers = SyntaxTrees | std::views::transform([](auto SyntaxTree) { return Lexer(&SyntaxTree); }); - auto Parsers = std::views::zip(SyntaxTrees, Lexers) | std::views::transform(Parse); - for (const std::tuple& Input : std::views::zip(SyntaxTrees, Parsers)) + auto SyntaxTrees = SourceTexts | std::views::transform([](auto&& SourceText) { return SyntaxTree(SourceText); }) | std::ranges::to(); + auto Lexers = SyntaxTrees | std::views::transform([](auto&& SyntaxTree) { return Lexer(&SyntaxTree); }) | std::ranges::to(); + auto Parsers = std::views::zip(SyntaxTrees, Lexers) | std::views::transform(Parse) | std::ranges::to(); + for (std::tuple Input : std::views::zip(SyntaxTrees, Parsers)) { - auto [SyntaxTree, Parser] = Input; + auto&& [SyntaxTree, Parser] = Input; SyntaxTree.PrivateRoot = Parser.ParseCompilationUnit(); SyntaxTree.BuildParentsMap(*SyntaxTree.Root()); PrintDiagnostics(Parser.Diagnostics); } - auto Binders = SyntaxTrees | std::views::transform([](auto&& SyntaxTree) { return Binder(&SyntaxTree); }); - auto BoundCompilationUnits = Binders | std::views::transform([](auto&& Binder) { return Binder.BindCompilationUnit(); }); + auto Binders = SyntaxTrees | std::views::transform([](auto&& SyntaxTree) { return Binder(&SyntaxTree); }) | std::ranges::to(); + auto BoundCompilationUnits = Binders | std::views::transform([](auto&& Binder) { return Binder.BindCompilationUnit(); }) | std::ranges::to(); for (auto&& Binder : Binders) { PrintDiagnostics(Binder.Diagnostics); @@ -155,8 +111,5 @@ void Compiler::Compile() noexcept { delete BoundCompilationUnit; } - - auto vector = BoundCompilationUnits | std::ranges::to(); - auto span = std::span(vector); - LLVMBackend::GenerateCode(span, "Main"); + // LLVMBackend::GenerateCode(span, "Main"); } \ No newline at end of file diff --git a/src/Mamba/Code Analysis/DiagnosticBag.cpp b/src/Mamba/Code Analysis/DiagnosticBag.cpp index 9ece564..40dff31 100644 --- a/src/Mamba/Code Analysis/DiagnosticBag.cpp +++ b/src/Mamba/Code Analysis/DiagnosticBag.cpp @@ -6,6 +6,8 @@ #include "Diagnostic.h" #include "DoWhileStatementSyntax.h" #include "ExpressionStatementSyntax.h" +#include "fast_io_core_impl/concepts/strlike.h" +#include "fast_io_freestanding_impl/serializations/strlike_get.h" #include "ForStatementSyntax.h" #include "IfStatementSyntax.h" #include "MambaCore.h" @@ -36,7 +38,7 @@ namespace Mamba void DiagnosticBag::ReportInvalidCharacter(const TextLocation Location, const Char Character) noexcept { - ReportError(Location, TEXT("Invalid character '"), Character, TEXT("'.")); + ReportError(Location, TEXT("Invalid character '"), (Character), TEXT("'.")); } void DiagnosticBag::ReportUnterminatedString(const TextLocation Location) noexcept @@ -71,15 +73,22 @@ namespace Mamba ) noexcept { // Unexpected token 'Kind', Expected: 'ExpectedKind'. - ReportError( - Location, - TEXT("Unexpected token '"), - SyntaxFacts::GetText(Kind), - TEXT("'"), - TEXT("Expected: '"), - SyntaxFacts::ToString(ExpectedKind), - TEXT("'.") - ); + if (ExpectedKind == SyntaxKind::IdentifierToken) + { + ReportError(Location, TEXT("δΈε†™ε‚ζ•°η±»εž‹θƒ†ε€§εŒ…ε€©πŸ˜‘")); + } + else + { + ReportError( + Location, + TEXT("Unexpected token '"), + SyntaxFacts::ToString(Kind), + TEXT("' "), + TEXT("Expected: '"), + SyntaxFacts::ToString(ExpectedKind), + TEXT("'.") + ); + } } void DiagnosticBag::ReportDiscardExpressionValue(const TextLocation Location) noexcept diff --git a/src/Mamba/Code Analysis/Syntax/FunctionDeclarationSyntax.cpp b/src/Mamba/Code Analysis/Syntax/FunctionDeclarationSyntax.cpp index 8fc5b3d..1aa34d9 100644 --- a/src/Mamba/Code Analysis/Syntax/FunctionDeclarationSyntax.cpp +++ b/src/Mamba/Code Analysis/Syntax/FunctionDeclarationSyntax.cpp @@ -40,7 +40,7 @@ SyntaxKind FunctionDeclarationSyntax::Kind() const noexcept std::size_t FunctionDeclarationSyntax::ChildrenCount() const noexcept { - return 6 + Parameters.size(); + return Type ? 6 : 5 + Parameters.size(); } const SyntaxNode* FunctionDeclarationSyntax::ChildAt(std::size_t Index) const noexcept diff --git a/src/Mamba/Code Analysis/Syntax/Lexer.cpp b/src/Mamba/Code Analysis/Syntax/Lexer.cpp index dc76829..0aca2cc 100644 --- a/src/Mamba/Code Analysis/Syntax/Lexer.cpp +++ b/src/Mamba/Code Analysis/Syntax/Lexer.cpp @@ -1,6 +1,7 @@ #include "Lexer.h" #include "DiagnosticBag.h" +#include "fast_io.h" #include "Literal.h" #include "SourceText.h" #include "SyntaxFacts.h" @@ -269,6 +270,7 @@ namespace Mamba { auto View = Text().SubView(Position, 1); auto Location = TextLocation(Text(), View); + Diagnostics.ReportInvalidCharacter(Location, Current()); ++Position; } diff --git a/src/Mamba/Code Analysis/Syntax/Parser.cpp b/src/Mamba/Code Analysis/Syntax/Parser.cpp index eae14c7..dba644b 100644 --- a/src/Mamba/Code Analysis/Syntax/Parser.cpp +++ b/src/Mamba/Code Analysis/Syntax/Parser.cpp @@ -1,13 +1,32 @@ #include "Parser.h" +#include "MambaCore.h" #include "SyntaxFacts.h" +#include "SyntaxTree.h" #include "UnaryExpressionSyntax.h" using namespace Mamba; -Parser::Parser(const class SyntaxTree* SyntaxTree, std::vector&& Tokens) noexcept : +Parser::Parser(const class SyntaxTree* SyntaxTree, std::vector&& Tokens) noexcept : SyntaxTree(SyntaxTree), Tokens(std::move(Tokens)), Position(0) { + if (this->Tokens.empty()) + { + InternalCompilerError(std::source_location::current(), "No tokens provided to parser."); + } + else if (this->Tokens.back().Kind() != SyntaxKind::EndOfFileToken) + { + InternalCompilerError(std::source_location::current(), "Tokens do not end with EndOfFileToken."); + } +} + +Parser::Parser(Parser&& Other) noexcept : + SyntaxTree(Other.SyntaxTree), + Tokens(std::move(Other.Tokens)), + Position(Other.Position) +{ + Other.SyntaxTree = {}; + Other.Position = 0; } const SyntaxToken* Parser::Peek(std::size_t Offset) noexcept diff --git a/src/Mamba/Code Analysis/Syntax/Parser.h b/src/Mamba/Code Analysis/Syntax/Parser.h index 4f1acff..46fb8ae 100644 --- a/src/Mamba/Code Analysis/Syntax/Parser.h +++ b/src/Mamba/Code Analysis/Syntax/Parser.h @@ -31,13 +31,15 @@ namespace Mamba class Parser { const class SyntaxTree* SyntaxTree; - std::vector Tokens; + std::vector Tokens; std::size_t Position; public: DiagnosticBag Diagnostics; - [[nodiscard]] Parser(const class SyntaxTree* SyntaxTree, std::vector&& Tokens) noexcept; + [[nodiscard]] Parser(const class SyntaxTree* SyntaxTree, std::vector&& Tokens) noexcept; + Parser(const Parser&) = delete; + Parser(Parser&& Other) noexcept; private: [[nodiscard]] const SyntaxToken* Peek(std::size_t Offset) noexcept; diff --git a/src/Mamba/Code Analysis/Syntax/SyntaxToken.h b/src/Mamba/Code Analysis/Syntax/SyntaxToken.h index 722c0f6..ec97f64 100644 --- a/src/Mamba/Code Analysis/Syntax/SyntaxToken.h +++ b/src/Mamba/Code Analysis/Syntax/SyntaxToken.h @@ -1,5 +1,6 @@ #pragma once +#include "fast_io.h" #include "Literal.h" #include "MambaCore.h" #include "SyntaxKind.h" diff --git a/src/Mamba/Code Analysis/Syntax/SyntaxTree.cpp b/src/Mamba/Code Analysis/Syntax/SyntaxTree.cpp index 54f90f4..b8b51d2 100644 --- a/src/Mamba/Code Analysis/Syntax/SyntaxTree.cpp +++ b/src/Mamba/Code Analysis/Syntax/SyntaxTree.cpp @@ -7,6 +7,14 @@ SyntaxTree::SyntaxTree(const SourceText& SourceText) noexcept : { } +SyntaxTree::SyntaxTree(SyntaxTree&& Other) noexcept : + PrivateRoot(Other.PrivateRoot), + PrivateSourceText(Other.PrivateSourceText), + ParentsMap(std::move(Other.ParentsMap)) +{ + Other.PrivateRoot = {}; +} + SyntaxTree::~SyntaxTree() noexcept { delete PrivateRoot; diff --git a/src/Mamba/Code Analysis/Syntax/SyntaxTree.h b/src/Mamba/Code Analysis/Syntax/SyntaxTree.h index 311c2f9..cb0fe18 100644 --- a/src/Mamba/Code Analysis/Syntax/SyntaxTree.h +++ b/src/Mamba/Code Analysis/Syntax/SyntaxTree.h @@ -19,6 +19,12 @@ namespace Mamba public: [[nodiscard]] SyntaxTree(const class SourceText& SourceText) noexcept; + + SyntaxTree(const SyntaxTree&) noexcept = delete; + SyntaxTree(SyntaxTree&& Other) noexcept; + + SyntaxTree& operator=(const SyntaxTree&) noexcept = delete; + ~SyntaxTree() noexcept; template diff --git a/src/Mamba/Code Analysis/Text/SourceText.cpp b/src/Mamba/Code Analysis/Text/SourceText.cpp index bb9b49e..1856422 100644 --- a/src/Mamba/Code Analysis/Text/SourceText.cpp +++ b/src/Mamba/Code Analysis/Text/SourceText.cpp @@ -1,5 +1,6 @@ #include "SourceText.h" +#include "fast_io_core_impl/integers/impl.h" #include "TextLine.h" #include diff --git a/src/Mamba/Code Analysis/Text/TextLocation.cpp b/src/Mamba/Code Analysis/Text/TextLocation.cpp index 180b2c5..aae549d 100644 --- a/src/Mamba/Code Analysis/Text/TextLocation.cpp +++ b/src/Mamba/Code Analysis/Text/TextLocation.cpp @@ -10,7 +10,7 @@ std::size_t TextLocation::StartLine() const noexcept std::size_t TextLocation::StartCharacter() const noexcept { - return Text.RelativeBegin(View) - Text.Lines()[StartLine()].Start; + return Text.RelativeBegin(View); } std::size_t TextLocation::EndLine() const noexcept @@ -20,5 +20,5 @@ std::size_t TextLocation::EndLine() const noexcept std::size_t TextLocation::EndCharacter() const noexcept { - return Text.RelativeEnd(View) - Text.Lines()[EndLine()].Start; + return Text.RelativeEnd(View); } \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Text/TextLocation.h b/src/Mamba/Code Analysis/Text/TextLocation.h index 7885ca3..9f9b68a 100644 --- a/src/Mamba/Code Analysis/Text/TextLocation.h +++ b/src/Mamba/Code Analysis/Text/TextLocation.h @@ -6,7 +6,7 @@ namespace Mamba { struct TextLocation { - SourceText Text; + const SourceText& Text; StringView View; template diff --git a/src/Mamba/Core/DiagnosticPrinter.h b/src/Mamba/Core/DiagnosticPrinter.h new file mode 100644 index 0000000..fd19be2 --- /dev/null +++ b/src/Mamba/Core/DiagnosticPrinter.h @@ -0,0 +1,88 @@ +#pragma once + +#include "Colors.h" +#include "Diagnostic.h" +#include "fast_io_core_impl/codecvt/general.h" +#include +#include + +namespace Mamba +{ + constexpr Colors DiagnosticColor(DiagnosticSeverity Severity) noexcept + { + switch (Severity) + { + case DiagnosticSeverity::Error: + return Colors::BrightForegroundRed; + case DiagnosticSeverity::Warning: + return Colors::BrightForegroundYellow; + case DiagnosticSeverity::Information: + return Colors::BrightForegroundCyan; + default: + std::unreachable(); + } + } + + constexpr std::string_view SeverityString(DiagnosticSeverity Severity) noexcept + { + switch (Severity) + { + case DiagnosticSeverity::Error: + return "error"; + case DiagnosticSeverity::Warning: + return "warning"; + case DiagnosticSeverity::Information: + return "info"; + default: + std::unreachable(); + } + } + + template + constexpr void print_define(fast_io::io_reserve_type_t, auto out [[maybe_unused]], const Diagnostic& Diagnostic) noexcept + { + using namespace fast_io::io; + + auto SeverityColor = DiagnosticColor(Diagnostic.Severity); + auto Severity = SeverityString(Diagnostic.Severity); + + println( + out, + fast_io::mnp::code_cvt(Diagnostic.Location.FileName()), // Color(fast_io::mnp::code_cvt(Diagnostic.Location.FileName()), Colors::BrightForegroundWhite), + ":", // Color(":", Colors::BrightForegroundWhite), + Diagnostic.Location.StartLine(), // Color(Diagnostic.Location.StartLine(), Colors::BrightForegroundWhite), + ":", // Color(":", Colors::BrightForegroundWhite), + Diagnostic.Location.StartCharacter(), // Color(Diagnostic.Location.StartCharacter(), Colors::BrightForegroundWhite), + ": ", + Color(Severity, SeverityColor), + Color(": ", SeverityColor), + fast_io::mnp::code_cvt(Diagnostic.Message) // Color(fast_io::mnp::code_cvt(Diagnostic.Message), Colors::BrightForegroundWhite) + ); + + auto Text = Diagnostic.Location.Text; + auto LineIndex = Diagnostic.Location.StartLine(); + auto Line = Text.Lines()[LineIndex]; + auto LineView = Text.SubView(Line.Start, Line.Length); + println(out, " ", LineIndex + 1, " | ", fast_io::mnp::code_cvt(LineView)); + + auto Indent = fast_io::concat(LineIndex + 1).length() + 5; + + auto Length = Diagnostic.Location.Text.Length(); + for (auto Index [[maybe_unused]] : std::views::iota(0uz, Indent)) + { + print(out, " "); + } + + auto RelativeBegin = Diagnostic.Location.StartCharacter() - Line.Start; + for (auto Index [[maybe_unused]] : std::views::iota(0uz, RelativeBegin - 1)) + { + print(out, " "); + } + + print(out, Color("β˜οΈπŸ€“", Colors::BrightForegroundGreen)); + // for (auto Index [[maybe_unused]] : std::views::iota(1uz, Length)) + // { + // print(out, Color("~", Colors::BrightForegroundGreen)); + //} + } +} // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/MambaCore.h b/src/Mamba/MambaCore.h index d0b1984..0ce160a 100644 --- a/src/Mamba/MambaCore.h +++ b/src/Mamba/MambaCore.h @@ -1,6 +1,7 @@ #pragma once #include "Colors.h" +#include "fast_io_core_impl/concepts/operation_details.h" #include #include #include @@ -133,7 +134,17 @@ namespace Mamba template [[noreturn]] void InternalCompilerError(std::source_location SourceLocation = std::source_location::current(), T&&... Args) noexcept { - fast_io::io::perrln(SourceLocation, ": ", Color("internal compiler error: ", Colors::BrightForegroundRed), std::forward(Args)...); + // ::: internal compiler error: + fast_io::io::perrln( + fast_io::mnp::os_c_str(SourceLocation.file_name()), + ":", + SourceLocation.line(), + ":", + SourceLocation.column(), + ": ", + Color("internal compiler error: ", Colors::BrightForegroundRed), + std::forward(Args)... + ); fast_io::fast_terminate(); } diff --git a/xmake.lua b/xmake.lua index 0c558e8..e84740c 100644 --- a/xmake.lua +++ b/xmake.lua @@ -1,7 +1,6 @@ add_rules("mode.debug", "mode.release") add_rules("plugin.compile_commands.autoupdate") -add_requires("fast_io") local includedirs = { "src/Mamba", @@ -19,14 +18,17 @@ local llvm_config = "/opt/homebrew/opt/llvm/bin/llvm-config" set_languages("c++20") -add_languages("c++26") +add_requires("fast_io") +set_runtimes("c++_shared") target("Jvav") + add_languages("c++23") + add_cxxflags("-std=c++23") set_kind("binary") add_files("src/Mamba/**.cpp") add_headerfiles("src/Mamba/**.h") add_packages("fast_io") - set_toolchains("clang") + set_toolchains("llvm") set_filename("mamba") set_warnings("all", "extra") add_includedirs(includedirs) @@ -44,9 +46,13 @@ target("Jvav") add_defines("DEBUG") end - add_cxxflags("$(shell " .. llvm_config .. " --cxxflags)") + add_includedirs("/opt/homebrew/opt/llvm/include") + -- add_cxxflags("$(shell " .. llvm_config .. " --cxxflags)") add_ldflags("$(shell " .. llvm_config .. " --ldflags)") - add_syslinks("$(shell " .. llvm_config .. " --system-libs)") + add_ldflags("$(shell " .. llvm_config .. " --libs all)", {force=true}) + -- add_syslinks("$(shell " .. llvm_config .. " --system-libs)") + +target_end() for _, file in ipairs(os.files("src/Test/**.cpp")) do @@ -61,74 +67,4 @@ for _, file in ipairs(os.files("src/Test/**.cpp")) do add_files("src/Test/" .. name .. ".cpp") add_packages("fast_io") add_tests("default") -end - --- --- If you want to known more usage about xmake, please see https://xmake.io --- --- ## FAQ --- --- You can enter the project directory firstly before building project. --- --- $ cd projectdir --- --- 1. How to build project? --- --- $ xmake --- --- 2. How to configure project? --- --- $ xmake f -p [macosx|linux|iphoneos ..] -a [x86_64|i386|arm64 ..] -m [debug|release] --- --- 3. Where is the build output directory? --- --- The default output directory is `./build` and you can configure the output directory. --- --- $ xmake f -o outputdir --- $ xmake --- --- 4. How to run and debug target after building project? --- --- $ xmake run [targetname] --- $ xmake run -d [targetname] --- --- 5. How to install target to the system directory or other output directory? --- --- $ xmake install --- $ xmake install -o installdir --- --- 6. Add some frequently-used compilation flags in xmake.lua --- --- @code --- -- add debug and release modes --- add_rules("mode.debug", "mode.release") --- --- -- add macro definition --- add_defines("NDEBUG", "_GNU_SOURCE=1") --- --- -- set warning all as error --- set_warnings("all", "error") --- --- -- set language: c99, c++11 --- set_languages("c99", "c++11") --- --- -- set optimization: none, faster, fastest, smallest --- set_optimize("fastest") --- --- -- add include search directories --- add_includedirs("/usr/include", "/usr/local/include") --- --- -- add link libraries and search directories --- add_links("tbox") --- add_linkdirs("/usr/local/lib", "/usr/lib") --- --- -- add system link libraries --- add_syslinks("z", "pthread") --- --- -- add compilation and link flags --- add_cxflags("-stdnolib", "-fno-strict-aliasing") --- add_ldflags("-L/usr/local/lib", "-lpthread", {force = true}) --- --- @endcode --- - +end \ No newline at end of file From a31a962d4b821cc81691a64a13bb83c1c912256b Mon Sep 17 00:00:00 2001 From: heckerpowered <72550834+heckerpowered@users.noreply.github.com> Date: Sat, 7 Sep 2024 14:05:21 +0800 Subject: [PATCH 14/30] gcc-14 compact --- .NET Linker.sln | 27 -- .gitignore | 1 - CMakeLists.txt | 21 + Makefile | 208 ++++++++ src/.NET Linker/.NET Linker.csproj | 16 - src/.NET Linker/Linker/LinkingReader.cs | 20 - src/.NET Linker/Linker/V1/Identifier.cs | 10 - src/.NET Linker/Linker/V1/InternalOpCodes.cs | 223 --------- src/.NET Linker/Linker/V1/LinkerV1.cs | 452 ------------------ src/.NET Linker/Program.cs | 76 --- src/.NET Linker/mscorlib.dll | Bin 2731056 -> 0 bytes .../Binding/BoundBinaryOperator.cpp | 16 +- .../Binding/BoundBinaryOperator.h | 6 +- .../Binding/BoundUnaryOperator.cpp | 12 +- .../Binding/BoundUnaryOperator.h | 10 +- .../Code Analysis/Binding/ConstantFolding.cpp | 8 +- src/Mamba/Code Analysis/Compiler.cpp | 3 +- src/Mamba/Code Generation/LLVMBackend.cpp | 2 - src/Mamba/Core/DiagnosticPrinter.h | 5 +- src/Mamba/main.cpp | 1 + xmake.lua | 83 +++- 21 files changed, 338 insertions(+), 862 deletions(-) delete mode 100644 .NET Linker.sln create mode 100644 CMakeLists.txt create mode 100644 Makefile delete mode 100644 src/.NET Linker/.NET Linker.csproj delete mode 100644 src/.NET Linker/Linker/LinkingReader.cs delete mode 100644 src/.NET Linker/Linker/V1/Identifier.cs delete mode 100644 src/.NET Linker/Linker/V1/InternalOpCodes.cs delete mode 100644 src/.NET Linker/Linker/V1/LinkerV1.cs delete mode 100644 src/.NET Linker/Program.cs delete mode 100755 src/.NET Linker/mscorlib.dll diff --git a/.NET Linker.sln b/.NET Linker.sln deleted file mode 100644 index 2402748..0000000 --- a/.NET Linker.sln +++ /dev/null @@ -1,27 +0,0 @@ -ο»Ώ -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.0.31903.59 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{EF9C24DA-47D6-42EA-BEE6-78BADDD2174C}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = ".NET Linker", "src\.NET Linker\.NET Linker.csproj", "{C5790079-DC23-4ABF-8E73-72DEAC881F8D}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {C5790079-DC23-4ABF-8E73-72DEAC881F8D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C5790079-DC23-4ABF-8E73-72DEAC881F8D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C5790079-DC23-4ABF-8E73-72DEAC881F8D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C5790079-DC23-4ABF-8E73-72DEAC881F8D}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {C5790079-DC23-4ABF-8E73-72DEAC881F8D} = {EF9C24DA-47D6-42EA-BEE6-78BADDD2174C} - EndGlobalSection -EndGlobal diff --git a/.gitignore b/.gitignore index 5200987..e842405 100644 --- a/.gitignore +++ b/.gitignore @@ -16,7 +16,6 @@ Jvav.xcodeproj/ CMakeFiles/ CMakeScripts/ cmake_install.cmake -CMakeLists.txt CMakeCache.txt src/.NET Linker/bin diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..c6d1e1f --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,21 @@ +cmake_minimum_required(VERSION 3.10) + +project(Mamba CXX) + +set(CMAKE_CXX_STANDARD 23) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) +set(MAGIC_CPP_INCLUDE_TESTS OFF) + +file(GLOB SOURCE "src/Mamba/**.cpp") +add_executable(Mamba ${SOURCE}) + +include(FetchContent) + +FetchContent_Declare( + fast_io + URL https://github.com/cppfastio/fast_io + DOWNLOAD_EXTRACT_TIMESTAMP TRUE +) + +FetchContent_MakeAvailable(fast_io) \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..d361817 --- /dev/null +++ b/Makefile @@ -0,0 +1,208 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.30 + +# Default target executed when no arguments are given to make. +default_target: all +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /opt/homebrew/Cellar/cmake/3.30.2/bin/cmake + +# The command to remove a file. +RM = /opt/homebrew/Cellar/cmake/3.30.2/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /Users/hecker/Projects/Jvav + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /Users/hecker/Projects/Jvav + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running CMake cache editor..." + /opt/homebrew/Cellar/cmake/3.30.2/bin/ccmake -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache +.PHONY : edit_cache/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running CMake to regenerate build system..." + /opt/homebrew/Cellar/cmake/3.30.2/bin/cmake --regenerate-during-build -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache +.PHONY : rebuild_cache/fast + +# The main all target +all: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /Users/hecker/Projects/Jvav/CMakeFiles /Users/hecker/Projects/Jvav//CMakeFiles/progress.marks + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 all + $(CMAKE_COMMAND) -E cmake_progress_start /Users/hecker/Projects/Jvav/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 clean +.PHONY : clean + +# The main clean target +clean/fast: clean +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +#============================================================================= +# Target rules for targets named Mamba + +# Build rule for target. +Mamba: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 Mamba +.PHONY : Mamba + +# fast build rule for target. +Mamba/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/Mamba.dir/build.make CMakeFiles/Mamba.dir/build +.PHONY : Mamba/fast + +src/Mamba/Mamba.o: src/Mamba/Mamba.cpp.o +.PHONY : src/Mamba/Mamba.o + +# target to build an object file +src/Mamba/Mamba.cpp.o: + $(MAKE) $(MAKESILENT) -f CMakeFiles/Mamba.dir/build.make CMakeFiles/Mamba.dir/src/Mamba/Mamba.cpp.o +.PHONY : src/Mamba/Mamba.cpp.o + +src/Mamba/Mamba.i: src/Mamba/Mamba.cpp.i +.PHONY : src/Mamba/Mamba.i + +# target to preprocess a source file +src/Mamba/Mamba.cpp.i: + $(MAKE) $(MAKESILENT) -f CMakeFiles/Mamba.dir/build.make CMakeFiles/Mamba.dir/src/Mamba/Mamba.cpp.i +.PHONY : src/Mamba/Mamba.cpp.i + +src/Mamba/Mamba.s: src/Mamba/Mamba.cpp.s +.PHONY : src/Mamba/Mamba.s + +# target to generate assembly for a file +src/Mamba/Mamba.cpp.s: + $(MAKE) $(MAKESILENT) -f CMakeFiles/Mamba.dir/build.make CMakeFiles/Mamba.dir/src/Mamba/Mamba.cpp.s +.PHONY : src/Mamba/Mamba.cpp.s + +src/Mamba/main.o: src/Mamba/main.cpp.o +.PHONY : src/Mamba/main.o + +# target to build an object file +src/Mamba/main.cpp.o: + $(MAKE) $(MAKESILENT) -f CMakeFiles/Mamba.dir/build.make CMakeFiles/Mamba.dir/src/Mamba/main.cpp.o +.PHONY : src/Mamba/main.cpp.o + +src/Mamba/main.i: src/Mamba/main.cpp.i +.PHONY : src/Mamba/main.i + +# target to preprocess a source file +src/Mamba/main.cpp.i: + $(MAKE) $(MAKESILENT) -f CMakeFiles/Mamba.dir/build.make CMakeFiles/Mamba.dir/src/Mamba/main.cpp.i +.PHONY : src/Mamba/main.cpp.i + +src/Mamba/main.s: src/Mamba/main.cpp.s +.PHONY : src/Mamba/main.s + +# target to generate assembly for a file +src/Mamba/main.cpp.s: + $(MAKE) $(MAKESILENT) -f CMakeFiles/Mamba.dir/build.make CMakeFiles/Mamba.dir/src/Mamba/main.cpp.s +.PHONY : src/Mamba/main.cpp.s + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... edit_cache" + @echo "... rebuild_cache" + @echo "... Mamba" + @echo "... src/Mamba/Mamba.o" + @echo "... src/Mamba/Mamba.i" + @echo "... src/Mamba/Mamba.s" + @echo "... src/Mamba/main.o" + @echo "... src/Mamba/main.i" + @echo "... src/Mamba/main.s" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/src/.NET Linker/.NET Linker.csproj b/src/.NET Linker/.NET Linker.csproj deleted file mode 100644 index 89b90f1..0000000 --- a/src/.NET Linker/.NET Linker.csproj +++ /dev/null @@ -1,16 +0,0 @@ -ο»Ώ - - - Exe - net8.0 - Jvav - enable - enable - true - - - - - - - diff --git a/src/.NET Linker/Linker/LinkingReader.cs b/src/.NET Linker/Linker/LinkingReader.cs deleted file mode 100644 index d62cb31..0000000 --- a/src/.NET Linker/Linker/LinkingReader.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using System.Text; - -namespace Jvav.Linker; - -public class LinkingReader(Stream inputStream) -{ - private readonly BinaryReader reader = new(inputStream); - public Stream InputStream { get; } = inputStream; - - public ulong ReadLinkerVersion() - { - return reader.ReadUInt64(); - } - - public V1.Linking LinkV1() - { - return new V1.Linking(InputStream); - } -} diff --git a/src/.NET Linker/Linker/V1/Identifier.cs b/src/.NET Linker/Linker/V1/Identifier.cs deleted file mode 100644 index 96c24d0..0000000 --- a/src/.NET Linker/Linker/V1/Identifier.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace Jvav.Linker.V1; - -enum Identifier : byte -{ - Function, - Variable, - Type, - Instruction, - String -} \ No newline at end of file diff --git a/src/.NET Linker/Linker/V1/InternalOpCodes.cs b/src/.NET Linker/Linker/V1/InternalOpCodes.cs deleted file mode 100644 index d20e452..0000000 --- a/src/.NET Linker/Linker/V1/InternalOpCodes.cs +++ /dev/null @@ -1,223 +0,0 @@ -namespace Jvav.Linker.V1; - -enum InternalOpCodes -{ - Add = 0x58, - AddOvf = 0xD6, - AddOvfUn = 0xD7, - And = 0x5F, - Arglist = 0xFE00, - Beq = 0x3B, - BeqS = 0x2E, - Bge = 0x3C, - BgeS = 0x2F, - BgeUn = 0x41, - BgeUnS = 0x34, - Bgt = 0x3D, - BgtS = 0x30, - BgtUn = 0x42, - BgtUnS = 0x35, - Ble = 0x3E, - BleS = 0x31, - BleUn = 0x43, - BleUnS = 0x36, - Blt = 0x3F, - BltS = 0x32, - BltUn = 0x44, - BltUnS = 0x37, - BneUn = 0x40, - BneUnS = 0x33, - Box = 0x8C, - Br = 0x38, - BrS = 0x2B, - Break = 0x01, - Brfalse = 0x39, - BrfalseS = 0x2C, - Brtrue = 0x3A, - BrtrueS = 0x2D, - Call = 0x28, - Calli = 0x29, - Callvirt = 0x6F, - Castclass = 0x74, - Ceq = 0xFF01, - Cgt = 0xFE02, - CgtUn = 0xFE03, - Ckfinite = 0xC3, - Clt = 0xFE04, - CltUn = 0xFE05, - Constrained = 0xFF16, - ConvI = 0xD3, - ConvI1 = 0x67, - ConvI2 = 0x68, - ConvI4 = 0x69, - ConvI8 = 0x6A, - ConvOvfI = 0xD4, - ConvOvfIUn = 0x8A, - ConvOvfI1 = 0xB3, - ConvOvfI1Un = 0x82, - ConvOvfI2 = 0xB5, - ConvOvfI2Un = 0x83, - ConvOvfI4 = 0xB7, - ConvOvfI4Un = 0x84, - ConvOvfI8 = 0xB9, - ConvOvfI8Un = 0x85, - ConvOvfU = 0xD5, - ConvOvfUUn = 0x8B, - ConvOvfU1 = 0xB4, - ConvOvfU1Un = 0x86, - ConvOvfU2 = 0xB6, - ConvOvfU2Un = 0x87, - ConvOvfU4 = 0xB8, - ConvOvfu4Un = 0x88, - ConvOvfU8 = 0xBA, - ConvOvfU8Un = 0x89, - ConvRUn = 0x76, - ConvR4 = 0x6B, - ConvR8 = 0x6C, - ConvU = 0xE0, - ConvU1 = 0xD2, - ConvU2 = 0xD1, - ConvU4 = 0x6D, - ConvU8 = 0x6E, - Cpblk = 0xFE17, - Cpobj = 0x70, - Div = 0x5B, - DivUn = 0x5C, - Dup = 0x25, - Endfilter = 0xFE11, - Endfinally = 0xDC, - Initblk = 0xFE18, - Initobj = 0xFE15, - Isinst = 0x75, - jmp = 0x27, - Ldarg = 0xFE09, - Ldarg0 = 0x02, - Ldarg1 = 0x03, - Ldarg2 = 0x04, - Ldarg3 = 0x05, - LdargS = 0x0E, - Ldarga = 0xFE0A, - LdargaS = 0x0F, - LdcI4 = 0x20, - LcdI40 = 0x16, - LdcI41 = 0x17, - LdcI42 = 0x18, - LdcI43 = 0x19, - LdcI44 = 0x1A, - LdcI45 = 0x1B, - LdcI46 = 0x1C, - LdcI47 = 0x1D, - LdcI48 = 0x1E, - LdcI4M1 = 0x15, - LdcI4S = 0x1F, - LdcI8 = 0x21, - LdcR4 = 0x22, - LdcR8 = 0x23, - Ldelem = 0xA3, - LdelemI = 0x97, - LdelemI1 = 0x90, - LdelemI2 = 0x92, - LdelemI4 = 0x94, - LdelemI8 = 0x96, - LdelemR4 = 0x98, - LdelemR8 = 0x99, - LdelemRef = 0x9A, - LdelemU1 = 0x91, - LdelemU2 = 0x93, - LdelemU4 = 0x95, - Ldelema = 0x8F, - Ldfld = 0x7B, - Ldflda = 0x7C, - Ldftn = 0xFF06, - LdindI = 0x4D, - LdindI1 = 0x46, - LdindI2 = 0x48, - LdindI4 = 0x4A, - LdindI8 = 0x4C, - LdindR4 = 0x4E, - LdindR8 = 0x4F, - LdindRef = 0x50, - LdindU1 = 0x47, - LdindU2 = 0x49, - LdindU4 = 0x4B, - Ldlen = 0x8E, - Ldloc = 0xFE0C, - Ldloc0 = 0x06, - Ldloc1 = 0x07, - Ldloc2 = 0x08, - Ldloc3 = 0x09, - LdlocS = 0x11, - Ldloca = 0xFE0D, - LdlocaS = 0x12, - Ldnull = 0x14, - Ldobj = 0x71, - Ldsfld = 0x7E, - Ldsflda = 0x7F, - Ldstr = 0x72, - Ldtoken = 0xD0, - Ldvirtftn = 0xFF07, - Leave = 0xDD, - LeaveS = 0xDE, - Localloc = 0xFE0F, - Mkrefany = 0xC6, - Mul = 0x5A, - MulOvf = 0xD8, - MulOvfUn = 0xD9, - Neg = 0x65, - Newarr = 0x8D, - Newobj = 0x73, - Nop = 0x00, - Not = 0x66, - Or = 0x60, - Pop = 0x26, - Readonly = 0xFE1E, - Refanytype = 0xFF1D, - Refanyval = 0xC2, - Rem = 0x5D, - RemUn = 0x5E, - Ret = 0x2A, - Rethrow = 0xFF1A, - Shl = 0x62, - Shr = 0x63, - ShrUn = 0x64, - Sizeof = 0xFE1C, - Starg = 0xFE0B, - StargS = 0x10, - Stelem = 0xA4, - StelemI = 0x9B, - StelemI1 = 0x9C, - StelemI2 = 0x9D, - StelemI4 = 0x9E, - StelemI8 = 0x9F, - StelemR4 = 0xA0, - StelemR8 = 0xA1, - StelemRef = 0xA2, - Stfld = 0x7D, - StindI = 0xDF, - StindI1 = 0x52, - StintI2 = 0x53, - StindI4 = 0x54, - StindI8 = 0x55, - StindR4 = 0x56, - StintR8 = 0x57, - StindRef = 0x51, - Stloc = 0xFF0E, - Stloc0 = 0x0A, - Stloc1 = 0x0B, - Stloc2 = 0x0C, - Stloc3 = 0x0D, - StlocS = 0x13, - Stobj = 0x81, - Stsfld = 0x80, - Sub = 0x59, - SubOvf = 0xDA, - SubOvfUn = 0xDB, - Switch = 0x45, - Tailcall = 0xFF14, - Throw = 0x7A, - Unaligned = 0xFE12, - Unbox = 0x79, - UnboxAny = 0xA5, - Volatile = 0xFE13, - Xor = 0x61, -}; \ No newline at end of file diff --git a/src/.NET Linker/Linker/V1/LinkerV1.cs b/src/.NET Linker/Linker/V1/LinkerV1.cs deleted file mode 100644 index 7cfb1e2..0000000 --- a/src/.NET Linker/Linker/V1/LinkerV1.cs +++ /dev/null @@ -1,452 +0,0 @@ -using System.Reflection.Emit; -using System.Text; -using Mono.Cecil; -using Mono.Cecil.Cil; - -using OpCodes = Mono.Cecil.Cil.OpCodes; -using OpCode = Mono.Cecil.Cil.OpCode; -using System.Reflection; -using TypeAttributes = Mono.Cecil.TypeAttributes; -using MethodAttributes = Mono.Cecil.MethodAttributes; - -namespace Jvav.Linker.V1; - -public class Linking -{ - private readonly BinaryReader reader; - private readonly AssemblyDefinition assembly; - private readonly TypeDefinition programType; - - private readonly List references = []; - private readonly MethodReference printlnMethod; - private readonly AssemblyDefinition mscorlib; - public Linking(Stream inputStream) - { - reader = new(inputStream); - ModuleName = ReadModuleName(); - - mscorlib = AssemblyDefinition.ReadAssembly("mscorlib.dll"); - references.Add(mscorlib); - - var assemblyName = new AssemblyNameDefinition(ModuleName, new Version(1, 0, 0, 0)); - assembly = AssemblyDefinition.CreateAssembly(assemblyName, ModuleName, ModuleKind.Console); - - var objectType = ResolveType("System.Object")!; - programType = new TypeDefinition("", "Program", TypeAttributes.Abstract | TypeAttributes.Sealed, objectType); - assembly.MainModule.Types.Add(programType); - - printlnMethod = ResolveMethod("System.Console", "WriteLine", ["System.Object"])!; - - try - { - ReadMembers(); - } - catch (EndOfStreamException) { }; - } - - public string ModuleName { get; private set; } - - private MethodReference? ResolveMethod(string typeName, string methodName, string[] parameterTypeNames) - { - var foundTypes = references - .SelectMany(a => a.Modules) - .SelectMany(m => m.Types) - .Where(t => t.FullName == typeName) - .ToArray(); - if (foundTypes.Length != 1) - { - return null; - } - - var foundType = foundTypes.First(); - var methods = foundType.Methods.Where(method => method.Name == methodName); - - foreach (var method in methods) - { - if (method.Parameters.Count != parameterTypeNames.Length) - { - continue; - } - - var allParametersMatch = true; - - for (var i = 0; i < parameterTypeNames.Length; i++) - { - if (method.Parameters[i].ParameterType.FullName != parameterTypeNames[i]) - { - allParametersMatch = false; - break; - } - } - - if (!allParametersMatch) - { - continue; - } - - return assembly.MainModule.Import(method); - } - - return null; - } - - TypeReference? ResolveType(string metadataName) - { - var foundTypes = references.SelectMany(a => a.Modules) - .SelectMany(m => m.Types) - .Where(t => t.FullName == metadataName) - .ToArray(); - if (foundTypes.Length == 1) - { - var typeReference = assembly.MainModule.Import(foundTypes.First()); - return typeReference; - } - - return null; - } - - private string ReadModuleName() - { - var moduleNameLength = reader.ReadUInt64(); - var bytes = reader.ReadBytes((int)moduleNameLength); - var moduleName = Encoding.UTF8.GetString(bytes); - return moduleName; - } - - private Identifier ReadMemberType() - { - var memberType = (Identifier)reader.ReadByte(); - return memberType; - } - - private void ReadMembers() - { - while (true) - { - var memberType = ReadMemberType(); - switch (memberType) - { - case Identifier.Function: - ReadFunction(); - break; - default: - Console.WriteLine($"Unknown member type: {memberType}"); - return; - } - } - } - - private Identifier ReadIdentifier() - { - var identifier = (Identifier)reader.ReadByte(); - return identifier; - } - - private OpCode ReadOpCode() - { - var opCode = (InternalOpCodes)reader.ReadInt32(); - return opCode switch - { - InternalOpCodes.Add => OpCodes.Add, - InternalOpCodes.AddOvf => OpCodes.Add_Ovf, - InternalOpCodes.AddOvfUn => OpCodes.Add_Ovf_Un, - InternalOpCodes.And => OpCodes.And, - InternalOpCodes.Arglist => OpCodes.Arglist, - InternalOpCodes.Beq => OpCodes.Beq, - InternalOpCodes.BeqS => OpCodes.Beq_S, - InternalOpCodes.Bge => OpCodes.Bge, - InternalOpCodes.BgeS => OpCodes.Bge_S, - InternalOpCodes.BgeUn => OpCodes.Bge_Un, - InternalOpCodes.BgeUnS => OpCodes.Bge_Un_S, - InternalOpCodes.Bgt => OpCodes.Bgt, - InternalOpCodes.BgtS => OpCodes.Bgt_S, - InternalOpCodes.BgtUn => OpCodes.Bgt_Un, - InternalOpCodes.BgtUnS => OpCodes.Bgt_Un_S, - InternalOpCodes.Ble => OpCodes.Ble, - InternalOpCodes.BleS => OpCodes.Ble_S, - InternalOpCodes.BleUn => OpCodes.Ble_Un, - InternalOpCodes.BleUnS => OpCodes.Ble_Un_S, - InternalOpCodes.Blt => OpCodes.Blt, - InternalOpCodes.BltS => OpCodes.Blt_S, - InternalOpCodes.BltUn => OpCodes.Blt_Un, - InternalOpCodes.BltUnS => OpCodes.Blt_Un_S, - InternalOpCodes.BneUn => OpCodes.Bne_Un, - InternalOpCodes.BneUnS => OpCodes.Bne_Un_S, - InternalOpCodes.Box => OpCodes.Box, - InternalOpCodes.Br => OpCodes.Br, - InternalOpCodes.BrS => OpCodes.Br_S, - InternalOpCodes.Break => OpCodes.Break, - InternalOpCodes.Brfalse => OpCodes.Brfalse, - InternalOpCodes.BrfalseS => OpCodes.Brfalse_S, - InternalOpCodes.Brtrue => OpCodes.Brtrue, - InternalOpCodes.BrtrueS => OpCodes.Brtrue_S, - InternalOpCodes.Call => OpCodes.Call, - InternalOpCodes.Calli => OpCodes.Calli, - InternalOpCodes.Callvirt => OpCodes.Callvirt, - InternalOpCodes.Castclass => OpCodes.Castclass, - InternalOpCodes.Ceq => OpCodes.Ceq, - InternalOpCodes.Cgt => OpCodes.Cgt, - InternalOpCodes.CgtUn => OpCodes.Cgt_Un, - InternalOpCodes.Ckfinite => OpCodes.Ckfinite, - InternalOpCodes.Clt => OpCodes.Clt, - InternalOpCodes.CltUn => OpCodes.Clt_Un, - InternalOpCodes.Constrained => OpCodes.Constrained, - InternalOpCodes.ConvI => OpCodes.Conv_I, - InternalOpCodes.ConvI1 => OpCodes.Conv_I1, - InternalOpCodes.ConvI2 => OpCodes.Conv_I2, - InternalOpCodes.ConvI4 => OpCodes.Conv_I4, - InternalOpCodes.ConvI8 => OpCodes.Conv_I8, - InternalOpCodes.ConvOvfI => OpCodes.Conv_Ovf_I, - InternalOpCodes.ConvOvfIUn => OpCodes.Conv_Ovf_I_Un, - InternalOpCodes.ConvOvfI1 => OpCodes.Conv_Ovf_I1, - InternalOpCodes.ConvOvfI1Un => OpCodes.Conv_Ovf_I1_Un, - InternalOpCodes.ConvOvfI2 => OpCodes.Conv_Ovf_I2, - InternalOpCodes.ConvOvfI2Un => OpCodes.Conv_Ovf_I2_Un, - InternalOpCodes.ConvOvfI4 => OpCodes.Conv_Ovf_I4, - InternalOpCodes.ConvOvfI4Un => OpCodes.Conv_Ovf_I4_Un, - InternalOpCodes.ConvOvfI8 => OpCodes.Conv_Ovf_I8, - InternalOpCodes.ConvOvfI8Un => OpCodes.Conv_Ovf_I8_Un, - InternalOpCodes.ConvOvfU => OpCodes.Conv_Ovf_U, - InternalOpCodes.ConvOvfUUn => OpCodes.Conv_Ovf_U_Un, - InternalOpCodes.ConvOvfU1 => OpCodes.Conv_Ovf_U1, - InternalOpCodes.ConvOvfU1Un => OpCodes.Conv_Ovf_U1_Un, - InternalOpCodes.ConvOvfU2 => OpCodes.Conv_Ovf_U2, - InternalOpCodes.ConvOvfU2Un => OpCodes.Conv_Ovf_U2_Un, - InternalOpCodes.ConvOvfU4 => OpCodes.Conv_Ovf_U4, - InternalOpCodes.ConvOvfu4Un => OpCodes.Conv_Ovf_U4_Un, - InternalOpCodes.ConvOvfU8 => OpCodes.Conv_Ovf_U8, - InternalOpCodes.ConvOvfU8Un => OpCodes.Conv_Ovf_U8_Un, - InternalOpCodes.ConvRUn => OpCodes.Conv_R_Un, - InternalOpCodes.ConvR4 => OpCodes.Conv_R4, - InternalOpCodes.ConvR8 => OpCodes.Conv_R8, - InternalOpCodes.ConvU => OpCodes.Conv_U, - InternalOpCodes.ConvU1 => OpCodes.Conv_U1, - InternalOpCodes.ConvU2 => OpCodes.Conv_U2, - InternalOpCodes.ConvU4 => OpCodes.Conv_U4, - InternalOpCodes.ConvU8 => OpCodes.Conv_U8, - InternalOpCodes.Cpblk => OpCodes.Cpblk, - InternalOpCodes.Cpobj => OpCodes.Cpobj, - InternalOpCodes.Div => OpCodes.Div, - InternalOpCodes.DivUn => OpCodes.Div_Un, - InternalOpCodes.Dup => OpCodes.Dup, - InternalOpCodes.Endfilter => OpCodes.Endfilter, - InternalOpCodes.Endfinally => OpCodes.Endfinally, - InternalOpCodes.Initblk => OpCodes.Initblk, - InternalOpCodes.Initobj => OpCodes.Initobj, - InternalOpCodes.Isinst => OpCodes.Isinst, - InternalOpCodes.jmp => OpCodes.Jmp, - InternalOpCodes.Ldarg => OpCodes.Ldarg, - InternalOpCodes.Ldarg0 => OpCodes.Ldarg_0, - InternalOpCodes.Ldarg1 => OpCodes.Ldarg_1, - InternalOpCodes.Ldarg2 => OpCodes.Ldarg_2, - InternalOpCodes.Ldarg3 => OpCodes.Ldarg_3, - InternalOpCodes.LdargS => OpCodes.Ldarg_S, - InternalOpCodes.Ldarga => OpCodes.Ldarga, - InternalOpCodes.LdargaS => OpCodes.Ldarga_S, - InternalOpCodes.LdcI4 => OpCodes.Ldc_I4, - InternalOpCodes.LcdI40 => OpCodes.Ldc_I4_0, - InternalOpCodes.LdcI41 => OpCodes.Ldc_I4_1, - InternalOpCodes.LdcI42 => OpCodes.Ldc_I4_2, - InternalOpCodes.LdcI43 => OpCodes.Ldc_I4_3, - InternalOpCodes.LdcI44 => OpCodes.Ldc_I4_4, - InternalOpCodes.LdcI45 => OpCodes.Ldc_I4_5, - InternalOpCodes.LdcI46 => OpCodes.Ldc_I4_6, - InternalOpCodes.LdcI47 => OpCodes.Ldc_I4_7, - InternalOpCodes.LdcI48 => OpCodes.Ldc_I4_8, - InternalOpCodes.LdcI4M1 => OpCodes.Ldc_I4_M1, - InternalOpCodes.LdcI4S => OpCodes.Ldc_I4_S, - InternalOpCodes.LdcI8 => OpCodes.Ldc_I8, - InternalOpCodes.LdcR4 => OpCodes.Ldc_R4, - InternalOpCodes.LdcR8 => OpCodes.Ldc_R8, - InternalOpCodes.Ldelem => OpCodes.Ldelem_Any, - InternalOpCodes.LdelemI => OpCodes.Ldelem_I, - InternalOpCodes.LdelemI1 => OpCodes.Ldelem_I1, - InternalOpCodes.LdelemI2 => OpCodes.Ldelem_I2, - InternalOpCodes.LdelemI4 => OpCodes.Ldelem_I4, - InternalOpCodes.LdelemI8 => OpCodes.Ldelem_I8, - InternalOpCodes.LdelemR4 => OpCodes.Ldelem_R4, - InternalOpCodes.LdelemR8 => OpCodes.Ldelem_R8, - InternalOpCodes.LdelemRef => OpCodes.Ldelem_Ref, - InternalOpCodes.LdelemU1 => OpCodes.Ldelem_U1, - InternalOpCodes.LdelemU2 => OpCodes.Ldelem_U2, - InternalOpCodes.LdelemU4 => OpCodes.Ldelem_U4, - InternalOpCodes.Ldelema => OpCodes.Ldelema, - InternalOpCodes.Ldfld => OpCodes.Ldfld, - InternalOpCodes.Ldflda => OpCodes.Ldflda, - InternalOpCodes.Ldftn => OpCodes.Ldftn, - InternalOpCodes.LdindI => OpCodes.Ldind_I, - InternalOpCodes.LdindI1 => OpCodes.Ldind_I1, - InternalOpCodes.LdindI2 => OpCodes.Ldind_I2, - InternalOpCodes.LdindI4 => OpCodes.Ldind_I4, - InternalOpCodes.LdindI8 => OpCodes.Ldind_I8, - InternalOpCodes.LdindR4 => OpCodes.Ldind_R4, - InternalOpCodes.LdindR8 => OpCodes.Ldind_R8, - InternalOpCodes.LdindRef => OpCodes.Ldind_Ref, - InternalOpCodes.LdindU1 => OpCodes.Ldind_U1, - InternalOpCodes.LdindU2 => OpCodes.Ldind_U2, - InternalOpCodes.LdindU4 => OpCodes.Ldind_U4, - InternalOpCodes.Ldlen => OpCodes.Ldlen, - InternalOpCodes.Ldloc => OpCodes.Ldloc, - InternalOpCodes.Ldloc0 => OpCodes.Ldloc_0, - InternalOpCodes.Ldloc1 => OpCodes.Ldloc_1, - InternalOpCodes.Ldloc2 => OpCodes.Ldloc_2, - InternalOpCodes.Ldloc3 => OpCodes.Ldloc_3, - InternalOpCodes.LdlocS => OpCodes.Ldloc_S, - InternalOpCodes.Ldloca => OpCodes.Ldloca, - InternalOpCodes.LdlocaS => OpCodes.Ldloca_S, - InternalOpCodes.Ldnull => OpCodes.Ldnull, - InternalOpCodes.Ldobj => OpCodes.Ldobj, - InternalOpCodes.Ldsfld => OpCodes.Ldsfld, - InternalOpCodes.Ldsflda => OpCodes.Ldsflda, - InternalOpCodes.Ldstr => OpCodes.Ldstr, - InternalOpCodes.Ldtoken => OpCodes.Ldtoken, - InternalOpCodes.Ldvirtftn => OpCodes.Ldvirtftn, - InternalOpCodes.Leave => OpCodes.Leave, - InternalOpCodes.LeaveS => OpCodes.Leave_S, - InternalOpCodes.Localloc => OpCodes.Localloc, - InternalOpCodes.Mkrefany => OpCodes.Mkrefany, - InternalOpCodes.Mul => OpCodes.Mul, - InternalOpCodes.MulOvf => OpCodes.Mul_Ovf, - InternalOpCodes.MulOvfUn => OpCodes.Mul_Ovf_Un, - InternalOpCodes.Neg => OpCodes.Neg, - InternalOpCodes.Newarr => OpCodes.Newarr, - InternalOpCodes.Newobj => OpCodes.Newobj, - InternalOpCodes.Nop => OpCodes.Nop, - InternalOpCodes.Not => OpCodes.Not, - InternalOpCodes.Or => OpCodes.Or, - InternalOpCodes.Pop => OpCodes.Pop, - InternalOpCodes.Readonly => OpCodes.Readonly, - InternalOpCodes.Refanytype => OpCodes.Refanytype, - InternalOpCodes.Refanyval => OpCodes.Refanyval, - InternalOpCodes.Rem => OpCodes.Rem, - InternalOpCodes.RemUn => OpCodes.Rem_Un, - InternalOpCodes.Ret => OpCodes.Ret, - InternalOpCodes.Rethrow => OpCodes.Rethrow, - InternalOpCodes.Shl => OpCodes.Shl, - InternalOpCodes.Shr => OpCodes.Shr, - InternalOpCodes.ShrUn => OpCodes.Shr_Un, - InternalOpCodes.Sizeof => OpCodes.Sizeof, - InternalOpCodes.Starg => OpCodes.Starg, - InternalOpCodes.StargS => OpCodes.Starg_S, - InternalOpCodes.Stelem => OpCodes.Stelem_Any, - InternalOpCodes.StelemI => OpCodes.Stelem_I, - InternalOpCodes.StelemI1 => OpCodes.Stelem_I1, - InternalOpCodes.StelemI2 => OpCodes.Stelem_I2, - InternalOpCodes.StelemI4 => OpCodes.Stelem_I4, - InternalOpCodes.StelemI8 => OpCodes.Stelem_I8, - InternalOpCodes.StelemR4 => OpCodes.Stelem_R4, - InternalOpCodes.StelemR8 => OpCodes.Stelem_R8, - InternalOpCodes.StelemRef => OpCodes.Stelem_Ref, - InternalOpCodes.Stfld => OpCodes.Stfld, - InternalOpCodes.StindI => OpCodes.Stind_I, - InternalOpCodes.StindI1 => OpCodes.Stind_I1, - InternalOpCodes.StintI2 => OpCodes.Stind_I2, - InternalOpCodes.StindI4 => OpCodes.Stind_I4, - InternalOpCodes.StindI8 => OpCodes.Stind_I8, - InternalOpCodes.StindR4 => OpCodes.Stind_R4, - InternalOpCodes.StintR8 => OpCodes.Stind_R8, - InternalOpCodes.StindRef => OpCodes.Stind_Ref, - InternalOpCodes.Stloc => OpCodes.Stloc, - InternalOpCodes.Stloc0 => OpCodes.Stloc_0, - InternalOpCodes.Stloc1 => OpCodes.Stloc_1, - InternalOpCodes.Stloc2 => OpCodes.Stloc_2, - InternalOpCodes.Stloc3 => OpCodes.Stloc_3, - InternalOpCodes.StlocS => OpCodes.Stloc_S, - InternalOpCodes.Stobj => OpCodes.Stobj, - InternalOpCodes.Stsfld => OpCodes.Stsfld, - InternalOpCodes.Sub => OpCodes.Sub, - InternalOpCodes.SubOvf => OpCodes.Sub_Ovf, - InternalOpCodes.SubOvfUn => OpCodes.Sub_Ovf_Un, - InternalOpCodes.Switch => OpCodes.Switch, - InternalOpCodes.Tailcall => OpCodes.Tail, - InternalOpCodes.Throw => OpCodes.Throw, - InternalOpCodes.Unaligned => OpCodes.Unaligned, - InternalOpCodes.Unbox => OpCodes.Unbox, - InternalOpCodes.UnboxAny => OpCodes.Unbox_Any, - InternalOpCodes.Volatile => OpCodes.Volatile, - InternalOpCodes.Xor => OpCodes.Xor, - _ => throw new NotImplementedException(), - }; - } - private Identifier PeekIdentifier() - { - var position = reader.BaseStream.Position; - var identifier = ReadIdentifier(); - reader.BaseStream.Position = position; - return identifier; - } - private void ReadFunction() - { - var functionTypeName = ReadString(); - var functionName = ReadString(); - Console.WriteLine($"Linking function {functionName}"); - var functionParameterCount = reader.ReadUInt64(); - for (ulong i = 0; i < functionParameterCount; i++) - { - ReadString(); - } - - var method = new MethodDefinition(functionName, MethodAttributes.Public | MethodAttributes.Static, assembly.MainModule.TypeSystem.Void); - programType.Methods.Add(method); - var processor = method.Body.GetILProcessor(); - - try - { - while (true) - { - var identifier = ReadIdentifier(); - if (identifier != Identifier.Instruction) - { - break; - } - - var opCode = ReadOpCode(); - if (opCode == OpCodes.Call) - { - ReadIdentifier(); - EmitCall(processor, ReadString()); - continue; - } - switch (PeekIdentifier()) - { - case Identifier.String: - ReadIdentifier(); - var stringValue = ReadString(); - processor.Emit(opCode, stringValue); - break; - default: - break; - } - } - } - catch (EndOfStreamException) { } - processor.Emit(OpCodes.Ret); - - if (functionName == "main") - { - assembly.EntryPoint = method; - } - } - - private void EmitCall(ILProcessor processor, string methodName) - { - // Built-in functions - if (methodName == "println") - { - processor.Emit(OpCodes.Call, printlnMethod); - } - } - - private string ReadString() - { - var stringLength = reader.ReadUInt64(); - var bytes = reader.ReadBytes((int)stringLength); - var value = Encoding.UTF8.GetString(bytes); - return value; - } - - public void Export() - { - assembly.Write(ModuleName); - } -} diff --git a/src/.NET Linker/Program.cs b/src/.NET Linker/Program.cs deleted file mode 100644 index 1715c13..0000000 --- a/src/.NET Linker/Program.cs +++ /dev/null @@ -1,76 +0,0 @@ -ο»Ώusing System.Diagnostics; -using Jvav.Linker; - -namespace Jvav; - -internal class Program -{ - public static void Main(string[] args) - { - foreach (var arg in args) - { - Console.WriteLine($"linking {Path.GetFileName(arg)}"); - Linking(arg); - } - - if (Debugger.IsAttached) - { - while (true) - { - var input = Console.ReadLine(); - if (string.IsNullOrWhiteSpace(input)) - { - return; - } - - Linking(input); - } - } - } - - private static void Linking(string inputFile) - { - try - { - using var inputStream = File.OpenRead(inputFile); - var linker = new LinkingReader(inputStream); - - var linkerVersion = linker.ReadLinkerVersion(); - switch (linkerVersion) - { - case 1: - LinkingV1(linker); - break; - default: - Console.WriteLine($"error: unsupported linker version {linkerVersion}"); - break; - } - } - catch (Exception exception) - { - try - { - Console.WriteLine($"error: failed to open file '{Path.GetFileName(inputFile)}', error:\n - {exception.Message}"); - } - catch (Exception innerException) - { - Console.WriteLine($"error: failed to open file '{inputFile}', errors:\n - {exception.Message}\n - {innerException.Message}"); - } - } - } - - private static void LinkingV1(LinkingReader reader) - { - try - { - var linker = reader.LinkV1(); - Console.WriteLine($"linking {linker.ModuleName} with linker version 1"); - - linker.Export(); - } - catch (Exception exception) - { - Console.WriteLine($"error: failed to read linking data, error:\n - {exception}"); - } - } -} \ No newline at end of file diff --git a/src/.NET Linker/mscorlib.dll b/src/.NET Linker/mscorlib.dll deleted file mode 100755 index bde164e657aa75d70e8a7420831f93d1b508ba21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2731056 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

    BU*|2T;%DI4vgzGEk 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]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≫d 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 e9mxGRVTDRo-{6`ol8rW7B6i&R@;|$ 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 z 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

    e!E(glUs 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ড়!k%y-oCs&ag>WOL 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

    &UP2OtKH4+ZuhWz+P&=Fb|1U1 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

    Q2O$Y7tDV5KTXKa+6a!^jnMWs_2R3_!77EoD~ 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ℑ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�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%0D8##P4k#tp_z#%)H75o^R72}V~V#pr3I z8~H|&(a#uU3^s-t6~=gDf-%vUWXv#T8ncc0#zNyE<6+|w<7wj=<9XvH<7ML&W4Tdp ztTY;oR%5NvW^6XzG~P1aHQqBmH3IzQ&x~!xH^z1&Wb8CLnR=O=O#@8BO(RUBOk+%w zOp{GhO*2gkObboFnwFTBnO2+DnAV#%nRb|VnRc7dCaei(!kY*tSCgB`-9$7|Omq|1 z#4|}vGEGd8B!~d4hS8d8&D?d7gQ`d7*i^d9``Hd7F8=d6#*&nP3*1{mfExkU7MxFe}Yb z<`{FVInJDDR-2Q|8Ri1>Uh{r)ky&RhF;|(*W~;f`++uDuUo+n|-!nfne>8tJcbX9v zCrd9&Z_5D7K+7P@5X)%GT+3n$#)7pFEJO?4!mxN*_!hB6Y6-K%TM{g4i^h^|$+6^F z3M}Ooy`{=xvY0K^7MrEP(qsYnD_Sge%Qee&%T3EI%U#QT%R|c(OPl4T<+bIF<*lXN z0$IL-M?RdZ`&Rd_9#B27dU*Bd>RHvhs&`jostMJUYR_s~HNBcq&8?PKM^|T8>#9qt z%d4xZt<|;F_0Qjssq3>t^dV>nS}ej60IaF-Rf;+Te()TRc6h$=2-Ks`>aLQBi3Wq zMq9b7xQc1-QK+6lE&YiHKZ ztzA(|sioI?*YaxxwW3 zj#nqBlh(=Vg6hKRqU&Pn;_4FWGe}i))P1b`T-RO)fd}T1^-lH9^@Hn&)DNp4Q9r(ZQvKBWx%Knv=hrW&Us%7qo>1>v zPpqfZd)Kq-IrTpE;(EV&X?;+=qCTcxUBAD+sQz?)RsG%id-V_NpVq&re_Q{){$u^u zdW6l%HpDjCHqW-$w#2sFw%P{p8#dWC+qT-a+b}kQjcB9W_%?w}Y?Io;Y;v2@R%kn9 zE3zH8owr@EU9?@cmD}{TDx2A6vDs`5wkBJ%t;KfJcFT6x_R!X5due-Zdt-ZRYqt$- zSkSPrVR6IqhLsKL8#Xj-Y}nMWxnWns?gmT)p@Gui*+6SxG;kaE4Pgz@4e<^88um97 zHWW3SZaC9$uHiz%l?GiydBfF)4-M@NeH!~V4sM*=IInR*JC;ibiE)bYpy@rZKfKvoXJMUt?k8@y0Waml`iO>Ke-$%Nr{i&5f4En#ShFtBp4s zA2vQ}eAD>0@k3)fcqjiNllZRrZvrMn$)^wuj zeAA^ST~k$)p~>82X|gq4ZMxU=psB6tWz(Cc4^3a2I-9;VA)5hylXLTg=Jm~+nkmin zX76S}v#2?!Ik-8jIigw79N8S-oY0)uoYb7re5BdhY-?_AzS(@I`Dt@o^PA@O<}b~i z%}y=OEdyGHw~S~R)v~%}P0RY0O)a}xcDJBgur0(EQVXSp-ok3(w)nL0S_Cc97FkPB zOIS;EOH4~#OMFX0i>BpJi@C+pVr{XtG`3uAxz=){A z>`1$l-Pu0aKEyuEKHNUSKHfgb4)B|&+UMDq+gI3E+t=GS+qc=b+jrV`+p%_n-PKOC zQ|uhOk6mo{vrFw!_87a`o@Ce9GwcQSz4ra~BKvXsY5Qe+vAxP}u$%2xdxO2%-fF*Q zziWSJe`(I=*#M>&(_!t#exEwJvU5(z?8Lb?c_qt*zTz zF|F8ELaSS=dn>V()JktRW`YgntiRoNQfn$W6l)wE`}=CtOu7PJEV z)oaia^i~Xn*#};mmJuEi`nu^o{vgM(|KMEYyyooURY)pit3z%?Iz_q1$Hy;Knbq}4 zUy>iEwB)S9N%2kuU%EF#$E%l&RbEMGOgNYsh34zYYV3h1h>x; zp#u5`ehhLB`4%!ctUw`*^ox93S2+47Yh#ty$m5o4^BYE6=hw;q1`^ zl!Ct+n5+iQCf{+w(Xw;02LY!8SISRmuo<|F%)J1A%@q7`$|Bhf#rm}DOft@yc$2iB zGRpHJbtP>FEs#Ouhsa`Ocf%y|GjeqVK{+`xHD*J?xWun%yR}>MYfzt2{lV*?XyP)) zS_YS~g7w^Ii0F_kHozVb7kVhNCK>@9PEX8KxE>&5-I36_u*(q_QfFd{@tY}6JsX)q zuj}4VyeA2di^;*al3bDJy5E>GJHL_GY;I_$djoTa#t!b8@MuRE(Ij zp4%6jgiFI6@CEp-y1>C{&3lgF=F{J$Y{ML3y!5K}Ud@g6Ef>Wr_a|g%dlBXS$NimT z!E!$qabulqI;S;{Wz)#?Sd)A^v3FOwYUhp z*gcAvOHHK(Fpe|oy!k8l|(Gbi@b$$i9VG18}~F9;IDnkJu2KK3ks+U zS`+dmj29jj?yTCcTBlCdRuw$NKf~`J_z^nX8c5#cRg`1Y&&*}4%`AV`KK3b&-lv5B zRi+6D4_p_L5#gxVuSfyJkDcH(YJJSY`1A3HRE|)7$}j0AEhqbG?y$Wt33=eP%M|YV zkY#Fm!5cSk_aUCW*=M-5+%Dlv>7Mw9d0f5|RFs>C=41V^dvOHvBTo!nK!3|T?6rz@ zO%f7vF!q2tC2JAt9@&|h&$%fD`0E;io1)@WXH`#=P@0|TTe6#|Pkp|{ywvo9_F=Qh zZDcP-2X`%Rmw3MPs&s!SCc+R^o^VWkGjnFnFE~$n8`D9fLT|@T#$O{opx$LK7vzd7 z{OuA<=vxIjgN@Jg;zhWj6qp^v+r-)Q84MfK=CdI$g*;k*MnOv{L^WW*?O)dcvB`W4ltYZo)rCQ^d$? zJ_`&8iIDeId{y>}>=$__k{SPN;#YNf@(|4#jW>vp+nBRC_gQ{xLH^$U?&~SlQTsrA zuJe1w5wb%HBd*2QCg0N_h}$UHUVB4Ml84cPLr#VyM;=d}j#-Xt#|7e@-QP3)z54Mg z1o!FhYINU_$Rj$k@M{B?o;vV8E z8HKDB+;2YN(w(7~BVRCyuKcNG#3hYf+uG=d24)?F_!%167>7**MhVql= zThDN+m8M{}vL3Ji{stG$L=Kfx!>!`dd{^?O@a6nSzDbZRnJ%3zjg%gg2FW61%AnUl z8-lk6Zwn3y&J0D!ugK#gdMoBB)QZt6bmBI3VA5m|=ktCxHs`0@LAk8lv^~}G0CZo% zD<*;4kb2B@CAL2_02=S{m@yElXMSV;1Py`)LqnjU&@kwrW;iqg8VQYpMnheyG0<3O z95f!%vL`@pelE~N=z(?;g!T&Ya>q}GQaE%UiSTD=nQRI)6`BSC{EY+U)1euVe|)vu zXpfoDENC_~2bv3QM9qUZ*lnaYoWY7;APGrI&GoJh{z&7~&CF1*C*)T0QQUk;N}5F* zN?!migcd<0>95dYXbH3wS_UnL8gf=ZE1^};YG@6#7Fq|bhc-aJK^vh;(I#j!RHi(e z@|L~@+6u9i+o0{xI?4`cC$tON4WS@3gn_WoGmmMiP|jdE4#GnO$Q5#f+@Ved5h6jW zDUbN;@K=OmNlT*u{-zbEKTuoHCtXK_pHFVIi>${ih3^I4ZsE(o*C8%px8*glY4M9v z$?3)3rJ@kYB^g2E=DOSc3ZvQE#J(pW3k9OfqBpXQ;AYQ;m?-cA%Oi1OdO9C`6^0H< z_S6h^bs!RnOllwI9`C!{0GU1PT-?(=4^Z*$LiZV@fs`|prPLVOV&*;XbCM2aV*Dkw zN_%5Z4EZAM9DOJTfm?tZ>Ar;MPW*{Nr+lI$dj3vLqv_~Fyb`=dd2fWzpUn`r!uP6R zvanhBP}JpjGaxwdOz^4@r|2UIFV*jpwk11ihHLPePR;K00PW4JMqY0*(f@!ySK<{| z7W^wwmwaXYun;56c#ylp(iJ$Fa587Tf^BVTKlg_y+GlfW^JfJP=QJQ(#B1*Y3H*y1rt35C+i&o%C@-_Q~ z25b*~7~_;UBXvP;oa-kB8S)8;i2(Rp*2P|lYmZOSP@r*wYvS7yhI~!5C*+&@HirsD zqGWg{5V2>ic%1*dSeHG!a0gQ`o{zlevPSY=h&G1hhu6kum{*k(0<*Xx-a?IJo#a)B)`rO>4^d0ekQ)sG zH(Wi()6Yugh2}=oMQl;HXcnh^(r(Kdoz2*rh(0Vj8GJtVqV_h94#j&{c{lk|MWe-o z{htIN6}@9Av9FVQr7X%4<#iOu_Nap*g7?WSQBLU*d(!vVRdBWk;(94PEL<@e zJ5$W`uMVmJ(b7MtKWk%A*D5W+<^zieqo%+ch7TKD|D zd$Kq+f?uUil_Rs}1_At6YeFW4riJ-<`vTGgUC`5@<2i)9;yt&?uGC4QeC4sIcugPF zZu~5dMo$!t$ynp%!~V+tCY&Sk67LC|8$B#$Rs67&%{i;`$Gcu;&fy&6_l@#R2+7)y ziY8s9U89ZToRt$I(jwRsCPxrg@9$iw*KB<}+51Pq8iicL@0jm^Yba29R`-zjiXV41v4&dj>7#~=jwuMLSg zgdIqb6MkYBuxI$}6_y3029AoVh~69LlbW6OAwM$yBsvXy2WKR$p}I1Hyo0?@vTdBn zzO}p?Jeohle}i;+;Eljh3SDHcC`97SM74S*N5kj%zY1UnZV5S35W!31|4f?B$%z)> z(}_8xJJfow#cT;@rErd~N zL^?$I#vD|Ysb^#{3W|tV_YA@Ogj+>GyT-xaU)KZp{p9`SRD~*50f>se;WGI?{t`m2 z$6Crx&t0^WwAq|LxL!W1g`0$Z10`X}5pgj;C4Np}WPR9kk@5$9AmbPV&HBRn${NCd z&EG4rNbboqGL7W%af1^*aUS?u<{WrOzuqQS?$mko_F+FyL!|E$BvvqY8y`PUN}B{n6^!*{V^AziSq0HG2nQ-lM%B$UU2OlbPlv;%pR-@v985Dy}O& z#D9z*lWBV`7eCHPjzjFd?^ z&bhbHlZgw7pU6Tsi#J3NB9x0BO6JI(Mcs@amOx1yo-zpCf*Fjb;M2)RXahMZ!NJP; zQNv^UB*Z4HNLiI~C}(K?TuuP09lf1|q`aoQp>Vt!xt-zzesiRA!rP)9;(pdNroGP} zh`I{swPG-CI1z3-K|{FfK8M8i0QhftkY!{mIiJdg0+@lU!z`iTkZ`I0^w4!-OCvB! ztTI=*J~AirNR*>$pZc--i&~m=CF!Z=X6ktDChfJHC;6lBy>YV$Qt;O-fg~h-qZKlQ z%)#t%{#ZX_KtkBy^(s#rnkg!a2bW<>l~O`BQ{_#hWD#L2HB82h)S~!OucR$^GTAih+^IQ4P_i z*gNqU6;(AM@ur%cbRy-b=4R7^xdx@v;vVOs5;Nqa|-1f+S?oAlvq30uR#@C^c*=zZXk zAY*h*>YVgzsA|kMY_w~C@vGrdqKFXXIpvDT zv9WD&GS!2mAWdr8w2a+3C-b;?EQR1x#h)dZBODN!7qcp1p6aOTxt6n+fxFB;%hQH; z#SKh~%JkGuU?m7%`3a#q_a@SD@(g+heK2z(o5r3cfh0Eqkb(SAfd8JG!e7Bs?o*|u zjzrzZ`SV5zdWEbAT_6`hr`2uv`EFR^1@a)u5Xybe^~@-*;okGu=eRn4yx^2@qPS4p z=r>)KB1@Ky2^bQ3H*`+eB>4*Y+!#SjpV-B!ff|P9g63k{r>teUt!O@l#z__I4O54Y zOdOdsQNts5dJgn1kEUquWyeVp$+`4!&TYX&)$b~#Wokhzl??={|gDJzJz!dJyx%pW6ID0<@e%s)ud z2Sm1?9>54J4|WfE9&$M>MSfh)2;UPiOSv#g6Ma4Ud5kvxv`Uk>Jmoh{l!l+GO}m_y zs6DJL(%Q9%Eaz-(PE+pKyk>kjaSTaJE+aPxJVbl_CQC0%V-%fH_dMfhM`^#&+gL-n zA|JeO0&j`nz2JeQE8uwG?$F`#Da!GY>!UtId&MwSRjRmDm-OD*=W_-y@$qj`SZRGc zXMo7I`ycpt(xe4SZd{9~i`f{lG{HZ?1w}+X!Q8@a#YZsvuzkXN#Z$FO=rQ=EZZ)Jr zkL45;WjDovI)t{7Uc#Es{*7JA`M?=3xgWSP*btEsT^p@UV5@vo_f)Rx5cLQ5X7V7K zi2jl}&_~Oo2&4TPLtW#DiCxKevb(aEqm}4;=upBWk4xm$jMFSG`>WrtGHURza+LCc zGCS&MOkIp)TtC&ZXjE4$DSm=#oz|comeaSuv!EaG9Hqo_6ZIZ_ z1mm8UgYPtq1Zhy zP_x*(0zO2UGMk7xW}W}cf;XsNNQ3CB*ipPE!P5)U@#Ta{_mQ6C7DmHtZ=Qm8IUk)r70=tnV0$$^jv9RvkK4~ZMeB>Hu)(JTQgn;in}@R{P4+C3IO-|ziN(gFNazSi0V$zKQY3u-d>jSQc%J-d z=z?@)a17KZa&zR0sC6lxDY4M#oH!^RN`QVxsh~UV!L(uQL`V%ClLd#15|g0b8glL- zw;9BC(nOE*SnEgYJlz`jPz7p-R6NzYGW+ zBnrxeWT6k_T4;WF7PLG5PI5Ms1LZ>Gv^?ljem+zH?SW$GF@n9&8NYqde&|f*3H$-* zAXEr7aSlPr@PnVyfXK#3fd9$wP;us?T=||V_F+ixw>`QDIs)w^9)*rUmpuJw$Dv8= zWOlI6NuTBX_xz>84WjF!aUi-g#_x`wSaJd)OHV@0QgZ+*Bt85TbQ*daNmtdSoPoBb zpM}O`orBIpzoBMhEd-(Tk0l!+*PZANx3^^HjE5;%A52!ibOC?X_sV_q3(k?;6 zvIb{opa!BX=(Ct@__c&z3D;ej#4AJ&X&eY5wU>Sws%E&czOlU7hq)g7bMW=s(|YjW zBTga@b&e}kEz0k+cPAx^ze$oHS($cB$dXPB@Cg|a-Y<4N)VYq3Fb<5b%{)Z{$!en2SYB{(7(CY>wI3VJ4g5iwfns@xN`OZ|&> zNcJ1Hg4V%G;P~!e3y9aI7x z@N8v{^iKEg@-BsLvdf@tzU9z2KX0iXo~l={BeV>Pu{dns^C{vx+9D8QOs5kycPz zAUotOIxKmp=#$h6jY><&yb4`|u0uDV2*pp#@nWt#Defk;&)tWcmV#M0_fcV$$^?;wMxrMbbt|*~`0`yowhL%qr#Q4T&^X}zi;HAnQ1Rja-j!cR9 z66Y1KQvv*K;>2UAYSbfCKlCl=HnfcNlynDr=Q)l>rcI{bh3-N3p$E`f5IpN4B$n06 z9zkD%A43Bazbc{?_ad=TPoSqziTa#6PV)?U4t>ZTkn;j+gO-V_1F9pe5nm(5CSF15 zQI0q<{v}jGxa;qFq`2Fg>DLX+_?|J?y zp|z^9>08k#^dhW+U?XKxFEC{sq0cDall-y5YyPt(C9+GQOXN=?p(yw0&oN}xDRo@( z7|kV3otC!u0j?k6o<{|l=q+P?5LWqrfuaL;hl~r|9kw?7PDE(boWyFichbEiTJrN0 zD8)z9kiHQefi2^1vc7-N}o(MIDri2SsYg4wTtV>Hz`#F71#uu$eHZR*Hrw?v6Gn+{gcn4I6l!pe$ z>G)Dg7InGkvN$_zNLF&*?LCLQLc9awkf==52^0k*!)zl|l5)xGsVAtPsY;rGzS3(Q zOUkmc0@y+9EALZAx`h=ZJs!S)6`%!TCYs?9f8JH~c9@=R-kI}-tCiq4AOUQ5XeDDet zPYLk9ot?ZSIXr!I1_q6Bf9!dfI>*a5VikCuJO%B6xkai{_!78;E>|=uhkV=fI@OcC zkn@%^oBI^JVzWb-B)TZRD~Xfs3UiRpl^>8#jJy%MN)@9LC#k>-Lkl&iR9xz&3|kHq zawx1Cjl>$UX7|_RFBB4cjjxA5D{K=D@Ds@%g!~*oStHZbXustkqvoOBp|-@=rpoa* ze0e?__#x4Ih{=pD_G{)X@er9wh6}$Gy*<%6X(#GA?7#1h5f-?wcWEFNR1D6SDa68S7RE##o`W$bgcHR)x_ zUe*XsC-m9fU35!6KLy}_|0&(5y+C`%h!zb;WuqrzEciRFBF|TzlX>2}nxNd!E@*pl zb+S;i-D|D)`oQRr`RNfEzI#u5pAtRxE0SK9R)q`=iwr*-mK~m(*e^+*F*s*e&I;Te z@?-CLoL}TGF_rjWB9TF2bTE#yu7!Y~H;H{QlQA;fLf6$Ecd269Vg{8pfW4G`fL-fT z1zwsODVZFQ96WL#+rsY< zWJn@H#zp=f^H4oFIS_~?`%p^vIjVYBRch>nf8Z|qD! ziGEl9SoMpBs%g%hfQ!IAC1fz7nKzgR;Quc^4)yWyS>l@}p6=%vgbe;ExG{KOh*l94 z*%G-uYI{tiIwpyknwWYrwG!Rn_R_C45E0j&&`!3~u$&^zeY^+pBe{^SWYE3Wgo_o^ zVxrPcdLPFO_e5~=i6zV;ub+H^d|Z5a!Ycta!NrlYqU%*fNu4P}Q+KB3rw&dZot~S1 zL%TG0VEzykMdlgY5rPf1g#Hp<6-`Q(CbuUK)=Xos^Vulv!2ZIyxo0!>E=|jS7v~ut z7=NCALFowJKmXJ#$&Oz^SnRgcV=<&oI&DHiRy9NgZmI0Now z_R$1KR3oRi=mPpaIg=C54-$-%&Ir1d8kSxa_Yl00`GRIg6%y9Eo+KV3y`kfocIHx! ztIv|i_1ZHzw{qrU@c2!xVeZHdBGaMczBiA3i=!947X2(;E*%A5KYU)EfhF{IW4mvo zeIk^z z6A+pe*+Ce0(s5EIbC70so+l&N-=4{E-{SGXQ^h>t-QgX`xzArKnCrh(x;Q8>;zZ<) zq*2*Zalg4oaJKnBkRDP0o-!m2;BTL;k0o>v9NitMBk6g}GfY>n-W~V&Y{41XqM+M~`O4dojOeq` zN%2Dy`fHx2b!MmLZKj@Q-(n9D_xA78@ewV@`O@$VJZFrrgXq4L8_bOlR-3Y`vNz@e z{E(h7F$C}PS+zr5lzlQMjCPE9R(3MrSbT)$H|+}iYMOy&Wn#2VS^l_9DV^9kgi8c3SCwnA?*+kCIXf~xEl?Z0$C+RzGzL73EzE4r zq-YPI`l4Tf0G*#bar7*vfU|)c%bzb?9+9V*4gY@ZaPH{a(JT89$`x~tknZk5@*$ri zn;C&Vfr2SwDDFXmzv_u9Qu8wBQf?`3Id>!`h>GTHjoKA|3^fG2nDtmPBK2EV-yHXx zoE*H{ULrYmq3SH-lW(Y`F?lQRsMbB#m4xu;CHZ7Eqd!ol)7lwi_6z1d&z@i2dGvRjKr%6y~rzld19Fi;QyKwTpD}^gp%-6 zZAdIqOSAfSeDI#bx)M|z#0y!D%5}w%ekX@g57KXVF?cLCo;ya!@;fbcmPc!Ra;N35 z5;O?cN;asgGv8o$QHyB1>7T%Bqq`Uz*_+sheDr*p&?01tcKPK?;{x=dGs19D?r~U6 zlD2ZseEe;pY%rI3vyC~+cYczX@-@@qa_#9U~k3=h>z4A(6Z}oetnvhbu zX9#+wca4}WpzskCbBN1soF9ztN=oQVq3N zKev^?eA99AjkUA*<)wE>gyMgruZ~+^8qPI7e`R~t+@^bbu*2GEyM6EVcdUosHa$Dg z_WsRZV--C@A_jDvf9i-R|A;_5`QU(f(TPA<+YpH751Q{>z1aogmfU~lh&cDg0r9%+ ze6u40y54@fq^=g+FWC33xp05sfx?4@g@uO-e=j^-SX6kV@Mz(&!sCS}3QrcEDm-0y zrtoaxxx({>7YhFkDn5)KJ)1*i;D5v7RjN%l^hB^S$_kPlg0o4q!eRz;p9IEbsqI zmiL8#S@xe<-WPOp;(cd%rvmoao-FS!$cf1R+br)_0I$M#9?9bNf6el)Yj6FN<-HAX zH2z?DFKPdeSl(|TNE3q{V4|^qpXuG<@5Hc9|1Wvo9q^KWP4m9xe~&cwZ=A8z87?DV z1Jc-j)Qn_`ff2EFg6Mui=fABmQf6V;2DSE0}3<`9Gbr zew?p7{^xx4Hzw@=?ola@Px{yAtN)~^6yI5_|I5QtAmB6B|HP&E|7l!`o=ks>K*XEB z^JM=x(@jJF-(>o80C6DxGo$a^YWGCkZl@vcwEr`IgB*=2|q|AGmyt^H;DtM=FJZ`$9sziWTr{-OP2`=|EL?d|PQdq?}1_UV&hFwG-vH0wBt0Emn{UvUgBVO^AXX4hq!9>+;PXx4()sNjppd@{ z>YoB>1NHBKK%h+t+TOc>?JLg1+gIp8U2nj_WdZpIkk^8Ify)ZyT9=K04VeJ634kZL z^V@Y$9|=mg0K;={#63{z18Sdv{3FO;f_$ONO5{41O@Q&)73jHwC<~q6IzW9CD0L!2 zkYLP8Dm-Ro1*mlft<@kOkDQ9ELo7x*0p?{#1O?RI0JTz(2Ou>ry}`A2=eNF~^c>_9 zkkdd+hb2Jw1JLyZwO>H34CH~xRCu4N0EIqcLscbc)wwt#W&+Iyz&73s!9|9-I3NJm zK45cqM3jKGS)lDLU^4H8@IlH!8w77}0Ob3K4F&|#5iu0>Itd`3jqHWk1;iKGAJASq zB8Gwb$)J7?sM`&M2lnfp;XZN@;sIEjWW4GCdN6`05QyPG(*?*}poId$2R%4~`VpXR zB9M8Y4h=*AZ)ds&w)@TG;L;D-&t)Xi#bpxmXO{&)d%ephFq#_>q6^){7a)ywQMn|$ zgd+PO99{Y&`-3cPI-f!qW(jCN7G1c4qOg4P$Hb%x7p(DDhyqseml3ff~_l3c!l?I%@Vhxf1A z03v${!Tvk~xd`k_HW)JpwqVUAptZ5agcuA){~0+GESCcQZV+n>?28+SoWVr?gm{7& z0_vwAXMyE1!0p}nZ3}312fvrRV5GITz!>OS46uzDIRsJkvFn_G?r0#t zfcob^`~i+$pgac1d{BM?L;~yAn_&I=TG0Ohz)3z9W19=Mg#5=!jMK&NE5JbQS z?u~2$^Fa<~b{(i6h#Ul%$~(V30b)bGK|TZAApVRq^qo_9=|5e!B7mI%kvK>WPXB!vh3|voe;4>R9PuC&c!%j9 z7=`~i;(-ft0rGpCq3?{sJtH2Ff#=bXf5jR4=ZFUjkt@OcqaxurLpMQGw156afO);; zAm+jE|3Soq#~|W?@jr-o0J9#i{}&Mt&V%#(6U2WU@n9nIpQFpc5f3PTMm+cmz9at5 zC=5qDnDQ?o9{l`o5f6fpPmzB{J^0#o;y;Knbn@SidceJToF+(8{<|@TwiT;;L_PSy zEDT?7{Cmv8^U(h{?*xHwf^Yx1R~&G>zs_$oApbnS{`D2d_jrGu-#+~xU2(vEz7O&D zD~{2Ci}x4;X2?wg9J&8|#W4mj^?twN_}pFwdZ2@-8dUHr?-Zi9V|%-^BLdOSafag} z$Nr8p9S1m$m~{EiND4mFzh7f~ZHLGG!DIRTileiAIuZfsD*wM-adfqRYlqKrQ-Pns z;qvI<6AnHI;F+zC4-ocmgG&*B39}2?$I;XsWv%vPF>XZ29ia7+b#~P?$a<~#D3WyEBf_&J??z&LyC*mI>7$z)WKv=g0qtI{4UMI zc)fpk+qTA#l`_F^FNP<1v0T>ASr;g8d^n)J!IiynkNu6qi$}febyfZD9WeAk?w}Bm zqiw?30}pQ~+1b8gy|{S!<_iWy`t1Clo;=YY0`3*OA7+c52^+sVJ%`sP{aN^1cC&{b z0zum-^54Yg?`HT25dw*q$e+df#hcIX-UhhMB>!NAVk!cua6mXH`T*$#)+YjS2J5{M zjtX$ER^bH15!Au!NRT@L83F_Z6jBTVG8zcn4%bfr!UO{A{d+PVQC8#*+Tm?k-Fl9S zfgrz#7y`EG1N!}*F9UTyA=Y>IQ#uaD=mgds{tav2?rpzg>IK%thzAGUy6e8<835Kn z_&~*4!~lS;pJF7~9_~X3>U#IkgK@+44u94m5xu(Cdx1K*U$_r=|KRn3-Qzof?Hv@; z{;UUAaf&fOa6on=`vLu#3U9UCKL~8=2pw)s#n#zc_AV=n~) z+ia~frpp0A=mOU-ASZTtcJ)J0y9Ob6pdnB8X*EFQ+Na7Lo zk)$KZM^cVxj-(z*JCc4R<4EQaColpMF-*~`dz8M4;fRDI4hTH3GQ7ubpx#l@8!=7s z30Md|qJBW01Kk0j9!B*u5ZKZ%TDa_oaO;|baP69n^ym^HC|&&#f&Er@jYOn$C3lrM zXuD=0(z`OcGP|<6(g3FHuAHviuDq`Nu7a*TT^WeIU0B5L4Iaz+;Heriu!RdaDw9F( zsDO_sywC6qhsF8NGJK>!U`d5(Fj4^mb1B9F!2*HpFt*#C@R9m{6n}ULh+M1a?F7%p zq203$*{$~zC_5=K5mbc|(Hm@w08tj#f*6R1ZufNo`41Tm)?u0Wr~D|x`G7y${#SM2 zj~m1f0czdp0;nqj^1n*GKxKa*6M)PI!T@3bl7s|xV4F3)5r`--;D|8@#1arJQ09$5 zyfh;aw^EUavMG*;xUIbryHf@r3S7n@wy#-)$O-`pApM9E0I!3t5b(7q3;|wu0s@Z< zx<>Q?;tT{%@V>4FLIwi=CzuW74Y{5fJCMetxX~fzcWF z)|VesjktdMSNIR5?ta#S+!II`kUSt)fLsOg3CM7;{URV3AmG);e@igNp+Ibf->cv< zj1klL9WSg3AG4V-Aduj8IEdr=3vlVLecWgNz7Fe;0%Fs`t>5clTc6JSzTfcnu+F9J zU;z?bhL5SZM;W%wX@Cc|7pyxT2=OdffCTFg27>X0OW(_|-g?1z8^ijeffStp3y@&_ zfk5bU;L`UpTqg#2;QR;PpdRD*gWEwFwgcP_&(G7}4{`T4LqK_7GgyEG_t9;y=YQda z?X?ZyffL*g+sozwm%f+bxd7w&F*jhm;&iz6dpm5eyJ_F;1&(6pbXpLhrM7taDvAl3Iy{EE`2X|+spSad%^PybE3PsTff_0 z$NnnAIO#k8(OzPJ2TpMRu)TVg;W|3N^W*rA0ObWe#_tQtm}`I83!Yy^J?2NZy}regP#5k z+Y9#ZAM+cYU;BC-FW6r69>)vTgZ;awy?XjLY_Fc@8`w^;fB!gMu)TVY597o<|C_yd zpb{h)JM53;J&qr2FBs2{@!|Q!?cv|ByS z)${z)Z7*tBeeE#a`->|**?F0*u;C+DSA?)8jjxTJlp8nlEzi^-uq#yQLaOAJ? z;rUf0?QZUF@3xokUu75r?BD-juibyO!+2r;{xLpmub%!4&#${+zQPIa1JEE!uVE_JsxBL4M;DHl7 zUibN{M;Sg&lK`F{#}}So`@sBx6Rh8DuM6G9?lO$Q2Iddk2Ct6!Ir1l6U1Kh^wla4g zJNCFOARsrTx_a}($jE{Oi)DR>TpstjqhrKb66rJh$f-G+~!KRZNO zt!VDz#T4wJLmwI*Jz5OCed~PR&oBMh)vFTb!iD(RBSx%qc5)h!X)@uqOqs$esH~(e z7(IICGOc!hzh1ot&Ckuf@Kc{YeWwl`x^$dEk$30*{WY~OUQ9>LnBfy~_H6BQnQZUS zzJ13{h>F@noI6*#c^WT(%``h9)0^Zw)6e_ zpUN5=13Wa??Iy*4&J;OvFYcZ*@W4%!&hlE$NI;| zN2#}LsW!cOHH&xYQq#=g!&e`^eLGl3rQRRezyE|2H*N&nxO;b%_o78^(v>Sw!~6Af zN!z~t#(>_v`)!*#m4AssdAPTt!n35QNx1R&@z+&M=I<*~Q;Qa6W)?O*e7NjgaByPF zlP8N3&E}25Wy?s{1%iwJ4}0$&W<}Ap{r1c-GxQGRoHIxUMZiE-vJ#bG0Le)ZK`<){ ziiw~I3My$6hBV}ybCLl`l0ih0B1wW_pWodx<7|eA z&YpcPL)x@CdM{hH@8^L7-)&H|XzwS=mhD?5Po5%=PnmN0`2`C$kKVMY>Grc{3r{$D z^p&&y`i-lWKYzhb8#X-Je&xy|!S~-ElK#E-2A}BDXZS1Cs?~aK;ld3&I(Lp6Ua#K4 zn5d}e8^8P#ktbccOzYaWpVYllrKe{<{`jqKOP3~OA2MXbXKUBCx-W0u;>ExGa_P4x zPgc2b^JeB!W5&!clriJod%AU7KKX7k>-upmTZWsIC^0Z}{P;^zAAB&Z^@IsG-JwI@$Q2A`@3eaLp#x{mRCv2qtxXAC zyDk}2v*!A{KKm@bO_?$S@}*Co@#XmV?bBMc_^sFS<@-x#%XVJ~0(ct&_zVL05CRB7 z04pJYxe!1L2%rfB5Cs8DhX7uM0CGYA&p-fYAb`&yfQKM}FCcWqVSKvoFg0tB!X z0`Nls7a@Qy5Ww#cz$p1@20PP@v{1Ctv2;fHuU=;-LFa+=|1kexyI0gaig#gY% z01Y639uPoD2;h4NAR7d*5dt^>0knhwK7jysK>!&b0PX=qz6k;R3<1=E0G2@j-$4LZ zA%H(1fHe@ndl0}Z2w(*SP!9q~0|6X|0M)0t9eB1n?LH@CXEu4+1z00r((* zo)Exk2;fNw;8_UZ5(F>>0+EA%Iv2peO_|2LkvA0yqZ&+VU0KFlAz7RkW2;edVuo(hq3IP;`0A7Ir z#z6oDA%LS0z!3;w2m~+~0vHYf)PevuKmc(Nz(EKg8Ul!b05U-UlOTYnA%I&DKmr6X z0s?3S0ThP-mO=nkAb`vezo0EHlckq|%u2%tU$5QYE- zLI5v80K*`Fn-IVo5I}Ya;1C2*0Rq?r0W5(4)Ab>w0fCCV~3<%%_2w)ooFbD$J z3IV(d0o;ZFT0;PJA%LGDfLRd0UI<_!1TY5z7zY7Nh5-6P0BazC#Sp;n5WvR}Krsm5 zUI?H%1aJca*Z~3D0|A5}fbSuI%MieG5WqnQpaKMt6#_^D0c?f<3PS+vA%GkZz^4#E zGz9QD1P}`WWP$+RfB;TG02d&D;t;?*2%tX%;6eazK>(#8fLstjZV2F62%rrFFdhPE z1_9g;0qlnW=0gB?K>*)D0OcTnw;_P$5WsE-K>q(D1W*71_zeP>3jwr+0J=i}+aZ8e z5I|K3paBHX2m)vY0qlYR5+Hy}5I`IR@GAsR8vkvQ_ z2;cz-;427V8U)Z30+<8=)PMknK>#BmfG;3`DiFYR2w(*Sum}P;1OXI;05U)TVF=(V z1h5AJ*a-myAb`vez(ok)X$W961W*S8$PNK)fB>dK0Ixv+4?+MPA%G_#fSeG(^AJEg z2;fZ!;86(R2n0|F0w@Uq42J;Tg#aFg0Dgi1mOubmAb?{Kz*7)_9|AZG0i1vUDnbDF zK>$7opgsf;0|69)0G@yV)ZqJOt1Q0(c1mm<<7>g#ea800SX_q7Xn?2p|sxFa-iw z00C@*0M0@HM(4kPZT9 z4*^ty03L?`mO=nSAb_%eSfb;s={znr2e@*!R7~%g9 zg#QZ({~HtjUnKk=M);qf@P8=b|82tmON9UP2>(AK{Qs5kzb4`Te8T^y3I87={4Y%S z-<95 zg#XVF{+A^DPfPeeitzto!v8M_|H~8pS0?=T5&oAW{7*;tUxe^KH{t(r!vCFw|Bn#< zzfSmnp71{t;eTGj|5k+m_YnTyOZb0;@P7f}e_O);$%Owe5dJSF{C}13zZv2GQNsVH z2>&w^{!bzNU+Vck1VH#-gYf@5!v7Zu{}&Pd?{(nyR-aDa@IRXHzdGT6LBjt&g#VWb|2q)=4&Y){=ZB3UzYIyW5WNIg#W)0{=Y={zlHFB8R36L!v8ab|7!^U za}xf4N%%jB@V^e>e+$C@`w9R3g#RB9{%~e}nKp58?kh!vF4s|Fa4IyAl3pC;b16@c%x-|Kf!I-xB^`Ap9>y_+NO$h%(g#S^5|E&rCUBdrdg#Vog z{|^xUzfJg`K=?n1@c%Bt|2BmG`3V1CCj6g9_}`20zjW5Bk35ng&xq<#-#y(dk1u9* z#DbeSj(+;aD)ZdMLT)#50wLc<-!}lZ`w(c@FZN*S5-;^ZUG zPhNn$AbBD3!sJCF>N!Oty7E6f>+yduyYgmTecqt!=9DBaMP8b`40&1da^&U7E0EvA zTQij+y7LZLL*Df2;Z%)i(9G; zEqPC`KhL9D^1fSt-b-uAJ8AuS_pBxFn)P@3MLh2Gj~L**5YgHh5b>fjko?7nHoW!t zlJhe8E99?|zefH>#52xN)@MY-!_LTv&dzAC`kc9c#azZC6PV8obeN4UbLc;w{ugoH zPHf<7Y+x7d6To&iZTHaj8`|up%|7z|s(rf0~1 zAV166oMUay)87U9yGZ^c`OmByZ=^d*Ba1uBA`9^^w2C_$BA;?LAzRqr8d=@hhHQ^) z=j@Dp+BwAjk;vD$8P?8;jC#t6ih9jS7gflq5cRZE5pfC>a3YXMBnnA`L?bash5}`r zj7VlA3zDNiaVIB|t3YWdPk};CUL+q1GX~IREXkMR)2^Vu>!^NGn;S!D;zRU52OFI5=DJKvv?F7SR zoOI!`PWo^;CquZrlQCSu$rP^WWDei$WC`EnWDQqxvW4$;vWF`>Il@((oZ+fYuJCZE1O`VG2X3pK==FUCg7EYyb zOXuG3V@~Dp<4%=uE2nC>wR2y%jdOpvt@A+m3FpD^lTNkpQ%-f>bgB_<=hWnFr&{4> zoZ8_IPMvT^=b>;X=izW?r*625Q!m`rsUPm5_bd3wNtAw@HuBb9{2S#tTEw^Ith@RS$9}R`=NTyri%tI@Ud7-RIT4 zVjW9#U)JoKJQHOSov$+8OSf~=E_JSPbzfiQCO5ip*Vv78qugjW#*KB;x~}VU{cbup zy_>-ex|!U}ZWcGAo7K(cW_NSAIo(`tZa0sc*UjhVcMG@$-9m0*w}@NRE#?+?OSpHr zCEZePX}649)-C5g?Ur{dxE0;I-Fw_h?!9hhw~AYpfvdUI-5PF9x0YMmeb}w*)^i_n z8@LVKMs9t#vHO7AQOf<9I=fxmu5LHCyW7L<>GpD;b$h3%Z}R6+z-{mCxBIiibkfRg z?Y8-|wC$gJPqJJucNe&K%Ue&vpLC%6;cN$zAf z8+8O2_<{!>B(*Lpl6Sh%F+h_jI z*~YPb>HjKeo8+IIv`zC*_s1n|v;A|};{9{|^ZfJu3;YZHi`ka=m(u$x|7!ml|62b# z_BZ)A`?s)d^KbX>VB1MqO8m<^Klso3&-u^$FZeI|fAs(4zeJn=zovhVe?%ZM5EY0H z!~|jkX#;M+7w`wt1=0sHuw@El4rF1=8psyN9>@{M8ORmL9mo^N8^{;PA1Dwg7$_7d z94Hbf8YmVh9w@<9GEgc|I#4E1Hc*bOe4s+0V&HDJN`ZR=l>=1*Re69`El@pBBTzF? zD^NS|aG-9W9$SMz!$2dp#?+_8zjL5VplhI8fInsy=o#o0cs9^m58?hI1p@88ns)!8 z{x44XUl!H5W2FB9{{BdRlt0=ZH^}Bwb-|tV)mciRH`?IiR^=I>E_vi5E^yl*D z_UG~E_2={F_ZRRN^cV6M_80LN^%wIO_m^NR=`ZCk?Jwgm>o4bj+FzcnqW^BT(*Aq> zmHk!xRk7V_{_6f3{+j+;{@VV!Z1vb0vNd9B?0>+Y3V(kWe^-Aue|LWme@}le|Fizy z|H1zMIsQ-hpZpJf{k?_xYy2PlhkXtTycHN67!r6V@NQse;Jv{6fsX>i0>jxx20jja z!Zs@KX<&4KKPnjbJTNveF7QR*%fMHG@qr0}iGfLh$$?N{N?>YW8e3doMqp-OR$z8u z4qJR+ZeU(uKHI{;qQK(7lE6|dW>sKyU`=3cU|nE+U{hdoU<=!}0RJYBZ7209@jnyz zA#gTuE^t0@A#gG9W8kO2r8}%H5v>mbC%u{z|DpcxVS4NzoW0?Ww*TDzd4?T~3PuNG zg0aE0K{x0N`h)3$>4O>AG6gdSv#@0iW(#Hy<_P8t<_hKx<_YEv<_qQz76=v$777*) z76}#&77G>+mS8IxEEOyrEE6mnEXP(pSRq(3cz5ugV5Q)_!OFoZ!K%D)P%T(JSR+_7 zSSwgN_;9dpupV23V8dV|w#L+_#J_W}OR#IOTd;euN3dtGSMb?jZ`%A-3IyAGHSPXG z{a>B)Z>J{H$M>#psP8@B`@Ugp!+jsJeeCeh+*>?E0`gZzO_)_A3#`lBotnZxfyzheV zqVGrFPrgffsp8L+km5+iC+;Zuv+=*Yv*C`Bg#XGrO8?)7jii0FFUA+^OY3ueK917+ z()%)aTV`JtwyeHvzU;mnzMQ^XzTCb%zP!GCzWlxdzJk6&zQVpDzM{TjzT&r> zu6KX*-jDY6eNgZ0D8SXRMDN&$@Z{bF5L2eSqf^J}>^$sraq2p~oW@RX=TWDx)6CH? zh+8=QotC_@+?sZY?{gRDH_wSl=jxpxBRZDod!qTSXv#FU**CcU#Fz@(lg=np7Anf3P3kfihVef^I2Gxw)_AMBsLpLq~{l+?fQ`rp2v zIn8>%OZwXHUkfk2FKXUL6JGZF;Qz+^nfCkF-urXBf2XAR>7I!6G2`p~Is5(Vzx96R zX-*=kKiTU)eLr&z_G8|k`#<%5rtHkvSCeHNkfg83NbhUP&Q&j;{5$Vw+Iao9_cQgr zsIhPF{mcanLi!Ug%b%pf9q(th^qT*v?|*wg)An!SD*rb6%D!y>mVKB1Ho1S{G#>j% zf!B=WdWGKq?fp#KzyIp}O#A)o|Iz!Ii<0#bUeZTcYCjwDzkWY+UNT;}=r8sAnR@?P zNn=XP`_~#@VstU}221-``zn{nHgr9bZ5R>%i!01^K)G}g-wIQ6?J&8yw`rd5C>OWb z$HH32vV}t4mFgAt_~jB>q`^XB@WQlsf{(Xv12A7Y-k#0Ch?%&9nuV)qHrP1_8s>6x z^E;HhT+{M9W6Hf(Yeb#O&+Ynk&BD;(h3DF?d#vi^jF($a9#nngzNhlc7!wzJFrw{S znN|(1P-Ok9ftLNAT-EoFxyRm^8gpc9zsqCSuI)DV^pLu%E^Yc^ZTcM(0!4b4K3690 z?S2i8Opkx!(7U%@Xx6mam|mMIOxsdCDt`0ptyf?5pV(A)#MFIFJ8X;Ta@Sp12KyEl zuTn5~+24AVZk#z-rFo0zeVvy3y1!6%>$*1wm+m`q!r9dm8+Oh$tDH<%1E1RjfZlqiBiDPmN?Kd3X~ILv z*CDO%!HIm3R4+e@Pdb*(XdP{y(0bdy8`1jey7(=1 zUbeFYeU#K*e&5GBR+)Y`qVv>Ve$*s&9B__8lIq3NC7mxF+RaPGD=WwLd;hwg^qJ2GNjhkK6XH_h zWsfhs6bI-$gVz%DQ8N1KJ#%xcc`Gh4`UI;jE9bFAuLC$@QAI-m_OS>wBVP zGS-S)?6^dDotT(-{Z@O~xBa^?`QshG(?B1Cm+X7^AwEdb&4-L%sH4R3z4byLgO~I@ zh(1aNFa2)B#_Qn7Q8tnE-`q? zAMH3q_SGj9UeZTN{mCDVf9qKM*<@cbUa~LycRe0nN%o@l(m`>6jhFqsL-RJj8&O;F zm;BkBn~7sPE|Go7ziqs1{}zAReCOd+DVgtum+jwvj^*D<1~2<}VZzJi8{sAYw(YA` zoX)oJVtvf9hZpu@?90QeOme-aZ>i*C=^+2M@v?shrhfWtO>D2W;#>K*jhFqqF!dvU zN`Y68#PfBI>?@&j^0DwbQ7k21wtovR^SdyEm;Jji+4nSyUu38H-eK_4^=9~fK1dp0 z_Vva>9VH%X{CMhZybhv|lG+O|`L~jeCGjJZ@yg0^tLc1@RHuFn-$-BY`nVu*t#vH> zYGsWt`)b1aXr8JUf7$-+#S;xFB&mO`ul(EgNBet+`Z4}w@Y40$_Qz?Ky?A(WY~$5x z2Az;Jp7^UtaUCTdYklS4vP<}5LDKnZWB)Epc-g-TQ$O-=CAIbNYLmFH zW8r1n1gtLz2kJBuEk-p`VTweTm}oG1htsulR>j+Sd~FQIdYb%f4Q!5B)Ao^VEJ;q#pVxsl8`kJ-kD& z-op#~F<1*P!!IgRKk_GgeQp1ieH;H)d(R&_CaV=p29kuimUNzb#<0XIW zYT1wQ()C+O?G=AzIFqce7f)uqW_i6kg8^`wb!NY47 zg(Rb|{M)v#B}EhK)tCA)@wnOxFZr|fC9*GDAN3>uPJvfn3Q6kE!wY{>(y{uGKglk& zFZ=3h*{k}Ie=Dh8_9g!|{Gs*jgFZ^?PyNWh{p4z|>y7Q-vM=M`YOj8DU%|#}_*e=_ zsuy1JZzc7o_0@d@8?UpIRh!seel7o2QhWKMe#dR*D*Gz&EgvM6sUO`ZH0vw-o`(G> zsouj2e^N4i$iIz!X?^Yc3c}08;|4EXuQiU2Ga>fxxYduYmo{GZeFfoFqX!=(jW1Dr zW$==|wts6LeLmxZWbl%IoAJe8OFDYhUSH}b9{;iVz`lNa_I)V1z4}?hdKtXrkG6lS zA6>td3|_ik8@yy+HotiGwbg6x=_~uz_1c^(`!@WdGTE2x$KaKVW1EkKmwmnT_`YaL zzPJ5b{q#XUCE?}q{q$si_{(?#|5j3a&%Ur9?Mq}|wm!luzHzcY${%#SR?>Wgmwmld zAM$S-FWbL`m-+s!wjSSOKgJ(Dyk=2B`V%kg#m39_Z>_I=Ury&pAN%@f`?uD8cmf|J zGv_h=QsIR@O6p7f$iJ1;-op$3R-KNeudR>pl0F(o^|CM9zlE3aZ_|hP#^9BOdi(D* z$i54(K1%A(voHMHoSTU<^Zim~vM>3!@dw%0!TNlVR4=@Yf9qJd%fF33iVy5~T=Ovg zr18D$Bl>8bI+lHz@0aRN^RT}^2`~A#>eOC%+0Ox_ul!qfp?cwE`?uyH|5h@6NFTGl zSt&2k%d7V4H4pi>lKK-~(#P1B@Ur7^=_~&>c*(wP|CT@M`mLn#CGu|@FWbL04|BcL z_`*x~Ycx+C3$KH5e2~V=o|F>{qa+JC1(xZm-88-0{?j{Ic&JRK#D=fxAO zmyMV0-_qCo9TtOEJpN9;-~>w^QI{`L}0Z zv%TgXKEg}aYcsxgeMTQ8^`&_jzA^gBzg4GW;bo7nbua&YN`D;FlR}ct(L8Mb7GC;0 zKE@wqU$%b>FT*z)PyA&+=kxer4}~Q4uXRryPuTt~yo`UFIq2`OXdLw~f3*Euc=c(? z2TApwzV%bt*JQ8yPrT&cN^0-%7xt%piSV+o*TPHs7{1l@c@4)((of~azm2}~ZyPV$ zzcml}x01#aUiRN%k$ttoK9mezcf=DtlIw++@o%-4*ztt$I$M$tlIn!l32S`Wm-tuf zB7J0Et*rIZJethogQR-dxA0J3I@b5?;aB(|sZ4l{r(WZzUU-Rrl~gahgpZQxL;RZp zFKfNzC-!=Yzx4en4Y~T4ec9`!dFZ)~@kjBeeg9nL_IgPN@t^TW={r!1L{gpRVXv3) z(t6o=nd^btdw3mUhh*@QKWSegyzKFX*NG{~_T^n4M^Z>qf5Pjp?vEJ$()H24Kcab< z=dv2lv+sS$d@sE0?@yYCd9JVa;(OgcH~Q-OXvbI5N#CCgUb3%NAwEb3uRHFKU_S=0 zOtdrCgFo>~;y^d_T^n4!AnW~$scvUT1m(1v)%4wys~m^e}B?E?Dg{E zKkO$3UTtYaQh%~9!++}AyFNBZ9!van)*4@UC2%Y|R(siZEA&xPf3h$6lalI%m;Bq{ zB|gyKxl>YmmD|rjg_pj6YaE@g^|j+G%|rJ`lvMA<%jlzhiR{bPM`K7Iv%bR1_HUIJ z=)ng`=L;|Sx4}#L+TRz1mx*uGUU=#Ix6xO4EkPe8jV)f$_1wnG;G=q#>v@!t`V(IA zZ-bZo(e`hZ%fFS>UU;3Le>1-PvCl?6Na|nn(ET;7i`vV+?dM~%yYYMYAgR6D*!R!n zkG6k%_VpNrB()V@@^6i!W8rlceU#Ln^ws>8RG$k;n3g=2{L$7&^H6-10x#@G=}){Y z|Mu|0zqKyvUwGO6Eq_cM&%`%P$@fdpN6Fw-zEetnwEf$|i}f+>HKy*582j?@DwSNX zd6@Th)K+-)S)URwJr7gT_?m}_hYeo3UYYgvu8-Z-Inne3V)?hqZT}Wt zy1!=Im+jxeOa85-@jd>+zs>bg_HADuR4)HE{3ZJuzK9Q!bo1~^S}z@|Px-fv*TJF` zl2k9eZ2$JIkLY9UD--qh_g&#-Ums*&(nsS+gqMAN&=~S3qp$F?{abkTX~+l3=qvxW z@v`G};bq&mhgY{`yyTD5daAd?{)CtO+l()~nv7L#GG4~NHNHggu*T7RvLeQwRVN(H z{d3iOe7`5zAB0zvb9|80UO1ZjYicjNbiG!c!7Cw-1Cq*QcPB=rv@iSqx$siFrKIy^ zUyA>1y!xPzlKNA*{ryS&sr51T<>8gYFGk<-WoSfF|H4c0p7tf;d;58}&XGRCMfLJW z`~JDg&HZ!L3$NkbQ{iRVt7l(5Xhc$b;U$08I69Vn^+6vcl?g9hAB2nQrLT$iR4@Cs z{oAwe(<$+iK1you;dRJ6^!gKC`u=42KzMaUA0@Td`kMP|8ei8(`}=N?WBYlx+BDgk zj8|5UZT}Wtx?ioNwz6;ex8Ymam*E$UuX5v0YVYY=G$mg4^KQ+cWgNIGA5 z$-fQXDxR?YTX_9Ek`I#F3oq$o#+N@De$o6?u6W#x?_HnIQ%F+1*3o|6tUl#W(o6f& z*Y53Hw(qa0d^qc6>udYB^s@ci<9qza*q89K z{oA`fT6lSUKRtPUy?9~)Cz1Zdt7qb|^!4nE_0qmX_GQL5bI|)N!bSDM%l2>SYx}on zU#aji@q_x4-I?p9`jdU>{+jVe4=>ApbdLO6>!|ixU)#S`Zu__ROa5)+)fIh|)R)S2 zKTApdd3f>t!1#lQR}#Ody=Pz8i;~(4FZs9XbS!=C>$S?Hk8shx_{;Wh;b{A}$6x4U z>`V4-zen%kg}o@LKM$`;$>Yl(4ZlbyiTvBPFWbL`m+jxOFZs9eNAZE}-@?n>FVXnI zOZRJxKYDms>!or#9`~-#W0LjN@xc0gkff{hls?A3JbgN!oAiCw+{4$v+Lhs9yH2>$h;xvF2#|xBShvUyU#SHh6jKcZfog&KDjD zmcMCT+@sa%)|5lxc7y6{Y%d!{QyB(iP zPy7D4?A?yX@6^ z;brc}s=e@%Kb!THecSJ|$iDUb+u$V~?fd7luNq1It^S15c#dtnZ2$JIfB3hO(Ko(+ z^7z8bj>mNwV3|{v8%<{*C5FaG9*SgBTZM^L7+u{S;pJZ3| z-!b>_vh2mPFUy~#!}ykoV`)DtVvjF>j7J|^U)#Su`@)};q_6bU{aCHrpLq4-fTVia zm(4dS8;(9H@M=sUNp-?Y{%!1A{%HHR@Us7ox%AZa+TbPrwEbIn>Fb@REJm&s#kHil>mIzJ!zgcg($baKCC3>plBg zn0%~p6Iv#ZFZ;6JXAxcr^^?aJUbcVBA8r2@uJUh#m-ycHZ~3Esub^b~)%{_Em-Myc zKj~}k#~OU)&jv5)Yd`N6f7p15KWzW@@M3+G)SqzG_c`0X%=b&x%f3!9A0-`2Px-SM zU;bb}@Am9#YfAgF{oCXFy_`f+e;!`gkBygoKUR3z*9Yk-|2BB#;@G|)E4&gc|Irxo zXQQvKPt#8GK~kOYl7HLwWxijk-oxt)c1Sw*@WNgUUh)UqzdgPWsdX}5x?UT7g_nIl zR{kLWcFE=6vM>97tcO>33P~E@!)rz|Uh;=&ja8diFTCX6N@_1X<=@zQ)z_4e6`# zv|je}1lgDFf7*E2-!C&!Z=Sd4eBmYkHufdF?B6R$UvocJ?WL!Fe`NHPKen372TAq9 z%f3FSO!_D{e6R19N-C3{dfsB=W&5}E?bDnOlG>}C?#G((WnW94;e(`l;U#-g(y?&T z{Tj1g-u1DkY7^^)m;76HZtP3n=ah85?90Ah3NNjf!OQ#pKZ-(<+I#jD@(#UY>8blQ zMqlsxcrLl#yFTtqK2{&n$LQ;=uceRhl0G(GcKj#2;?Yk@eW{(Ex0vx|-}dts@A^28 zLXz5RT=}>02kC3S&*I^gPL;VS_dX{~7c=e!=Wc1bdIWxZO%l2>KWygPNr})p{<;9B~DI}>s z+4uOO*+xevQ#rc-2E6CDqFxZT^+M(#MQ1zPF$M$RFh2 zvMV=p5+l(*!vi)0l+1E?8tHJt656$1RFYHH2;|VYOevQiH-$obd zYu_IhUh;3-zU=tH7#uk*?JdU*Bns=ay-FRtH8YA-#dkMT$8+XsD=R4=^b z-^L$3``W77#CqA6?cc&n{%!R2u8)V*ItTS@vz?EA5@ zFZ+FF&mX2I>zg{B@bFr|NhI~<;l=ux^_9N1e|vo2SgjM=OV4=pvGKBhKP>)`f7||O z#}gi2-PBuRe;!`llkt*$*}s<+UUqygJ?;Ck@<;izlIA14>|>SnK_8>9@Y457CDplz zo~N4il|S14?cv4xC>gx|@82y-UN6tSEdR~~PPTu`zU1GwecAr)UC-+a-9&sn`|6my zUgCo$*oTtv_w4(8O8ff1f43+VUdueVlJR1FWar{z@t6I)MgBOxAs-~+>+wDQWY$am zXvgE;_c#1WN$u6njwih9qs1>?JYlV$bdZ1RTyuT2_0jsuzYTxNzHEQ?;tBLqQXleL z`M1$m{AK&M_@KOXy%Z1F-?u&cnn58+{fX~&y;N@SvajEN6;J4TZS)mh_VX5xzxGf_ zQvb4V`+lshH+TGB$wd^B3`X|zUGbNFy%t`I$8G+y@5c%+UB8vopU3y}lJU~@#=ajb zzSr{>CAF96{*mEN;U#|-HmcKnWHa9PRPq|g8;I87UZf{-5D~Ulx5Tcq%cQ@slgKwT2P4A3{5_-z zOmZSJNs}c_CJ!M~kg3QtWI7UuOhKX9yZt}Mr0GR8QFqtMYbW^ksZiRWEYZv>_+w=-ynODeaL>~ z0CEs9=^Xp#nZqIS!^jcjC~^!rE}`x_@)O8OI8TL=H)52FJ4yljg8L7nzSNKo%m4kj2OnWGS)? zS&pngRwApA)yNuTEwT<-k8D6TBAXDUE#zB~ZOC?H2eK2{g(&S#$`g-Re~$Mf2atnS z-MOUwL*$2%Bgj$Y7;;=<&F=)qrx24)vwsFTYn7S0znib7|20Wtd`&-b>`z4wBS(_T z)z@X}t{_*DYshuv7vu(V6S;-lM*gidQ5S=xG@1PnG6k86Ohcw4snZO~W?AL&?9WB! zBMXp)$RcDhvINoJqhE$BM^+#!kyXfQWDT+wS%<7gHXs|3O^DJK@~y}=WIM70(ciD% zg(&SN-;=bzmwaE+{sHoXN&9MdE@}S|`C;S;auhj+q)sO&J7txhX8#Ow)+$SV&R-ob z;6kwwS%$39MT4|8DNj7Q^Yb!eTtTiP*O2STFUSq#CUOh8jr<#F0vCvh$Ru4TNR!D! z$P{EMG7XuI#34$vlkyqlvygd7$MNKIk@?61WFfK$S&S?}mLkiL<;V(TC9(=xjjTb| zBI}U#i2mB}Mr0GBw1s>tvJKge>_B!RyAY+_+*H>bZno0nYt^;Rpc6S9r*>hf!suHA-9o#D@`QGouojQG?_evOhKk1(~#*%>NJD0 zSxMz{$m5Z@$o!--(|$3>OOnc#CFLu~S0?S7c569am#S zajqiQkn6}V$PMHsatpbQ{2OTkUo0mglMtoJyP|BO8#7$RS-+jh0-qfTq?Vc_(#uel$at*nT{DRy-ZX&mk+sMC_Ci2B_lD-_0CXWE@L$)J3ke$dbBmvot>_NUk z_9FX`{m232Ad)&AqUpHr?fePyuk7ujW( zmanEZ`Myv`_Ww%EeItGSR0yIzb>B&0jP7L?MRfn`exxqa8tH+&g-k*=BD&vIlp9p- zkvWLVy^H}#_ccb-@uOVZ%E50Bax?FJ2Fc4@6%&_Ya=V$(@7ycd#f`#Fe2@CB0OuBW zoZbw|zl(Hw*Wn&;GspSx8OLe)0{8JgV*EJA8M*@F-Fc^eBd7QKZJnWqdU-et6Jaczv|OpNH^;hXY1T^X zrgD`j7tIS}VJlqQBf{`QaLWr;!ssm)J}Y)qiTgqQS+pOwVAmreoYjS+oOkNRIE{w| zoG#Ju}WFMs3hvNau2LZ%L0{`P^< zUfyZvPUQuj9v@kY{Ok+$Dl4D(Nv>YxHNGELej@qsd>dBmC%>oI^&WxR)H{)gZlmb= zvyzTQle)hy93v3nX#YM*_fqw~vy$3ldfxLgt)|I-)PPB`y`#K z{cMQ+`vu`8|CS!A7hbl1Ykh71Ry+B((Ki>z_WLgKN86t~zQ@0fz8+rqvyyc3@S2rq z=f=M5=g-1xd_%QPZ13@XD0zK_m+jx4eKqr%|A|-m>B-}J*T;Uz^&Vc`laD>T&?g06 zjg#x8Z#(p{?Mv5dC7mPtvVWhXcDi2Mc-j6Pq`v$!wdUJVPBU0_-P}5Qf~0F z{abh?G~k1z{)CtO+vqF2?Dtb;-|}xIwbwfR*XQBZ`bh`9FQs#}FZ=pmKM#*fiC609 z;r8#7H0~YG!&_2FQk`(p`>Ddg=xF=5@Us2ev#*XR@v{Bf!|OaJk<_1u7we;3^Orx` z{383Zf1jjtfhey708@^9fK|5noZ8dv^p z>#O%$lvM9SNrGH#9%AFtj+dG_*XlGPF9hHnbtMDYPZDEwnwf zBeXO0b!b;;PiSB0VCZn@Sm=1@MCfGbROoc*Oz3RrTr779J2r~)2Ejh$nVe63&ymME_eS@Pjf7Pe`kp5bI&r~%g7K zuf+OzE2w1fRq~9^W4_nOW1QJ(UXOM87Wt(626@oA82Ki7l(R2pP;6Spi;H=SJm|EH zew#ePnUQ92Y%Jrob%&7qcxUFF*cj%~Kl)wrOwK(2Q1Y}+$JqB`qtT;&?EB=IoR%>k zkjLl{X&#@QP)ocZT)wx%0F9&|XA7cJ_ zoawus%IOz1gZbxhy2Z{UXS~>1NJd=L+*2C_~My&UZ+j;T=L93E1pN5*4Y!B&-`;alY}CF0Id31i5Bu5Ayz@I-g9pg7U_S@ReY_`dka_2I9&^7X&&2y- zhsa~GpTo>Qm(xA!2zh$ud6Ya2^E}4*M=SSZ$ z@BH}JY4R-i*Z1VE^SSQ~^Umj#b$=kw>^vKJmOR#ZGWs0z&xQS*C(nSs7sz8+|BK8& zC+q(sc{*pb?o}U zp23+B_=P;0^}oUVwSG6r(>r@&Zjq;PLg{WX{~S((bhpXVf$Oj2QQ-O;^UumV6Tg%D zoSspCFz@_M>)0@P7S4Cl`k3FSn25A44Ombua7>3PR0 zhCJHo=8sJq%lw-8(~_rSJzVlAc*>VH2K(&g`pNz9P9SYG<9! zPb>Z`8O%VQ3Es*`9*ezZN*jf}^l~$kXTXoMkViW${8`gRg4UA09oa$2Ye&MGbrUhpZ#VjauF7 zr3<5)wLY|W)mvp+^(**I{S)2p`e^HxI{nuT?SAc}7YBaUs#=fYOP@Qs>g1z~etvgW z_N@hGc7FBi`xbOK-XO>Kxhf1A-SqBu&oqDip}8FgoLJst_S=8FIX=&=w52}jQ?F~Q zVGsSD^OIve-)Z*p&BZgG|E6%?hLNYf%RlV#&Mjw@oOhu_Y`KN&qK0gI`SWiorwx@a z@y?aPt3&f5qq;BqG25Ug-rJR@)YKOjjJz6q<>yDbotn_;(6ya0(X00DzUP_z8>am6 z-aTcTe=+fD%kk0govb+dmka&`pWE*tRWp7rD3WeF0yWxgS6NL;3|jeYz+2*b!g8v1a3=?T-|g z*k(Y(Zh120%697GWxh4zOMd@Ap%b+;<<6crog4IDd4Kb)GK;1y&602Wmd7vW96YCg zY@?q(JGy+*>+OEO5mD@`C;DDrQK$3$8{7W++CA^rzUzhUg*P2p^y6<`mz=)b;Xs8W z+iGZG`l!p?RN>K z=4b0Uz0cCmGJaC;cHMIw3r+j&gAL<-}^S4!Yul-=##6QOD z_1`;K;@bN3X_m!Ext7xYATV{TCe}){dPCYxW!?TC)U;gsWVguc0Tj#iT z@$YIv z!WA}!J}F;mV&^se9$8WOw?W&coEV-EfA`dbSudv<)1cDzj*3=nurf7J$d_`e$W5vuUU3} zm%MF89^TXJT!zQ)?zO*e=Fbnb|Df`Oz)P)fX8Gts<_Cs;J-zr(i`#FlbTZHPKfY9V z?gQiY9By|WCgb9l(MIal9Y+I2&3#Cr?cf<-*?5SqJa_*)PFx5996UGw20@@2Ie0-xZw1-j*qP!{_^&>+wZHms879~ zPxMPz@_4N#5I}PXU_AuzDFm<`0=NtT%zywsh5%YZ0KY&0BOrjH5WsH`zyS#04G3Tu z1W+FW=mG(ZfdEcI0Fe+tCJ0~>1h5GL_yGbK1p!=u01iO_WgviWAb`6dfI1LBcL-o0 z1keKlI0^wQf&j8Z0G%O#1rR_E2w)Hd&<+B42m&|(0lWj0s%AJ0Qvu05I{W$U?v3c2n6se1n?LH zkPiYV4gqw80183?yCH!4Ab`0LKzayZ4+QWf1n?*XFcAXi1_5M)0DKU@_YgpB2p}&6 z;D-QaK>$l3fGrTfU$3 zFdYJz4*}c{0ZfGeo`nEjh5%d$;2H!F0Rc>d06IYcuR#E5A%HUwz_$><*AT#72w*=1 zFb4vt00EST0M90MbDK^o0Nd5WxEoKurkXISAkw z1TYQ)7!ConhXDFO0R130Xzf&w1NPlAb{HtKraa31qh%K z1aJTX*bV{IfdD2!0Bs!I2w)8a&>sT$83Gs$0o;NBo`wL%K>#m70IeZ_w;+Im z5I{EwU<(8=6ash=0;mQ7JO=?h3IWW50A@k}_dx&+Ab<)Gz}*nQ>kz;I2w*k@FdhOZ z1p#!00Dgx6dO`p#Q0H+{;YY@OH2;dnA;139(IRwxW0yqf)Tz~*BLI9T_fUh8c3=qJ35I_tB5DfvW zgaAH-0G@;Z_Cf$zA%I^YfO8N)Z3y5?2%r`O@ID0476SMQ0`Nfq=^=o85PM z0$2tCl!O3IKmgexfFK0083LFF0ZfMgazX&H5WrCgpdAEI3<9_g0o)G(yaoZ>1p#b= z0Dgl2E<*rEAb`OTKp_YqBLq+c0(cMts0aZ}fB?!t0OcWoW)Q%45I{BvU?~Jp4+7{2 z0ek=fREGdcLjc1efJY#J-4MV;2*3{kya@pug8)8)09Hc)UqApOA%Gnaz{3zgW(Z&j z1aJcam;(X40Remr0hECNGC=^JK>)8p039HJQfB@!00H+~@KR@CB zOv3+$g#QHy|7Q{Yzf1Uko$&ur!vBqg|HTOZ7ZUy-Bm6H)`2P^$|C5CO>k0qgB>ex7 z@V^J)e-z<=R>J?)g#V)m|MwF9w<7$nPx${4;eUU^|7(Q*pAr5SC;VSU`2REE|5n2P zR|)?+5dMEp_&=KP{~5ynxrG1A3IG2f{J%x`--qyj7~%gXg#XP5|7Q^X_a*%Qj_|)T z;r~3s|8j)?LkR!BA^a~-_+OatKa%kON5cR22>+)N{$C~he}wSA6XAah;s0*J{|$uy z_YnS1B>ayi{GUwt?){u z{_iLJA4>S&h44R~@IRLD{|CbV7YY9-5dObH_wk!vDt!|K||?|3vsdiSYjh;r|na|8)re+Y&w^{=ZH5KbY`;58?l8!vD>L|9J`jj}ZO`3I7KW{+A;BpHBFnk?_AR z;r}$k|M7(Xj}iVCBK&`c@c&!F{|^ZN#}NKcA^Z;!{vRUzuTJ=1n()5~;eU6+{}zP* zzYzWpC;Tr<_&_{C|P)zc%6j4#NM_g#TX>{x>50UrYG^Fya3fg#QtQ|F;SMe|25(NV#5EEg#RxQ{*NR4Z%O!{gYf@(!vE%k|4$SC zA1C}DNcg{v@P8@ce-*<2b%g)f2>(|Q{+A&94-@`ZCHzlI_wAo$eLzz;q^H_js83~(;KHQ6rb1MeXDe?+|RZd-|YVV z^Y8ku+}q7}J3kiqZEoA{+gDX>(5Tg}giCS1)^2?F;D>HSzTV`4uckGfRAbo4FREN$ zvFK324B@MLb_OzEe0p@9>>H-O_F%^+b3Whh%}0+EDmnb!hksg<<=9jH!zU`<=c^x6 zDpI%eCd$2dA~e)b4mFu~T+G%Z6E*ns}?i{JTp1VXKdM==HC6%jR zwbyevoi97{;@OuuTc=b1(?ohRE>x%xHd>pVS2Rk@xIsa*3_d+DX~wXb^NrF~m39Sd*O8@$Xq zn11!#Mg644%gkANnSM3CME&V}>1XuPvmTY(dg(mjt#ZxRoUikY9SCoYCA`$$;8lQq zl^eX(ug;gQI^WoV!CQ6qd^z;mN-ve$dPyH+2SzV5U+Ja(jU5PYGhg*%@G|x(`!Zvz zUU=zz;jKOm-e$hS%iyhkjos^9ooDbecA!2~XXY!tbiT2J)OIht)Q{0iZSDCAFO?bl zG3cRG3##Ub%U-Q+z@KU+a%h*S1f0BLZyuWK7MlXY<^pf6Y9kh-bU-MNP)k%zf z7=MypDmVUU@G|yg?4BlGKQ>-wPSV@hhtW&xsD8~l8oi8t2ruDk_8Y8y^KFfCu3jQx9wKtre9-U#-GeO8hvvFB^nA+>!Ny$oKOuXNYVInB%Xqm7r!joli& z%sQs_bAy-GL1XJ&>810fqwGNCW*v=v7=KEQm-N#4X1>NB4PIs)%{oXgjbql)@PwJK zu@CiW=Bs^!S89Ju?N7p6`Ww8>e1(^EGIN$*reDp~*oXAexkfKDUt2GoXZTw4HRtQR z)c$DrNA_iWS@Safm>Ms`6UHCSI>>Hyo|5{JUed$XOZCPMj9zBGI$!$zUH&rmWw11O zrM7#67hQYUrq)Y3Nl$a#Gb254+jl!@ki6QvD?)CXzL|C%{m%?G(KVM*4TmJ`_y>pe9cRE z8%#7GgO|}ucxya^m+>dFj>f(WUg}rvQ~RUrK;^0V%kZk~OM3h_{xbd~y`;bKXM>lS zuhC0w{t7QMXJem6FEd}`kE!{~*q5+U-^M;u`=iYh8Y?w_>0E=i^fPv^eU+PjjeQxr zH}j=Q3jQ*BnfdB`?Hj#P&(~asQro@Gkr+EjZTE&Jgtz)McuOzoZFs`iL28~*zs3$^ zv+6_V8N0XjQh92-xBXF=q_%s5m$6S{Uo=gDS8BUAc*zc=lfm2Ay{(t@H+ZMEd)ptS zzp?w&{-}AWA7fv}9}QkQSM?@-O6`vZZ)5jbN3EOmlKw`o)YlQyujZ@$)b?T9tuQe5 zA-#mP#?X1@I%ND&W2(-qqtVOQhvuvErI+TV`Klj-m-Z#b?u|eGH~TPpsZWV*x3+yq zFX{Jp`OEmDnX|zwwSCCG)bD@dFX{AGc&T5N|0ny$b65jV-;6eaQ}lwb9GA1C<;8(tI_B&XpK{Hh7u&nsqe(sB<)?`c)fqeN27bR-dXj z>nOdXlXOtI=Bs{E`=jBBf=Tr@PZ%50d1k(;{mJo8PsYz>2b!10P`lLrlo~Iim$47yj|MMeA6iE`{<3sDhz1# zLX8uv(v3U$@yQxLwSRACq25JSm+Ch8u2Q+juPQXV#DOv8-mA5<)1|^A>QsKN-2II& z?)r7j!WD;yz8N~a@LZLJ^{%#E_gK}O3DJu#XT02c?4vp7OdeEyWR5p`9oqL)o*A_w zqb7}si#@oicb|tM+P;ySHALalG?S&6-vllcC~* zGQBocm{z^uuVc0pkBUE??$WBwueV;kZrHR3uli4HDmvBoaorJ9_w^nWb)sp9Z83eG zP3P-!*IikDE4Sz2!M?@Ci)}6TM3sWM%l=q$Lz~}vm2P}|{-`f92dgwc)?v>3EuQyv znl^911IvBgUpO=S$GT;=u6y(TN`tZtF5P!z$EeGVCY)V8F`|5}6%9M*nl@te&4fPh zH(XbKRg0KOO?z(6(d^RxoM%Vw&M>`G%OWwK?Jrs2xyJ`rN_TC^?&THxjPIUdOTwNd z+15_Z*?dOLrfGXt&iC1ckB&DQP_Ov3dSg#6ToHdyhc;U`&JX0Ny8XSH-!+Ik_{j6$ zbr|sIwsCDIEt$9fYVWdLf17vd$)5%d>({Pa_S(HWga-DV@$-Z%1Gl_=v1-R$X(Km( zP$FN4!neb#hM!wG=-7pxO(ti3anrmTlWwgl)x7U_R|Y<}X z8L~Uyg%dmXzk2BWz}?UO^!lT(USHNbd*8S&KgUcNvt{DOS3CG-2XC!PGp2gR+;#J0 zuH=6%_uH?gDSUmv;SwJg*<9o08QUtZShY2)Z`GF%Gzw-Ix1mek+KXyc+rDb=#zrMy z>-5{WyIya7@%H}vX7t|vboN$t8+?$nPS1!ca0G^23h|XDPJs|yq%_9?oHLR<;sM90 z#=frx@fXL15w`^OYFmVJRCf>lpqyhLT!%PLhZICyoGVCP6^WqzUF7MJ42WBRveNJ-`!$goNG2o# zy{ao`>{xUt&VDTY7gHH|1bqgOavV27($J<8xsU#k&gc#SoR5TxB|zs4wN>Z}F=3fy%okijT#eDwDn}uXl|pkaVmv)j8*u ztX9?x(K+3beTb%fFA_q4#ZjXg$Ry-Tfv2MV z|HtpxmymtmiOMp^5-Ll!NF+qIkS)oQoi;Bxo-}m$R-=F{Q*YtQgXU3eFF>}rPx~}(JGy)qy9X5j@7{O_{1AWj2wy*-y zK^1nxDUbmjcn&BUG#NmiR|EI}jbI75#5BrK2;P9=LUR*jp$5Xi35viB{9zMxfE)zF zdw2_;5D!Zr8_4T)1$KfnoC6o|f$ZK5-`@t9(p&b-~Y{#ZRE9k*k{ojE1l~4zCKwf{cuH6WJ zFdfo>EO)bD9{9j*cmi2402ko`yo3Yr2tpte${`e_p%?an2CRo37y?ar45APQcOd{~ z!z&=m{&En5$pW`2*L>vfnl%%T`-3;a0#M75^|vvPQqu1g!AACgCGH2 zPzq|008DTes89{uFcBO;9%A4bxPlwZhc&PVgy0~|0d`P=hY$@rU@Nr1Hh2LAa1UmH z1ysNkcmq|?3{T-0%!IXI13BOh0x%WmVKp3u2)G85pc{OF7d&7ANWlbH1-}CT&cS3_U4x)c+Q!>*t||Js%ww8?+e~px0-QUaP{LnM^NAU_o?|eDx_z?6^!_XFpz>!9wH%6d$r;2#5j$%3u zMN<(;QPT7ITJ(7u7<1W?b^Aa@M=qrUcu0| zV=gLZ>vzj5zKW^o#&5pK(Tt=&t(T1IwTdr$sF!FsEme71TRnMg$krE$Y(bI6jsb7~ zH09=C(stD^J!7t!sFi)3T4zl`HwOl*RJg2KSdCnzMyBPhuH zZ4wj|5)u*={L>MATfi&GC&Dd4`Q^kb#3%GG_Rhh+w5sIjw z2rET^m6gm){&XTQB{}_S=R#xO@W4uB#Tfx)>vsVBfDCqI;3F$x+%}`Rn5lRra~IcP zFOV(TR)~WZSOsK@*a663`VzWCpp2a$_fes+2evpJ=s0Jrk3TZNc zoZ%E)hH_X8X^;UAAPRb+88pEklHn>?!X8)#b}$G}zzd?G0+`__M1mYBgDC8V18@c& zLl=aC1eik|Y=Vst1iEk#yulRc;4N@~J7|DC9D#Uf05QmiZg>ybzy-c=6E;ISf+z^)`B7kg9rqGBNTu&%z$gKA11?n zP=R$|106t4{U8a$Pz_G76x!efXu}+s3k%^Qw8IN1gO6Yc7N7>}!5D^s7S@0j%!D0K z3iF{D^dSYdz;@7rH*g#d!7Y%2i7*1M;S!vO3BUu-z!kE<2n66Xl)!4x0Z(uNAqW9C zh=qA@8>C?hq(TCiz;mbtUbq8`fDJm~9;m`}UVrKAUpvth=vMahNBP(a-a;Nup17*8F&m`5DF4t4t1~zHbM~S!a?u` zQ=o&lzya={0rqeN;-LY=ARoHnJ!AtH_`*%t4C#;u;;;ew-~ucF1-J`IPzZ^@4)yQ| z3}6Y&f*eo+PN)J~I0pRiI{@GutOZ371`!AVM<{^b0pNE4_#FUnBly5n_zc%!FN8xY z#6b(Jf)C&Tv*9J|gDX%3m9PzVLNJ_!!|(~V!X%gmdhia;fjaDhhwuuP!wsMUAJD^D zkby=JgiK(7Twnrjh=Cq>3i40`VZZ{v1HkVVfE>z!GW&xj;{U#W6W;H#tN7U3_<~-doMoSD)Is;kdE9emcMM z-YN$geeyWS=F6C|;}XI$5;;%S=Hx3G2*|)fz8`xfmyz@1b3s3Q?}>HD0K$UCDH|Hf z>@<>SmKR{j|M^5V=g8*Yn6dd^y^ihaSKt5D^6{S|*ZI|YKQ15txv^s;U;oZF$j|<` zz5kuh{kZPWwl#JvpOv8> zmyO;SSXTmO0NK)vge*7+SKu{_&s+O{-M-;mvOW5}r7Dg0WaUPd<*`@tJ&D{8dEb(+ zW6Q=~$Ch0Z+*e$-Wr_a!r}JyYjVGS0>w9(0c6p}WkH`G8dGfv>D`4^-B#(o9CAUu= z$N2k@Tt*%T863v$Kk}8FCz0R(pXSd0UFG1*U-xhx?cU?Ceoz0OoB_&c8AZb_=8wB0 z|3da?3hGbG$?>veS9@W>iDRn76G$_fl8qrg}NMwZR-(^5L}6E;W%1f!cCfCjM%UY8-IV1_yG(Uh6V z=sE-%tpw6N5RMrhI(S6A#AsL%V+lN zcposj74pc)V_1goh2S5#wl7jJ>yA$p5^A< zg5@Uo$=uN$B=@0%tLTO0?xWY4Oz*LL-JdVkAWO0r&drxnK(?=p@Xr9($_QIm8%2a{!O?2LWC%g8n-0szVk`O^j92*|yUFZ(R?qZ_ zpF0Bt*~q4)r6J;U#Ti+q#GA&yW2Z3D7R2dtVi6lHg+gT`SQr_ma?sHVGtdxo8Cjyu6wO7J1@jUeEX**3hj1v!^ zie6t3$Cp6F(cdEC=uQ>T(Nbt>dDKv~OTN~+dp5s9^%;3JD3S#Gw*#Xv;1D84kBDvo zJtGh80vjq1!NrIfW*%01_mCyN0Y0ID0n~{E2f2`mhsoN@(?2l4lPXS#l1o^5_$+)q zf&)VWy+b7p1A~JCgWW@Y@d+tHg8V)mkKp(3+xq%@DcOX&`v*x{8O|ca1=y)tR6_9sYMu4ziy6h{N~2}pf+B?;l3VTL>xtW z{E4UFKU0XKaH5=0SZU)Z6q?Of9&cBq>E2g-^K6>Ug2SP@R$)!ETiSPo91%F!dA?>N zZNi5WPmhN-WZH8lyRLie-=NTM?0S^%hEy(%Pk^P%&aLKW<~UwwOA$FQ#!acS-IU_z zZ(u|BqGna9?%ho@>(;BTSaAKOu3`J)iqw7X%Cm#2Uv8hXxVr{7wBS|lm`RqMk=(->m%pWK!Tly(VL zZ5&B?Ci~Hmmd%mPzH~D~>(chyE`A?$OYaPCrz|mOlMs*5ac?)V4xPQVcg~!O)xvTS zlw=;`l5j84wxA8{IR^GSl#aRu<`)_D(W0PJisL9OI3o;%7*4$y2R%PMuk>6UCnh_m zXIEb)u9;MEvcEQ3;^yaBvjARp}j}d+>a|!Rkqe_oZY>>bhlG zh?=H&i%JG)w#m?O)dXri5NB7ob1mmBQIpm+Zzv_^U@qh7O!M=cwQRm3A*+k8ZxwIh z`LMgfjc&^NH0sI}?wf*IX}4nXs(FWRJzkNZUeddVu?R$$YFrc-o65G_v6b)XsTZwN?%Uns4f9l7lX!pe?2Ee`yUdy*`Dr`dd`0GW zImV}-5H4D%bydIA<#m`eqFX1TTjRLsR^8Qq)V9y7))j3r8cOvKXN`#ZkHioeLW&Fy zbUeb}N(-W&rDtCL*K^z#CUnsrHi;bc%e&LtCMlJ2 zMVCV^J$QPghqv-U*Y3`&PYIh#6S5Y}6%*Ip<7=kG<1w_laaY;p`ZcGRw515|X&G68 zC3p7j;(oinZ;68Mq&(sL!(4yY%arR~G}PR7ws2rTgk9R{h{|wMU#G(91pjUtg!J&elIKE>lsO_FvNyHNo!w^Kq^1MORmbm!>+2TtwpF!Raev0)*${6 z@7lN?w_ZBHzmU?RsjSA&e`Ibhs{~<3?oxt&9)XBgfQT1w{J$0NP;^mn5$0S8EhROo z5=tmB8u1**!Vw~#C4rbXHjjv>`}ZQ=FSZ@}!;Lx`-q!9J*sa!7xI*;OqL_+jJ9jts zDY)3n$s~8lvG@i(w(#XwNk7JLGcV?uL;Dg>k+tfjw=a4mZ}$tQd9$L@Ae5Xg<%9>KE`%6;)C4 z_ZwjgdsxQZ^`Y`K*MWOds*d#x7mSDWlI*ggBX>?2Sjt=trs>qM zXH9IakTe^7xuo2}Jb71Ll=;i!*w@~#?Rm0Ln=pSOfg?g>}1 z?cyaI-d{>y{Hd+Q)r4wwM4sn?K5;R4@z7`6YZxkl~XsE-);Z6|eXAW7)Uz9*m;xfs#EM#cao-7NVFb zVL}*<%_E9w{kh7617<7+)AtL7%7)>9hJF9i%RXb-48led*FT4L9^g@x=&`UY3-gM z;M=xqo21eQHmlQi=aufyxpX|Jx0JnzZkOG?+KuM+0~rR}UcG+t{C>QI`pjCp+?O^o z>!<9D6W!XA&LlR_WBER*u=O#|t~ASLkxMDT8B><~=Lx?TeQ9&e=bZG2v)K8fq&oSU zC=WZMqWR~C`id9Yb>-0-8>zSs-m16~ry4N4GlS>BQ{Ub_MT#eyr%vSX+MLt*rsxCr zBo;5N^jFambB=X%+dXcN%oKEP(cpLO+A3zYS?R<+btBQ|6ZwQ`T)H%zq%LHiWqH1y zBWa#L2al!B%E_kNf;(O>Yi)QIRBXS+epPyMfru%c`piH-T?tRH#g_4hp(>fW=) zmGul#(LEWn z@%zPC{N`Ws zB@HC{PsDFRlTarRz%|qevh9gpH94zBkhA|>r~h9??;VB9s_%B1Zke*uPg$tDuIGMJ z&U_iGeHXd}EoC{Mca(I@-4{woay@0bYMa4lmM&tjr6Svzm~@NA@9~PdXNgRl?>OkQ zUnZWDXj7Bjuzg_AM^tfmMQ?)GlU~c>!Uh?e*5nVy7g^dDRkl|d&=(EuUbfZey25P} zo2vNshYBXj^5yaK7FbVsK&SX|X=*AFu;H}>vHip9YgzjrOJ%Koe~ITc^I;o*>jTEA zJ4|Wj%=YGzpX^mv36^rJMBR+_Uhqxc{P*^(&n}!Lkx|lB-zHI_g+NrlD~@HKkfJa zA$m{z7K9PK5zlFe*laSo%h1QB60ylKygv)Sg&sTI|KrVzxQS8w_zUM0?AkXsWZ@ta zkFwYQZ=(L+>Z#*gPt4lb=uBrct*h_AzKG5XQS&V*)ykpEo%|>8?7eVeMM|ym74D)W z|HZZTv~8A>JXSef(fU31$0`@*igt@p;>(Xk4s2?FHiPoK=R^uCLvyle&r2J=u6cX6 zJm^hcdNrouQThO*%6huKv?;REK_A}^KZwjxW`D=j6LehAa{FdK*5HiVLhWrnN=@@Q zo-B6OL_mz8VJ zz4A7yzDzKB@#Ggpd6U%{BZL>X=!pAE#JyxYt9b09;r@q1&sH70zq2${qt>!%xeWKD zaJHG&Ny{Bg40(_5-(O|n)4aoABqmBKCZCV+er&+KNVqv)TB_Z!Z))GMLDO@JS8k}r z%$+pFRMyq;iQS9ccXGD3P7kb$l@Dd)dLAxSpBL94Z+obEsZL^Hxch;CLZ03AWwT#$ z2Y%Y9x~%5&-TBQ)GA-V9+r>6;d(!GCRXU{9K9G8Nu&UMLK%_0hm08MG<>^(sBKPhu z$P5#{xn%=Sn6!#&DRV%9Q<7YL!HadRQrDh}&uhtjZg%e-#Vat8ZB?^x^P_+#C0Q4! zlSeq3oSbi1h!o!Vppvhrynx@Yg{SxvHBLc{h*JV$C#XnJIMzbB~Ks2s%j@A8q2!Lbk0Q_&dox!HctM}M#8Oh5U?BTj40 zhI%b+2!nB(m_Su0R10`xxc~fwvQRii@K=qo@%1NCr}T07zm<1yVw=1A1Gy&HkwRN=$jr|oo;AcedUe5RI8eZprmfudRu{&dpQ_`E7o_a zpFbRtdggvQt;7z_JI&Pw`_3fuY1vEp?PGas>E8G(mA3KH@l0)JPM$fBEVxWpS)>iQ zQ5bcbrB$z$M)CyH=y!5WJd)dEu#WkKC13sJkZGa}k2Scqdo}7Gnw!pcsblq(GI!>= zw=Xs&$S$N;ICton7T468Q?vk@i`#RU_@J_Gd zb>-{^e+LQGQl+^zsYSlSH+9Z0lUbM|9hJ3z3gxm|wN8+!>zpmddT%L(adPM@(#n3n z0*ur+T0Sh|8ZC31|FJs$=T9BRl{gnd@cU8IQQ5xDFi}w6zLh8jD(7g*Oifjb&?X2q zG+TZwZ|XkJk34NEo&0KeIg9sA*)nEFzxm_K3i768SrI+d|2V2_o$a%S#~JBLGR6Bd zd1p31S@uEi^BK7})obWe9$oBk6&#Uzcr8(M<5k(vO}zv28;WJ+wk^Gw;(1>8s9mhD z^MoUnoTo0YELQH3*1Oghc={C6dv$S^S`EMR#wpLX54RoHG%DjUR*VXD4V!tz=`@|< zMz-dL=~^bikM6or*AE9J(TH<9IeR~uofzypRInnZ@ zk-hVrjdZNWqI1qY$Z_OtyZ*X&dXdRNB={y5%kwv)1J15pgo9-)};C3N=n9 z2Fq4{JJ;kBDj9z)@PvE$&{8KKUX3MpM`!;_ zle-=1;nN<)@16G9cgSSrrUa|D)Sxw03--v0t=8^k*uh!8BCF;?2obm<^Dt`(MC*`yGB3sVZ z(_VV4_lr$B-zw5g7do+ofq&bhHR|;x8M)-mUk^>zdX8oy+0M zh2)Q)C=r@Ugw|++#C_~%MuKDkVMELxn@56VER+1}9Uvhx`qb<%b`gqp z!&n}QmZ16JW~PfngL%iB78`aw_DRo*jBc=Z?C{8BG}jY%Zc;1W*|@Ay;w0thQ?Fg7W%Ig@WQDa+X6%dO=9i91mwJoq=r3s`Y8TVvq-1>NvDiJv%rNezEkeln7@DA zy5j9Jz9BjxPOkN3^K$FU?7Q5~yjdKwJpY;rIAi2|O86X`lHKHi_|I8nmFPN66|_#XH4!)A+a^!FR4t-ZOT zW<|WnP2K7wm&b|o)(H<3syIAIouO2rwy^22?q}7@`{{J5Ybv*Bt-iE9M)8fMU7D1J zT%&e?=Ng-%+c@_L$*gM|JW3az{Lb}dyLEk1`iA2tr9$Og1r-jRlULA^%hsMV?c&Pn zEfu0NC40P|xl1hVRxsP{n$RQXa#_k;*ZTB9dp%jYmmSegDpzIh2f1+0H;LH)o~HYF zIc=P4=SjZ(bs|?5nD=TIa`wrX9T%)MT50^Cp)ol6UU0AM-FlOprWdC~?K{^dKeI3+ zO7?EP`^;%a<#1P(cTYoB?27(t{pP)9lS_CMc9*R3iFvefainXF%DU_J+nnno6ck?d z`!_12D5mIZ&THsiZ8fu#fn2zUccfjGtCUf05HcE-p+xKs^57-uW3!0ZbRstGTNX~4j)+}L z=#A};mcp<0SGyxCZ_hxF5R6Rm^>+`B@(2o1UJ~k0=zrS)Euk*1Dk(N@II!#JuxfJH zum=VOyJ7$-Ib4+-m^wD7RasK(XSJ`-K>V)kd$v)+%9n41`bg)oWpZ_UY{@amTy-gG zLTZDTtFof*`^Ml7|Fxe_=sjj_ol!q~Pw{KtPLFzNja^wTUh7gGNzc(us_gdCjwGcWUU`&|E7tsdIRpwTs2vbYf17L_5vors}+1 zdd3mr8fPvQ743+Qmi}OxA+h)4Y?+uh`S0uf4x4B7JPnH!e)dE&CrZ$KkPBdQ>E!8{RL=NmG6@giaMFS=?$}? zezSX#^U(SO@kfV)O>om|({(Wh!8GCH#wOXFYtZ30FHj!)kWWD>LXuwlv z^`WW;ZoBLG2D3KYlVYUBIM3Z|&KB?DcQfYps09v~NN-oX|5?N`{=oA$wIe-3j;kNA zyh!2kZU&fbI*}><_uxXfK&wW|j>E~KocgROvt?zK^F5_<9m#gIwy4&4cZ}|nUh0bw; z+K%Nd`jc%J?SB|WOr5Ymj@QVBdGVP%S7XW(xiHU_vt&LwKM{Ps`+#=QTb`&_bUPge zg;Ff`v?Zwse2VX$J6GO(f>GgRI-R(z88m5w6?fy7=@!OuKP2L~yT6@WIy$5)xI3`y z{I@GarYpElV9`-p3f-U66>*gLjBH~CV8WlfH++#7mM%gpGXdwx^0h1A*Bjzawjw2aOfq8hb5f;^~Qw280T zDRnJn4UF+3=woOpg9WkeJ7drPw+>)cGcYhB2e4`>8Eem?{>=fb1#uiWfAp`ArMdY% zOG7hwvdlT8?Q=Q#CphrigFjR)#LE9jQ~m4ETsj`H?@je_LvAsSiEN$|;|Ca1)m1gV z3}P7_U_3hef7SIt+5U4|fBXRBc8>#hEYDgwXH}+29q+TffAeKqshw)S?-JGOx*acW zHe4ROW1U=f(zNMpVEm3-rpZT~XY`g>_->ZDdUb2;v}(nnfyHaN!zxLkDni;@{f4Y-Hnjn#yfYOgww}d+WAh6uO@Hy*)>=- zaX6Av`MG~_pzX}Y>(}edR~tD!q0S^ia%VB^4C1K`U|zz#p~S zydxI3$8#m~#zyCyxWDv)+hmW#q}5Nk7xs^(enfDl1jdbm*;Xqd&m@p`j9p6kCU@`C z+i})!O8=0Dx#}_9c_TITwc(1DCL&F0OB~nxFZiDhxI<~h$YOH99a&IEGcnZB#_7Ld zz}+vl{bLH|Up>e~l67=UUeMb9JaOe)w|l1h<-Zf!dho@=(sPf)kL2BON!zG4lseOq zV?}PA@8gx7{tkSLvl4EetIFXXWIbZdU*}(7Yn$8f{Pp4G`-^Jtn5Xy%-EQ=CxM7si z={s#&_ptGGANsP_9+w-RF1$i);Carayj=Ta^Rl%YDBbm8*9BbeTsRV7qA94n|IXrV z@~Q%_U0A1IaB=s#GU1nv$QJZ5!?U2x^#N3*TM6R+-KrHNbr zv47%>FdebQWGZL2SCox7#s z^lq09cb))+Gr~jhF~{z@51TZ|i^=+M2MbGWtTgvbv|3#4@+m?>=cRpEdEG_>3;p>W zoZA?6eb&73K1r8pwE9K6`KN$~xvkZu1JP4hsV{F?GNv6$VAgmXDO%N+bAD#8iqX-M z!P}m7J1Gs4EL$Vb4RY?El*dKR zihK+8ZYaK*nYev0I4Pls|OH zV+oya{b>q6^_LxTD|53iy>UY;8x>D4Z}+fep?{-0ZiU|*{oWlXf5-Z7b;p?=CCq2< zIdd;tFLpVd&i3L$slfeDcb|JhJ#mqtXV2#k_WnY|{!>lfElcmd>3tblceXTN?*7p6 zem`4#=Be}JjJQ7@u}L~N=*GP<{G7i2ti0RK0wc~tiv%>XW$nyEUl>emuB=~kX3c=+ zDn~uhft;v0Y1TBATATuJRH9x2@4Mf#!sftn|!_{dBuBQyeBAKlF*d zJ7|aM9QjWRDpfuodbnBb*kae*PJ8{nR~K@;Q0v1QjhjCp*hPvwy%)# zZ`@W~H1ornRhdguBX|2>>fSaaHmr3ceeldK*39^wb@{>-^ag8d560w4Ye^oId+7P> z-C+G{4+lBUXk~5t@S^2qj2k%<`H#AnaJA*$;Fz5o)6{;xr2WOJwJ*D8EN8jv5}GZ| z?0&1tN<6UcRX5GuUMkbht<&Fm&5nHhzSMN@yF0PnM%;nm z^J0Uw>nY+fA4L+U*lO1}-D+lEkQ2QjWCru2Y^5j3_tccRC%-wVVkQk4z|D{dRj%(7a3z3@`g zg8ROA>>E1n5GOyKdt~vEz20SB-*#~!EtTUJ7cwZnU@x%Jxb=cXUi9kz)f(c=M{iB* zyzH8CCp5u~yD*OS0lc5e(9xb1=u6@=! zEBn%r@~wiJ1xT00#_U}E57$?J{C!DU2AX>&w{8;Bf}CUhKdPFVD$@Pm7HEH6Ktv$8 zd>KB2&L$qatDvdJ`gH?HzvDgrx(ltsR9cM7W*U9ZmGNZ-Q$+`Ig=ynHPD{np>2Kq2 z$lfb$0V}~wevFQ(P_l6BJte+ieA9&d)v?%En)UMxA8h~JA2jdDC$TIg%Hvq&#E`U= z9bTH2bN1TIogUJ_EPRNL#hz=^8ol7RA$-w$^rxBf?+(`qAGw*Sn|?xS&i+O7Spw|2 z1QNIf%Z^R5%Dg$5o+I!=TIvm@H0xZ0S2{~wmOfb2-~4!f`hkJ?OjgHj2M9H@x5M5C z&A4U?)UKz-(XpfN$TC`@xBjzNbTqy6v##s-^imvU4k7$4*=$y^d5~KaJBagj#yutj~cDbY;)$16#`Co7={QSfrS=L-RVw17p3Qygv zAs3YjZ@UmBs;XZl?IjO~+U(sjY3$<*Bsv!4m>iR9MQO2Nzmb BoundBinaryOperator::Bind(enum SyntaxKind SyntaxKind, const TypeSymbol* LeftType, const TypeSymbol* RightType) noexcept +NullablePointer BoundBinaryOperator::Bind(SyntaxKind Kind, const TypeSymbol* LeftType, const TypeSymbol* RightType) noexcept { auto Result = std::ranges::find_if( std::ranges::begin(Operators), std::ranges::end(Operators), - [=](const BoundBinaryOperator& Operator) { return Operator.SyntaxKind == SyntaxKind && Operator.LeftType == LeftType && Operator.RightType == RightType; } + [=](const BoundBinaryOperator& Operator) { return Operator.Kind == Kind && Operator.LeftType == LeftType && Operator.RightType == RightType; } ); if (Result == std::ranges::end(Operators)) { diff --git a/src/Mamba/Code Analysis/Binding/BoundBinaryOperator.h b/src/Mamba/Code Analysis/Binding/BoundBinaryOperator.h index 3a07603..673e51c 100644 --- a/src/Mamba/Code Analysis/Binding/BoundBinaryOperator.h +++ b/src/Mamba/Code Analysis/Binding/BoundBinaryOperator.h @@ -21,8 +21,8 @@ namespace Mamba BoundBinaryOperator& operator=(BoundBinaryOperator&&) = delete; public: - enum SyntaxKind SyntaxKind; - BoundBinaryOperatorKind Kind; + enum SyntaxKind Kind; + BoundBinaryOperatorKind BoundKind; const TypeSymbol* LeftType; const TypeSymbol* RightType; const TypeSymbol* Type; @@ -32,7 +32,7 @@ namespace Mamba public: static NullablePointer Bind( - enum SyntaxKind SyntaxKind, + SyntaxKind Kind, const TypeSymbol* LeftType, const TypeSymbol* RightType ) noexcept; diff --git a/src/Mamba/Code Analysis/Binding/BoundUnaryOperator.cpp b/src/Mamba/Code Analysis/Binding/BoundUnaryOperator.cpp index 8ffbe28..9fc8bee 100644 --- a/src/Mamba/Code Analysis/Binding/BoundUnaryOperator.cpp +++ b/src/Mamba/Code Analysis/Binding/BoundUnaryOperator.cpp @@ -4,13 +4,13 @@ using namespace Mamba; -BoundUnaryOperator::BoundUnaryOperator(enum SyntaxKind SyntaxKind, const BoundUnaryOperatorKind Kind, const TypeSymbol* OperandType) noexcept : - SyntaxKind(SyntaxKind), Kind(Kind), OperandType(OperandType) +BoundUnaryOperator::BoundUnaryOperator(SyntaxKind Kind, const BoundUnaryOperatorKind BoundKind, const TypeSymbol* OperandType) noexcept : + Kind(Kind), BoundKind(BoundKind), OperandType(OperandType) { } -BoundUnaryOperator::BoundUnaryOperator(enum SyntaxKind SyntaxKind, const BoundUnaryOperatorKind Kind, const TypeSymbol* OperandType, const TypeSymbol* ResultType) noexcept : - SyntaxKind(SyntaxKind), Kind(Kind), OperandType(OperandType), ResultType(ResultType) {}; +BoundUnaryOperator::BoundUnaryOperator(SyntaxKind Kind, const BoundUnaryOperatorKind BoundKind, const TypeSymbol* OperandType, const TypeSymbol* ResultType) noexcept : + Kind(Kind), BoundKind(BoundKind), OperandType(OperandType), ResultType(ResultType) {}; BoundUnaryOperator BoundUnaryOperator::Operators[]{ BoundUnaryOperator(SyntaxKind::BangToken, BoundUnaryOperatorKind::LogicalNegation, &TypeSymbol::Bool), @@ -20,12 +20,12 @@ BoundUnaryOperator BoundUnaryOperator::Operators[]{ BoundUnaryOperator(SyntaxKind::TildeToken, BoundUnaryOperatorKind::OnesComplement, &TypeSymbol::Int) }; -NullablePointer BoundUnaryOperator::Bind(enum SyntaxKind SyntaxKind, const TypeSymbol* OperandType) noexcept +NullablePointer BoundUnaryOperator::Bind(SyntaxKind Kind, const TypeSymbol* OperandType) noexcept { auto Result = std::ranges::find_if( std::ranges::begin(Operators), std::ranges::end(Operators), - [=](auto Operator) { return Operator.SyntaxKind == SyntaxKind && Operator.OperandType == OperandType; } + [=](auto Operator) { return Operator.Kind == Kind && Operator.OperandType == OperandType; } ); if (Result == std::ranges::end(Operators)) { diff --git a/src/Mamba/Code Analysis/Binding/BoundUnaryOperator.h b/src/Mamba/Code Analysis/Binding/BoundUnaryOperator.h index 88a13eb..058651b 100644 --- a/src/Mamba/Code Analysis/Binding/BoundUnaryOperator.h +++ b/src/Mamba/Code Analysis/Binding/BoundUnaryOperator.h @@ -9,12 +9,12 @@ namespace Mamba { class BoundUnaryOperator { - [[nodiscard]] BoundUnaryOperator(SyntaxKind SyntaxKind, BoundUnaryOperatorKind Kind, const TypeSymbol* OperandType) noexcept; - [[nodiscard]] BoundUnaryOperator(SyntaxKind SyntaxKind, BoundUnaryOperatorKind Kind, const TypeSymbol* OperandType, const TypeSymbol* ResultType) noexcept; + [[nodiscard]] BoundUnaryOperator(SyntaxKind Kind, BoundUnaryOperatorKind BoundKind, const TypeSymbol* OperandType) noexcept; + [[nodiscard]] BoundUnaryOperator(SyntaxKind Kind, BoundUnaryOperatorKind BoundKind, const TypeSymbol* OperandType, const TypeSymbol* ResultType) noexcept; public: - enum SyntaxKind SyntaxKind; - BoundUnaryOperatorKind Kind; + SyntaxKind Kind; + BoundUnaryOperatorKind BoundKind; const TypeSymbol* OperandType; const TypeSymbol* ResultType; @@ -23,6 +23,6 @@ namespace Mamba public: // when the return value is not null, the life time of the object lasts to the end of the program - static NullablePointer Bind(enum SyntaxKind SyntaxKind, const TypeSymbol* OperandType) noexcept; + static NullablePointer Bind(SyntaxKind Kind, const TypeSymbol* OperandType) noexcept; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Binding/ConstantFolding.cpp b/src/Mamba/Code Analysis/Binding/ConstantFolding.cpp index 1f062a4..8b6fdf9 100644 --- a/src/Mamba/Code Analysis/Binding/ConstantFolding.cpp +++ b/src/Mamba/Code Analysis/Binding/ConstantFolding.cpp @@ -12,7 +12,7 @@ Constant ConstantFolding::Fold( return {}; } - switch (Operator.Kind) + switch (Operator.BoundKind) { case BoundUnaryOperatorKind::Identity: return Operand->ConstantValue(); @@ -39,7 +39,7 @@ Constant ConstantFolding::Fold( // Special case && and || because there are cases where only one // side needs to be known. - if (Operator.Kind == BoundBinaryOperatorKind::LogicalAnd) + if (Operator.BoundKind == BoundBinaryOperatorKind::LogicalAnd) { if ((LeftConstant.IsValid() && !LeftConstant.Get()) || (RightConstant.IsValid() && !RightConstant.Get())) @@ -48,7 +48,7 @@ Constant ConstantFolding::Fold( } } - if (Operator.Kind == BoundBinaryOperatorKind::LogicalOr) + if (Operator.BoundKind == BoundBinaryOperatorKind::LogicalOr) { if ((LeftConstant.IsValid() && LeftConstant.Get()) || (RightConstant.IsValid() && RightConstant.Get())) @@ -62,7 +62,7 @@ Constant ConstantFolding::Fold( return {}; } - switch (Operator.Kind) + switch (Operator.BoundKind) { case BoundBinaryOperatorKind::Addition: return LeftConstant + RightConstant; diff --git a/src/Mamba/Code Analysis/Compiler.cpp b/src/Mamba/Code Analysis/Compiler.cpp index 2889c07..25e9939 100644 --- a/src/Mamba/Code Analysis/Compiler.cpp +++ b/src/Mamba/Code Analysis/Compiler.cpp @@ -111,5 +111,6 @@ void Compiler::Compile() noexcept { delete BoundCompilationUnit; } - // LLVMBackend::GenerateCode(span, "Main"); + + LLVMBackend::GenerateCode(BoundCompilationUnits, "Main"); } \ No newline at end of file diff --git a/src/Mamba/Code Generation/LLVMBackend.cpp b/src/Mamba/Code Generation/LLVMBackend.cpp index a542abe..71c5a07 100644 --- a/src/Mamba/Code Generation/LLVMBackend.cpp +++ b/src/Mamba/Code Generation/LLVMBackend.cpp @@ -13,6 +13,4 @@ void LLVMBackend::GenerateCode(std::span CompilationUnits auto LLVMModule = Module(ModuleName, Context); auto Builder = IRBuilder<>(Context); - - LLVMModule.print(errs(), {}); } \ No newline at end of file diff --git a/src/Mamba/Core/DiagnosticPrinter.h b/src/Mamba/Core/DiagnosticPrinter.h index fd19be2..325b36b 100644 --- a/src/Mamba/Core/DiagnosticPrinter.h +++ b/src/Mamba/Core/DiagnosticPrinter.h @@ -67,19 +67,18 @@ namespace Mamba auto Indent = fast_io::concat(LineIndex + 1).length() + 5; - auto Length = Diagnostic.Location.Text.Length(); for (auto Index [[maybe_unused]] : std::views::iota(0uz, Indent)) { print(out, " "); } auto RelativeBegin = Diagnostic.Location.StartCharacter() - Line.Start; - for (auto Index [[maybe_unused]] : std::views::iota(0uz, RelativeBegin - 1)) + for (auto Index [[maybe_unused]] : std::views::iota(0uz, RelativeBegin - 2)) { print(out, " "); } - print(out, Color("β˜οΈπŸ€“", Colors::BrightForegroundGreen)); + print(out, Color("πŸ€“πŸ‘†", Colors::BrightForegroundGreen)); // for (auto Index [[maybe_unused]] : std::views::iota(1uz, Length)) // { // print(out, Color("~", Colors::BrightForegroundGreen)); diff --git a/src/Mamba/main.cpp b/src/Mamba/main.cpp index 66f0248..3ad2944 100644 --- a/src/Mamba/main.cpp +++ b/src/Mamba/main.cpp @@ -1,4 +1,5 @@ #include "Mamba.h" +#include using namespace Mamba; diff --git a/xmake.lua b/xmake.lua index e84740c..77e0a31 100644 --- a/xmake.lua +++ b/xmake.lua @@ -1,6 +1,58 @@ add_rules("mode.debug", "mode.release") add_rules("plugin.compile_commands.autoupdate") +function main(package, opt) + if opt.system then + local llvm_config = "llvm-config" + if package:is_plat("macosx") then + local llvm = try {function () return os.iorunv("brew", {"--prefix", "llvm"}) end} + if llvm then + local ret = find_tool("llvm-config", {paths = path.join(llvm:trim(), "bin")}) + if ret then + llvm_config = ret.program + end + end + end + local version = try {function() return os.iorunv(llvm_config, {"--version"}) end} + if version then + version = version:trim() + end + if package:is_toolchain() then + if version then + return {version = version} + end + else + local linkdir = try {function() return os.iorunv(llvm_config, {"--libdir"}) end} + local includedir = try {function() return os.iorunv(llvm_config, {"--includedir"}) end} + if linkdir and includedir then + linkdir = linkdir:trim() + includedir = includedir:trim() + local result = {version = version, links = {}, linkdirs = linkdir, includedirs = includedir} + local components = {} + for _, file in ipairs(os.files(path.join(os.scriptdir(), "components", "*.lua"))) do + local name = path.basename(file) + local links = {} + for _, link in ipairs(import("components." .. name).get_links(package)) do + local filename_static = target.filename(link, "static", {plat = package:plat(), arch = package:arch()}) + local filename_shared = target.filename(link, "shared", {plat = package:plat(), arch = package:arch()}) + if os.isfile(path.join(linkdir, filename_static)) or + os.isfile(path.join(linkdir, filename_shared)) then + table.insert(links, link) + table.insert(result.links, link) + end + end + if #links > 0 then + components[name] = components[name] or {} + components[name].links = links + end + end + components.__base = {linkdirs = linkdir, includedirs = includedir} + result.components = components + return result + end + end + end +end local includedirs = { "src/Mamba", @@ -16,20 +68,41 @@ local includedirs = { local llvm_config = "/opt/homebrew/opt/llvm/bin/llvm-config" +package("libllvm") +do + on_install(function (package) + import("lib.detect.find_tool") + local llvm_config = find_tool("llvm-config") + + local cflags_raw = os.iorunv(llvm_config.program, { "--cflags" }) + local cppflags_raw = os.iorunv(llvm_config.program, { "--cppflags" }) + local cxxflags_raw = os.iorunv(llvm_config.program, { "--cxxflags" }) + local ldflags_raw = os.iorunv(llvm_config.program, { "--ldflags" }) + + local cflags = cflags_raw:split("%s+") or {} + local cppflags = cppflags_raw:split("%s+") or {} + local cxxflags = cxxflags_raw:split("%s+") or {} + local ldflags = ldflags_raw:split("%s+") or {} + + package:add("cflags", cflags) + package:add("cxflags", cppflags) + package:add("cxxflags", cxxflags) + package:add("ldflags", ldflags) + end) +end +package_end() -set_languages("c++20") add_requires("fast_io") -set_runtimes("c++_shared") +add_requires("libllvm") target("Jvav") - add_languages("c++23") - add_cxxflags("-std=c++23") set_kind("binary") add_files("src/Mamba/**.cpp") add_headerfiles("src/Mamba/**.h") add_packages("fast_io") set_toolchains("llvm") set_filename("mamba") + add_languages("clatest", "c++latest") set_warnings("all", "extra") add_includedirs(includedirs) if is_os("macosx") then @@ -46,7 +119,7 @@ target("Jvav") add_defines("DEBUG") end - add_includedirs("/opt/homebrew/opt/llvm/include") + -- add_includedirs("/opt/homebrew/opt/llvm/include") -- add_cxxflags("$(shell " .. llvm_config .. " --cxxflags)") add_ldflags("$(shell " .. llvm_config .. " --ldflags)") add_ldflags("$(shell " .. llvm_config .. " --libs all)", {force=true}) From fddba5bf97c79564062910c25d96806c574423d4 Mon Sep 17 00:00:00 2001 From: heckerpowered <72550834+heckerpowered@users.noreply.github.com> Date: Thu, 12 Sep 2024 18:04:14 +0800 Subject: [PATCH 15/30] Use rule instead of shell --- xmake.lua | 90 +++++++++++++------------------------------------------ 1 file changed, 20 insertions(+), 70 deletions(-) diff --git a/xmake.lua b/xmake.lua index 77e0a31..0f9d0cf 100644 --- a/xmake.lua +++ b/xmake.lua @@ -1,59 +1,6 @@ add_rules("mode.debug", "mode.release") add_rules("plugin.compile_commands.autoupdate") -function main(package, opt) - if opt.system then - local llvm_config = "llvm-config" - if package:is_plat("macosx") then - local llvm = try {function () return os.iorunv("brew", {"--prefix", "llvm"}) end} - if llvm then - local ret = find_tool("llvm-config", {paths = path.join(llvm:trim(), "bin")}) - if ret then - llvm_config = ret.program - end - end - end - local version = try {function() return os.iorunv(llvm_config, {"--version"}) end} - if version then - version = version:trim() - end - if package:is_toolchain() then - if version then - return {version = version} - end - else - local linkdir = try {function() return os.iorunv(llvm_config, {"--libdir"}) end} - local includedir = try {function() return os.iorunv(llvm_config, {"--includedir"}) end} - if linkdir and includedir then - linkdir = linkdir:trim() - includedir = includedir:trim() - local result = {version = version, links = {}, linkdirs = linkdir, includedirs = includedir} - local components = {} - for _, file in ipairs(os.files(path.join(os.scriptdir(), "components", "*.lua"))) do - local name = path.basename(file) - local links = {} - for _, link in ipairs(import("components." .. name).get_links(package)) do - local filename_static = target.filename(link, "static", {plat = package:plat(), arch = package:arch()}) - local filename_shared = target.filename(link, "shared", {plat = package:plat(), arch = package:arch()}) - if os.isfile(path.join(linkdir, filename_static)) or - os.isfile(path.join(linkdir, filename_shared)) then - table.insert(links, link) - table.insert(result.links, link) - end - end - if #links > 0 then - components[name] = components[name] or {} - components[name].links = links - end - end - components.__base = {linkdirs = linkdir, includedirs = includedir} - result.components = components - return result - end - end - end -end - local includedirs = { "src/Mamba", "src/Mamba/Core", @@ -62,38 +9,40 @@ local includedirs = { "src/Mamba/Code Analysis/Text", "src/Mamba/Code Analysis/Binding", "src/Mamba/Code Analysis/Symbol", - "src/Mamba/Code Analysis/Linking", "src/Mamba/Code Generation", } local llvm_config = "/opt/homebrew/opt/llvm/bin/llvm-config" -package("libllvm") +rule("libllvm") do - on_install(function (package) + on_config(function (target) import("lib.detect.find_tool") local llvm_config = find_tool("llvm-config") - local cflags_raw = os.iorunv(llvm_config.program, { "--cflags" }) - local cppflags_raw = os.iorunv(llvm_config.program, { "--cppflags" }) - local cxxflags_raw = os.iorunv(llvm_config.program, { "--cxxflags" }) + -- local cflags_raw = os.iorunv(llvm_config.program, { "--cflags" }) + -- local cppflags_raw = os.iorunv(llvm_config.program, { "--cppflags" }) + -- local cxxflags_raw = os.iorunv(llvm_config.program, { "--cxxflags" }) local ldflags_raw = os.iorunv(llvm_config.program, { "--ldflags" }) + local libflags_raw = os.iorunv(llvm_config.program, { "--libs" }) - local cflags = cflags_raw:split("%s+") or {} - local cppflags = cppflags_raw:split("%s+") or {} - local cxxflags = cxxflags_raw:split("%s+") or {} + -- local cflags = cflags_raw:split("%s+") or {} + -- local cppflags = cppflags_raw:split("%s+") or {} + -- local cxxflags = cxxflags_raw:split("%s+") or {} local ldflags = ldflags_raw:split("%s+") or {} + local libflags = libflags_raw:split("%s+") or {} - package:add("cflags", cflags) - package:add("cxflags", cppflags) - package:add("cxxflags", cxxflags) - package:add("ldflags", ldflags) + -- target:add("cflags", cflags) + -- target:add("cxflags", cppflags) + target:add("cxxflags", cxxflags) + target:add("ldflags", ldflags) + target:add("ldflags", libflags_raw, {force = true}) end) end -package_end() +rule_end() add_requires("fast_io") -add_requires("libllvm") +add_rules("libllvm") target("Jvav") set_kind("binary") @@ -121,8 +70,9 @@ target("Jvav") -- add_includedirs("/opt/homebrew/opt/llvm/include") -- add_cxxflags("$(shell " .. llvm_config .. " --cxxflags)") - add_ldflags("$(shell " .. llvm_config .. " --ldflags)") - add_ldflags("$(shell " .. llvm_config .. " --libs all)", {force=true}) + -- add_ldflags("$(shell " .. llvm_config .. " --ldflags)") + -- add_ldflags("$(shell " .. llvm_config .. " --libs all)", {force=true}) + -- add_cxxflags("-march=native") -- add_syslinks("$(shell " .. llvm_config .. " --system-libs)") target_end() From f5b272a5cbefec8ee8d81c75010763bc2eb1a4f9 Mon Sep 17 00:00:00 2001 From: heckerpowered <72550834+heckerpowered@users.noreply.github.com> Date: Thu, 12 Sep 2024 18:04:27 +0800 Subject: [PATCH 16/30] Support CMake --- CMakeLists.txt | 42 ++++++++++++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c6d1e1f..9ca3fdd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,21 +1,39 @@ -cmake_minimum_required(VERSION 3.10) - -project(Mamba CXX) +cmake_minimum_required(VERSION 3.22) +project(mamba) set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD_REQUIRED ON) -set(CMAKE_EXPORT_COMPILE_COMMANDS ON) -set(MAGIC_CPP_INCLUDE_TESTS OFF) -file(GLOB SOURCE "src/Mamba/**.cpp") -add_executable(Mamba ${SOURCE}) +if(NOT MSVC) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread") +endif() include(FetchContent) - FetchContent_Declare( - fast_io - URL https://github.com/cppfastio/fast_io - DOWNLOAD_EXTRACT_TIMESTAMP TRUE + fastio + URL https://github.com/Adttil/fast_io/archive/refs/heads/master.zip + DOWNLOAD_EXTRACT_TIMESTAMP TRUE ) +FetchContent_MakeAvailable(fastio) + +include_directories("include" "src/Mamba" "src/Mamba/Core" "src/Mamba/Code Analysis" "src/Mamba/Code Analysis/Syntax" "src/Mamba/Code Analysis/Text" "src/Mamba/Code Analysis/Binding" "src/Mamba/Code Analysis/Symbol" "src/Mamba/Code Generation") + +set(CMAKE_EXE_LINKER_FLAGS "-static") + +file(GLOB_RECURSE srcs "src/Mamba/**.cpp") +add_executable(mamba ${srcs}) +target_link_libraries(mamba PRIVATE FAST_IO) + +# LLVM Embedding +find_package(LLVM REQUIRED CONFIG) + +message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}") +message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}") + +llvm_map_components_to_libnames(llvm_libs support core irreader) + +target_link_libraries(mamba PRIVATE ${llvm_libs}) -FetchContent_MakeAvailable(fast_io) \ No newline at end of file +include_directories(${LLVM_INCLUDE_DIRS}) +separate_arguments(LLVM_DEFINITIONS_LIST NATIVE_COMMAND ${LLVM_DEFINITIONS}) +add_definitions(${LLVM_DEFINITIONS_LIST}) \ No newline at end of file From 40d6c5d8fb251b3e117aa2f1b3932e84773d8ec4 Mon Sep 17 00:00:00 2001 From: heckerpowered <72550834+heckerpowered@users.noreply.github.com> Date: Thu, 12 Sep 2024 18:04:50 +0800 Subject: [PATCH 17/30] Remove unused includes --- src/Mamba/Code Analysis/DiagnosticBag.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/Mamba/Code Analysis/DiagnosticBag.cpp b/src/Mamba/Code Analysis/DiagnosticBag.cpp index 40dff31..1dd0919 100644 --- a/src/Mamba/Code Analysis/DiagnosticBag.cpp +++ b/src/Mamba/Code Analysis/DiagnosticBag.cpp @@ -6,8 +6,6 @@ #include "Diagnostic.h" #include "DoWhileStatementSyntax.h" #include "ExpressionStatementSyntax.h" -#include "fast_io_core_impl/concepts/strlike.h" -#include "fast_io_freestanding_impl/serializations/strlike_get.h" #include "ForStatementSyntax.h" #include "IfStatementSyntax.h" #include "MambaCore.h" @@ -38,7 +36,7 @@ namespace Mamba void DiagnosticBag::ReportInvalidCharacter(const TextLocation Location, const Char Character) noexcept { - ReportError(Location, TEXT("Invalid character '"), (Character), TEXT("'.")); + ReportError(Location, TEXT("Invalid character '"), Character, TEXT("'.")); } void DiagnosticBag::ReportUnterminatedString(const TextLocation Location) noexcept From be01d828ca4023d82086a0e514aa649d21835028 Mon Sep 17 00:00:00 2001 From: heckerpowered <72550834+heckerpowered@users.noreply.github.com> Date: Thu, 12 Sep 2024 18:04:58 +0800 Subject: [PATCH 18/30] Remove support of linker --- .../Code Analysis/Linking/LinkIdentifier.h | 15 ------ .../Code Analysis/Linking/Serializer.cpp | 27 ---------- src/Mamba/Code Analysis/Linking/Serializer.h | 50 ------------------- 3 files changed, 92 deletions(-) delete mode 100644 src/Mamba/Code Analysis/Linking/LinkIdentifier.h delete mode 100644 src/Mamba/Code Analysis/Linking/Serializer.cpp delete mode 100644 src/Mamba/Code Analysis/Linking/Serializer.h diff --git a/src/Mamba/Code Analysis/Linking/LinkIdentifier.h b/src/Mamba/Code Analysis/Linking/LinkIdentifier.h deleted file mode 100644 index 18a5cce..0000000 --- a/src/Mamba/Code Analysis/Linking/LinkIdentifier.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include - -namespace Mamba -{ - enum class LinkIdentifier : std::uint8_t - { - Function, - Variable, - Type, - Instruction, - String - }; -} // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Linking/Serializer.cpp b/src/Mamba/Code Analysis/Linking/Serializer.cpp deleted file mode 100644 index 027742d..0000000 --- a/src/Mamba/Code Analysis/Linking/Serializer.cpp +++ /dev/null @@ -1,27 +0,0 @@ -#include "Serializer.h" - -#include - -#include "fast_io.h" - -using namespace Mamba; - -void Serializer::Write(const std::span DataView) noexcept -{ -#if __cpp_lib_containers_ranges == 202202L - Data.append_range(DataView); -#else - const auto PreviousSize = Data.size(); - Data.resize(PreviousSize + DataView.size()); - std::memcpy(Data.data() + PreviousSize, DataView.data(), DataView.size()); -#endif -} - -void Serializer::Write(const StringView String) noexcept -{ - Write(String.size()); - - const auto First = reinterpret_cast(String.data()); - const auto Last = reinterpret_cast(String.data() + String.size()); - Write(std::span(First, Last)); -} diff --git a/src/Mamba/Code Analysis/Linking/Serializer.h b/src/Mamba/Code Analysis/Linking/Serializer.h deleted file mode 100644 index d4787bf..0000000 --- a/src/Mamba/Code Analysis/Linking/Serializer.h +++ /dev/null @@ -1,50 +0,0 @@ -#pragma once - -#include "MambaCore.h" -#include -#include -#include -#include -#include - -namespace Mamba -{ - class Serializer final - { - public: - std::vector Data; - - void Write(const std::span DataView) noexcept; - - template - requires std::is_trivially_copyable_v && (!std::is_integral_v) - void Write(const T& Data) noexcept - { - using ByteArray = std::array; - const auto ValueRepresentation = std::bit_cast(Data); - Write(std::span(ValueRepresentation)); - } - - template - void Write(const T Data) noexcept - { - static_assert( - std::endian::native == std::endian::little || std::endian::native == std::endian::big, - "Unsupported endianness" - ); - static_assert(std::has_unique_object_representations_v, "T may not have padding bits"); - - using ByteArray = std::array; - auto ValueRepresentation = std::bit_cast(Data); - if constexpr (std::endian::native == std::endian::big) - { - // Dotnet linker reads integers as little-endian - std::ranges::reverse(ValueRepresentation); - } - - Write(ValueRepresentation); - } - - void Write(const StringView String) noexcept; - }; -} // namespace Mamba \ No newline at end of file From 428814380826d39f7a9ba470c753dd07e0b0f010 Mon Sep 17 00:00:00 2001 From: heckerpowered <72550834+heckerpowered@users.noreply.github.com> Date: Mon, 16 Sep 2024 17:14:22 +0800 Subject: [PATCH 19/30] Implement diagnostic printer --- src/Mamba/Code Analysis/Diagnostic.cpp | 21 ++++ src/Mamba/Code Analysis/Diagnostic.h | 6 + src/Mamba/Code Analysis/DiagnosticBag.cpp | 4 +- src/Mamba/Code Analysis/Text/SourceText.cpp | 2 +- src/Mamba/Code Analysis/Text/TextLocation.cpp | 13 ++- src/Mamba/Code Analysis/Text/TextLocation.h | 7 +- src/Mamba/Core/DiagnosticPrinter.h | 106 ++++++++++++++++++ src/Mamba/Core/International/Language.h | 32 ++++++ src/Mamba/Core/International/LanguageCode.h | 11 ++ 9 files changed, 194 insertions(+), 8 deletions(-) create mode 100644 src/Mamba/Code Analysis/Diagnostic.cpp create mode 100644 src/Mamba/Core/International/Language.h create mode 100644 src/Mamba/Core/International/LanguageCode.h diff --git a/src/Mamba/Code Analysis/Diagnostic.cpp b/src/Mamba/Code Analysis/Diagnostic.cpp new file mode 100644 index 0000000..a153d9f --- /dev/null +++ b/src/Mamba/Code Analysis/Diagnostic.cpp @@ -0,0 +1,21 @@ +#include "Diagnostic.h" +#include "TextLine.h" + +using namespace Mamba; + +std::size_t Diagnostic::LineNumber() const noexcept +{ + return Location.StartLine() + 1; +} + +const TextLine& Diagnostic::Line() const noexcept +{ + auto LineIndex = Location.StartLine(); + return Location.Text.Lines()[LineIndex]; +} + +StringView Diagnostic::LineView() const noexcept +{ + auto CurrentLine = Line(); + return Location.Text.SubView(CurrentLine.Start, CurrentLine.Length); +} \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Diagnostic.h b/src/Mamba/Code Analysis/Diagnostic.h index bc92361..7767936 100644 --- a/src/Mamba/Code Analysis/Diagnostic.h +++ b/src/Mamba/Code Analysis/Diagnostic.h @@ -18,5 +18,11 @@ namespace Mamba DiagnosticSeverity Severity; TextLocation Location; String Message; + + std::size_t LineNumber() const noexcept; + const TextLine& Line() const noexcept; + StringView LineView() const noexcept; + + StringView FileName() const noexcept; }; } // namespace Mamba diff --git a/src/Mamba/Code Analysis/DiagnosticBag.cpp b/src/Mamba/Code Analysis/DiagnosticBag.cpp index 1dd0919..b7e3ca7 100644 --- a/src/Mamba/Code Analysis/DiagnosticBag.cpp +++ b/src/Mamba/Code Analysis/DiagnosticBag.cpp @@ -36,7 +36,7 @@ namespace Mamba void DiagnosticBag::ReportInvalidCharacter(const TextLocation Location, const Char Character) noexcept { - ReportError(Location, TEXT("Invalid character '"), Character, TEXT("'.")); + ReportError(Location, TEXT("Invalid character '"), fast_io::mnp::chvw(Character), TEXT("'.")); } void DiagnosticBag::ReportUnterminatedString(const TextLocation Location) noexcept @@ -106,7 +106,7 @@ namespace Mamba TEXT(":"), Location.StartLine(), TEXT(":"), - Location.StartCharacter() + Location.RelativeStartCharacter() ); } diff --git a/src/Mamba/Code Analysis/Text/SourceText.cpp b/src/Mamba/Code Analysis/Text/SourceText.cpp index 1856422..f8c3124 100644 --- a/src/Mamba/Code Analysis/Text/SourceText.cpp +++ b/src/Mamba/Code Analysis/Text/SourceText.cpp @@ -121,7 +121,7 @@ std::vector SourceText::SplitLines(const SourceTextInfo& Info) { auto LineLength = Position - LineStart; auto LineLengthIncludingLineBreak = LineLength + LineBreakWidth; - Lines.emplace_back(LineStart, LineLength, LineLengthIncludingLineBreak); + Lines.emplace_back(LineStart + 1, LineLength, LineLengthIncludingLineBreak); Position += LineBreakWidth; LineStart = Position; diff --git a/src/Mamba/Code Analysis/Text/TextLocation.cpp b/src/Mamba/Code Analysis/Text/TextLocation.cpp index aae549d..2c7fd74 100644 --- a/src/Mamba/Code Analysis/Text/TextLocation.cpp +++ b/src/Mamba/Code Analysis/Text/TextLocation.cpp @@ -8,17 +8,24 @@ std::size_t TextLocation::StartLine() const noexcept return Text.LineIndex(Text.RelativeBegin(View)); } -std::size_t TextLocation::StartCharacter() const noexcept +std::size_t TextLocation::AbsoluteStartCharacter() const noexcept { return Text.RelativeBegin(View); } +std::size_t TextLocation::RelativeStartCharacter() const noexcept +{ + auto Line = Text.Lines()[StartLine()]; + return AbsoluteStartCharacter() - Line.Start; +} + std::size_t TextLocation::EndLine() const noexcept { return Text.LineIndex(Text.RelativeEnd(View)); } -std::size_t TextLocation::EndCharacter() const noexcept +std::size_t TextLocation::AbsoluteEndCharacter() const noexcept { - return Text.RelativeEnd(View); + auto Line = Text.Lines()[EndLine()]; + return AbsoluteEndCharacter() - Line.End(); } \ No newline at end of file diff --git a/src/Mamba/Code Analysis/Text/TextLocation.h b/src/Mamba/Code Analysis/Text/TextLocation.h index 9f9b68a..d07cf1c 100644 --- a/src/Mamba/Code Analysis/Text/TextLocation.h +++ b/src/Mamba/Code Analysis/Text/TextLocation.h @@ -16,8 +16,11 @@ namespace Mamba } [[nodiscard]] std::size_t StartLine() const noexcept; - [[nodiscard]] std::size_t StartCharacter() const noexcept; + [[nodiscard]] std::size_t AbsoluteStartCharacter() const noexcept; + [[nodiscard]] std::size_t RelativeStartCharacter() const noexcept; + [[nodiscard]] std::size_t EndLine() const noexcept; - [[nodiscard]] std::size_t EndCharacter() const noexcept; + [[nodiscard]] std::size_t AbsoluteEndCharacter() const noexcept; + [[nodiscard]] std::size_t RelativeEndCharacter() const noexcept; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Core/DiagnosticPrinter.h b/src/Mamba/Core/DiagnosticPrinter.h index 325b36b..526b0e9 100644 --- a/src/Mamba/Core/DiagnosticPrinter.h +++ b/src/Mamba/Core/DiagnosticPrinter.h @@ -38,11 +38,116 @@ namespace Mamba } } + template + constexpr std::string SourceLocation(const Diagnostic& Diagnostic) noexcept + { + // ::: : + if constexpr (WithColor) + { + auto SeverityColor = DiagnosticColor(Diagnostic.Severity); + auto Severity = SeverityString(Diagnostic.Severity); + + return fast_io::concat( + fast_io::mnp::code_cvt(Diagnostic.Location.FileName()), + ":", + Diagnostic.LineNumber(), + ":", + Diagnostic.Location.RelativeStartCharacter(), + ": ", + Color(Severity, SeverityColor), + Color(": ", SeverityColor), + fast_io::mnp::code_cvt(Diagnostic.Message) + ); + } + + auto Severity = SeverityString(Diagnostic.Severity); + return fast_io::concat( + fast_io::mnp::code_cvt(Diagnostic.Location.FileName()), + ":", + Diagnostic.LineNumber(), + ":", + Diagnostic.Location.RelativeStartCharacter(), + ": ", + Severity, + ": ", + fast_io::mnp::code_cvt(Diagnostic.Message) + ); + } + + constexpr std::string LineView(const Diagnostic& Diagnostic) noexcept + { + // | + return fast_io::concat(" ", Diagnostic.LineNumber(), " | ", fast_io::mnp::code_cvt(Diagnostic.LineView())); + } + + template + constexpr std::string LocationGuide(const Diagnostic& Diagnostic) noexcept + { + constexpr std::string_view PointerCharacter = Fun ? "πŸ€“πŸ‘†" : "^"; + constexpr auto PointerCharacterSize = Fun ? 2 : 1; + + constexpr auto IndentCharacter = ' '; + + // 5 = indent (2 spaces) + " | " + auto BaseIndent = fast_io::concat(Diagnostic.LineNumber()).length() + 5; + auto ExtraIndent = Diagnostic.Location.RelativeStartCharacter(); + auto Length = Diagnostic.Location.View.size(); + auto Indent = std::string(BaseIndent + ExtraIndent - (Fun ? 2 : 0), IndentCharacter); + + if constexpr (Fun) + { + constexpr auto WaveCharacter = U'πŸ‘†'; + auto WaveLength = Length <= PointerCharacterSize ? 0 : Length - PointerCharacterSize; + if (WaveLength == 0) + { + return fast_io::concat( + Indent, + PointerCharacter + ); + } + + auto WaveString = std::u32string(WaveCharacter, WaveLength); + return fast_io::concat( + Indent, + PointerCharacter, + fast_io::mnp::code_cvt(WaveString) + ); + } + + constexpr auto WaveCharacter = '^'; + auto WaveString = std::string(WaveCharacter, Length - PointerCharacter.size()); + + if constexpr (WithColor) + { + return fast_io::concat( + Indent, + Color(PointerCharacter, Colors::BrightForegroundGreen), + Color(WaveString, Colors::BrightForegroundGreen) + ); + } + + return fast_io::concat( + Indent, + PointerCharacter, + WaveString + ); + } + template constexpr void print_define(fast_io::io_reserve_type_t, auto out [[maybe_unused]], const Diagnostic& Diagnostic) noexcept { using namespace fast_io::io; + print( + out, + SourceLocation(Diagnostic), + "\n", + LineView(Diagnostic), + "\n", + LocationGuide(Diagnostic) + ); + + /** auto SeverityColor = DiagnosticColor(Diagnostic.Severity); auto Severity = SeverityString(Diagnostic.Severity); @@ -83,5 +188,6 @@ namespace Mamba // { // print(out, Color("~", Colors::BrightForegroundGreen)); //} +**/ } } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Core/International/Language.h b/src/Mamba/Core/International/Language.h new file mode 100644 index 0000000..ae9b7d8 --- /dev/null +++ b/src/Mamba/Core/International/Language.h @@ -0,0 +1,32 @@ +#pragma once + +#include + +#include + +namespace Mamba +{ + struct LanguageIntermediateRepresentation + { + std::string_view Name; + std::string_view Content; + std::size_t InjectPointCount; + }; + + struct Language + { + std::string_view LanguageCode; + }; + + class LanguageManager + { + public: + static constexpr std::string_view LanguagesFolder = "Languages/"; + + static Language LoadLanguage(std::string_view LanguageCode) noexcept + { + auto LanguageFile = fast_io::concat("Languages/", LanguageCode); + auto FileLoader = fast_io::native_file_loader(LanguageFile); + } + }; +} // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Core/International/LanguageCode.h b/src/Mamba/Core/International/LanguageCode.h new file mode 100644 index 0000000..dda76a3 --- /dev/null +++ b/src/Mamba/Core/International/LanguageCode.h @@ -0,0 +1,11 @@ +#pragma once + +namespace Mamba +{ + // ISO 639-1 language codes + namespace LanguageCodes + { + constexpr auto Chinese = "zh"; + constexpr auto English = "en"; + } // namespace LanguageCodes +} // namespace Mamba \ No newline at end of file From 3a5f7eacd586bd9614a77376bb09afdb279a264f Mon Sep 17 00:00:00 2001 From: heckerpowered <72550834+heckerpowered@users.noreply.github.com> Date: Mon, 16 Sep 2024 17:52:20 +0800 Subject: [PATCH 20/30] Add diagnostics --- src/Mamba/Code Analysis/Binding/Binder.cpp | 13 +++-- src/Mamba/Code Analysis/DiagnosticBag.cpp | 34 ++++++++----- src/Mamba/Code Analysis/DiagnosticBag.h | 6 ++- src/Mamba/Core/DiagnosticPrinter.h | 55 +++------------------- src/Mamba/main.cpp | 1 - 5 files changed, 42 insertions(+), 67 deletions(-) diff --git a/src/Mamba/Code Analysis/Binding/Binder.cpp b/src/Mamba/Code Analysis/Binding/Binder.cpp index 2c381f1..bf08fec 100644 --- a/src/Mamba/Code Analysis/Binding/Binder.cpp +++ b/src/Mamba/Code Analysis/Binding/Binder.cpp @@ -4,6 +4,7 @@ #include "BoundExpressionStatement.h" #include "MambaCore.h" #include "SyntaxFacts.h" +#include using namespace Mamba; @@ -202,6 +203,7 @@ BoundVariableDeclaration* Binder::BindVariableDeclaration(const VariableDeclarat Initializer->ConstantValue() ); + Scope->Declare(Variable); return new BoundVariableDeclaration(VariableDeclaration, Variable, Initializer); } @@ -311,13 +313,16 @@ BoundVariableExpression* Binder::BindNameExpression(const NameExpressionSyntax* auto Variables = Scope->LookupVariable(Name); if (Variables.empty()) { - // TODO: Diagnostics - undeclaraed identifier - return {}; + auto ErrorVariable = new VariableSymbol(TEXT(""), false, &TypeSymbol::Void, {}); + Scope->Declare(ErrorVariable); + + Diagnostics.ReportUndeclaredIdentifier(NameExpression->Location(), Name); + return new BoundVariableExpression(NameExpression, ErrorVariable); } else if (Variables.size() > 1) { - // TODO: Diagnostics - ambiguous identifier - return {}; + Diagnostics.ReportAmbiguousIdentifier(NameExpression->Location(), Name); + return new BoundVariableExpression(NameExpression, Variables.front()); } return new BoundVariableExpression(NameExpression, Variables.front()); diff --git a/src/Mamba/Code Analysis/DiagnosticBag.cpp b/src/Mamba/Code Analysis/DiagnosticBag.cpp index b7e3ca7..5e826c1 100644 --- a/src/Mamba/Code Analysis/DiagnosticBag.cpp +++ b/src/Mamba/Code Analysis/DiagnosticBag.cpp @@ -36,32 +36,32 @@ namespace Mamba void DiagnosticBag::ReportInvalidCharacter(const TextLocation Location, const Char Character) noexcept { - ReportError(Location, TEXT("Invalid character '"), fast_io::mnp::chvw(Character), TEXT("'.")); + ReportError(Location, TEXT("ζ— ζ•ˆε­—η¬¦ '"), fast_io::mnp::chvw(Character), TEXT("'.")); } void DiagnosticBag::ReportUnterminatedString(const TextLocation Location) noexcept { - ReportError(Location, TEXT("Unterminated string literal.")); + ReportError(Location, TEXT("ζœͺη»“ζŸηš„ε­—η¬¦δΈ²ε­—ι’ι‡")); } void DiagnosticBag::ReportInvalidDecimal(const TextLocation Location, const StringView Literal) noexcept { - ReportError(Location, Concat(TEXT("Invalid decimal number '"), Literal, TEXT("'."))); + ReportError(Location, Concat(TEXT("ζ— ζ•ˆεθΏ›εˆΆε­—ι’ι‡ '"), Literal, TEXT("'."))); } void DiagnosticBag::ReportInvalidHexadecimal(const TextLocation Location, const StringView Literal) noexcept { - ReportError(Location, Concat(TEXT("Invalid hexadecimal number '"), Literal, TEXT("'."))); + ReportError(Location, Concat(TEXT("ζ— ζ•ˆεε…­θΏ›εˆΆε­—ι’ι‡ '"), Literal, TEXT("'."))); } void DiagnosticBag::ReportInvalidBinary(const TextLocation Location, const StringView Literal) noexcept { - ReportError(Location, Concat(TEXT("Invalid binary number '"), Literal, TEXT("'."))); + ReportError(Location, Concat(TEXT("ζ— ζ•ˆδΊŒθΏ›εˆΆε­—ι’ι‡ '"), Literal, TEXT("'."))); } void DiagnosticBag::ReportInvalidOctal(const TextLocation Location, const StringView Literal) noexcept { - ReportError(Location, Concat(TEXT("Invalid octal number '"), Literal, TEXT("'."))); + ReportError(Location, Concat(TEXT("ζ— ζ•ˆε…«θΏ›εˆΆε­—ι’ι‡ '"), Literal, TEXT("'."))); } void DiagnosticBag::ReportUnexpectedToken( @@ -73,7 +73,7 @@ namespace Mamba // Unexpected token 'Kind', Expected: 'ExpectedKind'. if (ExpectedKind == SyntaxKind::IdentifierToken) { - ReportError(Location, TEXT("δΈε†™ε‚ζ•°η±»εž‹θƒ†ε€§εŒ…ε€©πŸ˜‘")); + ReportError(Location, TEXT("ζ­€ε€„εΊ”ζœ‰ζ ‡θ―†η¬¦")); } else { @@ -91,17 +91,17 @@ namespace Mamba void DiagnosticBag::ReportDiscardExpressionValue(const TextLocation Location) noexcept { - ReportWarning(Location, TEXT("The result of the expression is discarded.")); + ReportWarning(Location, TEXT("θ‘¨θΎΎεΌηš„η»“ζžœθ’«εΏ½η•₯")); } - void DiagnosticBag::ReportVariableAlreadyDeclared(const TextLocation Location, const StringView Name) noexcept + void DiagnosticBag::ReportVariableAlreadyDeclared(const TextLocation Location, StringView Name) noexcept { // Variable 'Name' is already declared, previous declaration at FileName:StartLine:StartCharacter. ReportError( Location, - TEXT("Variable '"), + TEXT("ε˜ι‡ '"), Name, - TEXT("' is already declared, previous declaration at "), + TEXT("' ε·²εœ¨ζ­€ε€„ε£°ζ˜ŽθΏ‡: "), Location.FileName(), TEXT(":"), Location.StartLine(), @@ -112,7 +112,7 @@ namespace Mamba void DiagnosticBag::ReportUnreachableCode(const TextLocation Location) noexcept { - ReportWarning(Location, TEXT("Unreachable code.")); + ReportWarning(Location, TEXT("ζ­€ε€„ζ°ΈθΏœδΈδΌšθ’«ζ‰§θ‘Œ")); } void DiagnosticBag::ReportUnreachableCode(const SyntaxNode* Node) noexcept @@ -163,4 +163,14 @@ namespace Mamba break; } } + + void DiagnosticBag::ReportUndeclaredIdentifier(TextLocation Location, StringView Name) noexcept + { + ReportError(Location, TEXT("ζœͺε£°ζ˜Žηš„ζ ‡θ―†η¬¦ '"), Name, TEXT("'.")); + } + + void DiagnosticBag::ReportAmbiguousIdentifier(TextLocation Location, StringView Name) noexcept + { + ReportError(Location, TEXT("ζ ‡θ―†η¬¦ζœ‰ζ­§δΉ‰ '"), Name, TEXT("'.")); + } } // namespace Mamba diff --git a/src/Mamba/Code Analysis/DiagnosticBag.h b/src/Mamba/Code Analysis/DiagnosticBag.h index 760f360..6fd90fa 100644 --- a/src/Mamba/Code Analysis/DiagnosticBag.h +++ b/src/Mamba/Code Analysis/DiagnosticBag.h @@ -1,6 +1,5 @@ #pragma once -#include #include #include "Diagnostic.h" @@ -52,9 +51,12 @@ namespace Mamba ) noexcept; void ReportDiscardExpressionValue(const TextLocation Location) noexcept; - void ReportVariableAlreadyDeclared(const TextLocation Location, const StringView Name) noexcept; + void ReportVariableAlreadyDeclared(const TextLocation Location, StringView Name) noexcept; void ReportUnreachableCode(const TextLocation Location) noexcept; void ReportUnreachableCode(const SyntaxNode* Node) noexcept; + + void ReportUndeclaredIdentifier(TextLocation Location, StringView Name) noexcept; + void ReportAmbiguousIdentifier(TextLocation Location, StringView Name) noexcept; }; } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/Core/DiagnosticPrinter.h b/src/Mamba/Core/DiagnosticPrinter.h index 526b0e9..06f751c 100644 --- a/src/Mamba/Core/DiagnosticPrinter.h +++ b/src/Mamba/Core/DiagnosticPrinter.h @@ -1,10 +1,12 @@ #pragma once -#include "Colors.h" -#include "Diagnostic.h" -#include "fast_io_core_impl/codecvt/general.h" #include #include +#include + +#include "Colors.h" +#include "Diagnostic.h" +#include "MambaCore.h" namespace Mamba { @@ -114,8 +116,8 @@ namespace Mamba ); } - constexpr auto WaveCharacter = '^'; - auto WaveString = std::string(WaveCharacter, Length - PointerCharacter.size()); + constexpr auto WaveCharacter = '~'; + auto WaveString = std::string(Length - PointerCharacter.size(), WaveCharacter); if constexpr (WithColor) { @@ -146,48 +148,5 @@ namespace Mamba "\n", LocationGuide(Diagnostic) ); - - /** - auto SeverityColor = DiagnosticColor(Diagnostic.Severity); - auto Severity = SeverityString(Diagnostic.Severity); - - println( - out, - fast_io::mnp::code_cvt(Diagnostic.Location.FileName()), // Color(fast_io::mnp::code_cvt(Diagnostic.Location.FileName()), Colors::BrightForegroundWhite), - ":", // Color(":", Colors::BrightForegroundWhite), - Diagnostic.Location.StartLine(), // Color(Diagnostic.Location.StartLine(), Colors::BrightForegroundWhite), - ":", // Color(":", Colors::BrightForegroundWhite), - Diagnostic.Location.StartCharacter(), // Color(Diagnostic.Location.StartCharacter(), Colors::BrightForegroundWhite), - ": ", - Color(Severity, SeverityColor), - Color(": ", SeverityColor), - fast_io::mnp::code_cvt(Diagnostic.Message) // Color(fast_io::mnp::code_cvt(Diagnostic.Message), Colors::BrightForegroundWhite) - ); - - auto Text = Diagnostic.Location.Text; - auto LineIndex = Diagnostic.Location.StartLine(); - auto Line = Text.Lines()[LineIndex]; - auto LineView = Text.SubView(Line.Start, Line.Length); - println(out, " ", LineIndex + 1, " | ", fast_io::mnp::code_cvt(LineView)); - - auto Indent = fast_io::concat(LineIndex + 1).length() + 5; - - for (auto Index [[maybe_unused]] : std::views::iota(0uz, Indent)) - { - print(out, " "); - } - - auto RelativeBegin = Diagnostic.Location.StartCharacter() - Line.Start; - for (auto Index [[maybe_unused]] : std::views::iota(0uz, RelativeBegin - 2)) - { - print(out, " "); - } - - print(out, Color("πŸ€“πŸ‘†", Colors::BrightForegroundGreen)); - // for (auto Index [[maybe_unused]] : std::views::iota(1uz, Length)) - // { - // print(out, Color("~", Colors::BrightForegroundGreen)); - //} -**/ } } // namespace Mamba \ No newline at end of file diff --git a/src/Mamba/main.cpp b/src/Mamba/main.cpp index 3ad2944..66f0248 100644 --- a/src/Mamba/main.cpp +++ b/src/Mamba/main.cpp @@ -1,5 +1,4 @@ #include "Mamba.h" -#include using namespace Mamba; From e60d351ed00e9bc5a7762cab0cdc7a8a9754bba4 Mon Sep 17 00:00:00 2001 From: heckerpowered <72550834+heckerpowered@users.noreply.github.com> Date: Fri, 20 Sep 2024 12:13:38 +0800 Subject: [PATCH 21/30] remove unnecessary includes --- src/Mamba/MambaCore.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Mamba/MambaCore.h b/src/Mamba/MambaCore.h index 0ce160a..d65db98 100644 --- a/src/Mamba/MambaCore.h +++ b/src/Mamba/MambaCore.h @@ -1,7 +1,6 @@ #pragma once #include "Colors.h" -#include "fast_io_core_impl/concepts/operation_details.h" #include #include #include From 2e35aab7b70aad02c3343abc5fd3f7d5f69dbc84 Mon Sep 17 00:00:00 2001 From: heckerpowered <72550834+heckerpowered@users.noreply.github.com> Date: Fri, 20 Sep 2024 12:15:00 +0800 Subject: [PATCH 22/30] Chinese Localization --- src/Mamba/Core/DiagnosticPrinter.h | 55 ++++++++---------------------- 1 file changed, 15 insertions(+), 40 deletions(-) diff --git a/src/Mamba/Core/DiagnosticPrinter.h b/src/Mamba/Core/DiagnosticPrinter.h index 06f751c..1c10c65 100644 --- a/src/Mamba/Core/DiagnosticPrinter.h +++ b/src/Mamba/Core/DiagnosticPrinter.h @@ -30,11 +30,11 @@ namespace Mamba switch (Severity) { case DiagnosticSeverity::Error: - return "error"; + return "ι”™θ――"; case DiagnosticSeverity::Warning: - return "warning"; + return "θ­¦ε‘Š"; case DiagnosticSeverity::Information: - return "info"; + return "俑息"; default: std::unreachable(); } @@ -86,53 +86,28 @@ namespace Mamba constexpr std::string LocationGuide(const Diagnostic& Diagnostic) noexcept { constexpr std::string_view PointerCharacter = Fun ? "πŸ€“πŸ‘†" : "^"; - constexpr auto PointerCharacterSize = Fun ? 2 : 1; + constexpr std::string_view WaveCharacter = Fun ? "πŸ‘†" : "~"; + constexpr std::string_view IndentCharacter = " "; - constexpr auto IndentCharacter = ' '; + constexpr auto PointerCharacterSize = Fun ? 2 : 1; // 5 = indent (2 spaces) + " | " - auto BaseIndent = fast_io::concat(Diagnostic.LineNumber()).length() + 5; - auto ExtraIndent = Diagnostic.Location.RelativeStartCharacter(); - auto Length = Diagnostic.Location.View.size(); - auto Indent = std::string(BaseIndent + ExtraIndent - (Fun ? 2 : 0), IndentCharacter); + auto PrefixIndent = fast_io::concat(Diagnostic.LineNumber()).length() + 5; + auto ContentIndent = Diagnostic.Location.RelativeStartCharacter(); + auto IndentLength = PrefixIndent + ContentIndent; - if constexpr (Fun) - { - constexpr auto WaveCharacter = U'πŸ‘†'; - auto WaveLength = Length <= PointerCharacterSize ? 0 : Length - PointerCharacterSize; - if (WaveLength == 0) - { - return fast_io::concat( - Indent, - PointerCharacter - ); - } - - auto WaveString = std::u32string(WaveCharacter, WaveLength); - return fast_io::concat( - Indent, - PointerCharacter, - fast_io::mnp::code_cvt(WaveString) - ); - } + auto Indent = std::views::repeat(IndentCharacter, IndentLength) | std::views::join | std::ranges::to(); - constexpr auto WaveCharacter = '~'; - auto WaveString = std::string(Length - PointerCharacter.size(), WaveCharacter); + auto Length = Diagnostic.Location.View.size(); + auto WaveLength = Length <= PointerCharacterSize ? 0 : Length - PointerCharacterSize; + auto Wave = std::views::repeat(WaveCharacter, WaveLength) | std::views::join | std::ranges::to(); if constexpr (WithColor) { - return fast_io::concat( - Indent, - Color(PointerCharacter, Colors::BrightForegroundGreen), - Color(WaveString, Colors::BrightForegroundGreen) - ); + return fast_io::concat(Indent, Color(PointerCharacter, Colors::BrightForegroundGreen), Color(Wave, Colors::BrightForegroundGreen)); } - return fast_io::concat( - Indent, - PointerCharacter, - WaveString - ); + return fast_io::concat(Indent, PointerCharacter, Wave); } template From b6b24159fbec7c539f1ddaed5c889dc8fd2e354a Mon Sep 17 00:00:00 2001 From: heckerpowered <72550834+heckerpowered@users.noreply.github.com> Date: Fri, 20 Sep 2024 12:19:59 +0800 Subject: [PATCH 23/30] Add support to CI builds for windows --- .github/workflows/publish.yml | 36 ++++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 3dfaf52..26169d8 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -7,7 +7,7 @@ on: branches: ["main"] jobs: - build: + build-macOS: runs-on: macos-latest steps: @@ -37,5 +37,35 @@ jobs: with: name: Mamba path: | - build/macosx/arm64/release/Jvav - build/windows/x64/release/Jvav.exe + build/macosx/arm64/release/mamba + + build-windows: + runs-on: windows-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup xmake + uses: xmake-io/github-action-setup-xmake@v1 + with: + xmake-version: latest + + - name: Setup Scoop + run: | + Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser + Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression + + - name: Setup LLVM + run: scoop install llvm + + - name: Build + run: ./build.sh + + - name: Upload Artifacts + uses: actions/upload-artifact@v4 + with: + name: Mamba + path: | + build/windows/x64/release/mamba.exe + + From 88c195b7e4d89304d3a085f5fd8f3b27fb183931 Mon Sep 17 00:00:00 2001 From: heckerpowered <72550834+heckerpowered@users.noreply.github.com> Date: Fri, 20 Sep 2024 12:24:19 +0800 Subject: [PATCH 24/30] allow test github-actions in this branch --- .github/workflows/publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 26169d8..d3cb077 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -2,7 +2,7 @@ name: Publish to GitHub on: push: - branches: ["main"] + branches: ["main", "*"] pull_request: branches: ["main"] From 96946039796f7a20a5bced0028a1356ee72d49f8 Mon Sep 17 00:00:00 2001 From: heckerpowered <72550834+heckerpowered@users.noreply.github.com> Date: Fri, 20 Sep 2024 12:24:35 +0800 Subject: [PATCH 25/30] allow test github-actions in this branch --- .github/workflows/publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index d3cb077..89880c7 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -2,7 +2,7 @@ name: Publish to GitHub on: push: - branches: ["main", "*"] + branches: ["main", "github-action"] pull_request: branches: ["main"] From 1130078dcc19760b892ad661e0e0cfa361103a5b Mon Sep 17 00:00:00 2001 From: heckerpowered <72550834+heckerpowered@users.noreply.github.com> Date: Fri, 20 Sep 2024 13:31:38 +0800 Subject: [PATCH 26/30] Skip scoop install --- .github/workflows/publish.yml | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 89880c7..30b05a3 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -30,7 +30,9 @@ jobs: run: chmod +x build.sh - name: Build - run: ./build.sh + run: | + xmake f -p macosx -a arm64 -m release + xmake -y - name: Upload Artifacts uses: actions/upload-artifact@v4 @@ -50,16 +52,10 @@ jobs: with: xmake-version: latest - - name: Setup Scoop - run: | - Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser - Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression - - - name: Setup LLVM - run: scoop install llvm - - name: Build - run: ./build.sh + run: | + xmake f -p windows -a x64 -m release + xmake -y - name: Upload Artifacts uses: actions/upload-artifact@v4 From 8b20a7804f83dd6aa0bd20f4d436c7e6744b09ed Mon Sep 17 00:00:00 2001 From: heckerpowered <72550834+heckerpowered@users.noreply.github.com> Date: Fri, 20 Sep 2024 13:34:24 +0800 Subject: [PATCH 27/30] remove uncessary variable --- xmake.lua | 2 -- 1 file changed, 2 deletions(-) diff --git a/xmake.lua b/xmake.lua index 0f9d0cf..2e67ee3 100644 --- a/xmake.lua +++ b/xmake.lua @@ -12,8 +12,6 @@ local includedirs = { "src/Mamba/Code Generation", } -local llvm_config = "/opt/homebrew/opt/llvm/bin/llvm-config" - rule("libllvm") do on_config(function (target) From 1eceb397aecf4cc803777f95ed21a313730e04aa Mon Sep 17 00:00:00 2001 From: heckerpowered <72550834+heckerpowered@users.noreply.github.com> Date: Wed, 2 Oct 2024 22:04:14 +0800 Subject: [PATCH 28/30] =?UTF-8?q?=E5=B0=9D=E8=AF=95=E7=BC=93=E8=A7=A3?= =?UTF-8?q?=E6=89=BE=E4=B8=8D=E5=88=B0llvm-config=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/publish.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 30b05a3..b96d44c 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -25,6 +25,9 @@ jobs: - name: Setup LLVM run: brew install llvm + - name: Setup Environment Variables + run: echo 'export PATH="/opt/homebrew/opt/llvm/bin:$PATH"' >> /Users/runner/.bash_profile + - name: Setup Build Script if: ${{ runner.os != 'Windows' }} run: chmod +x build.sh @@ -62,6 +65,4 @@ jobs: with: name: Mamba path: | - build/windows/x64/release/mamba.exe - - + build/windows/x64/release/mamba.exe \ No newline at end of file From 052c78134be97fa97f5b90a77021d70c02af8b82 Mon Sep 17 00:00:00 2001 From: heckerpowered <72550834+heckerpowered@users.noreply.github.com> Date: Wed, 2 Oct 2024 22:12:34 +0800 Subject: [PATCH 29/30] Add support to linux --- .github/workflows/publish.yml | 38 ++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index b96d44c..338e866 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -65,4 +65,40 @@ jobs: with: name: Mamba path: | - build/windows/x64/release/mamba.exe \ No newline at end of file + build/windows/x64/release/mamba.exe + + build-linux: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup xmake + uses: xmake-io/github-action-setup-xmake@v1 + with: + xmake-version: latest + + - name: Setup Homebrew + run: /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" + + - name: Setup LLVM + run: brew install llvm + + - name: Setup Environment Variables + run: echo 'export PATH="/opt/homebrew/opt/llvm/bin:$PATH"' >> /Users/runner/.bash_profile + + - name: Setup Build Script + if: ${{ runner.os != 'Windows' }} + run: chmod +x build.sh + + - name: Build + run: | + xmake f -p macosx -a arm64 -m release + xmake -y + + - name: Upload Artifacts + uses: actions/upload-artifact@v4 + with: + name: Mamba + path: | + build/macosx/arm64/release/mamba \ No newline at end of file From 4a3908496fffed6fafc0f28aa7566b8699553ca1 Mon Sep 17 00:00:00 2001 From: heckerpowered <72550834+heckerpowered@users.noreply.github.com> Date: Thu, 3 Oct 2024 15:33:07 +0800 Subject: [PATCH 30/30] try self-hosted runner --- .github/workflows/self-hosted.yml | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 .github/workflows/self-hosted.yml diff --git a/.github/workflows/self-hosted.yml b/.github/workflows/self-hosted.yml new file mode 100644 index 0000000..4a69a97 --- /dev/null +++ b/.github/workflows/self-hosted.yml @@ -0,0 +1,27 @@ +name: Publish to GitHub (Self Hosted) + +on: + push: + branches: ["main", "github-action"] + pull_request: + branches: ["main"] + +jobs: + build-macOS: + runs-on: self-hosted + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Build + run: | + xmake f -p macosx -a arm64 -m release + xmake -y + + - name: Upload Artifacts + uses: actions/upload-artifact@v4 + with: + name: Mamba + path: | + build/macosx/arm64/release/mamba \ No newline at end of file