Some fixes for statements to string, added more tests
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
@@ -27,6 +27,11 @@ namespace Porygon::Binder {
|
||||
};
|
||||
|
||||
class BoundStatement {
|
||||
protected:
|
||||
inline void DrawIndents(std::stringstream& stream, size_t indents) const{
|
||||
for (size_t i = 0; i < indents; i++)
|
||||
stream << "\t";
|
||||
}
|
||||
public:
|
||||
[[nodiscard]]
|
||||
virtual BoundStatementKind GetKind() const = 0;
|
||||
@@ -58,8 +63,7 @@ namespace Porygon::Binder {
|
||||
}
|
||||
|
||||
void GetTreeString(std::stringstream& stream, size_t indents) const final{
|
||||
for (size_t i = 0; i < indents; i++)
|
||||
stream << "\t";
|
||||
DrawIndents(stream, indents);
|
||||
stream << "BreakStatement";
|
||||
}
|
||||
};
|
||||
@@ -88,8 +92,7 @@ namespace Porygon::Binder {
|
||||
}
|
||||
|
||||
void GetTreeString(std::stringstream& stream, size_t indents) const override{
|
||||
for (size_t i = 0; i < indents; i++)
|
||||
stream << "\t";
|
||||
DrawIndents(stream, indents);
|
||||
stream << "BlockStatement";
|
||||
for (auto s : _statements){
|
||||
stream << endl;
|
||||
@@ -140,8 +143,7 @@ namespace Porygon::Binder {
|
||||
}
|
||||
|
||||
void GetTreeString(std::stringstream& stream, size_t indents) const override{
|
||||
for (size_t i = 0; i < indents; i++)
|
||||
stream << "\t";
|
||||
DrawIndents(stream, indents);
|
||||
stream << "ExpressionStatement" << endl;
|
||||
_expression->GetTreeString(stream, indents + 1);
|
||||
}
|
||||
@@ -176,9 +178,8 @@ namespace Porygon::Binder {
|
||||
}
|
||||
|
||||
void GetTreeString(std::stringstream& stream, size_t indents) const override{
|
||||
for (size_t i = 0; i < indents; i++)
|
||||
stream << "\t";
|
||||
stream << "Assignment -> " << _key->GetIdentifier()->GetString() << endl;
|
||||
DrawIndents(stream, indents);
|
||||
stream << "Assignment -> " << _key->GetIdentifier()->GetDebugString() << endl;
|
||||
_expression->GetTreeString(stream, indents + 1);
|
||||
}
|
||||
};
|
||||
@@ -212,8 +213,7 @@ namespace Porygon::Binder {
|
||||
}
|
||||
|
||||
void GetTreeString(std::stringstream& stream, size_t indents) const override{
|
||||
for (size_t i = 0; i < indents; i++)
|
||||
stream << "\t";
|
||||
DrawIndents(stream, indents);
|
||||
stream << "IndexAssignment" << endl;
|
||||
_indexExpression->GetTreeString(stream, indents + 1);
|
||||
stream << endl;
|
||||
@@ -243,10 +243,10 @@ namespace Porygon::Binder {
|
||||
}
|
||||
|
||||
void GetTreeString(std::stringstream& stream, size_t indents) const override{
|
||||
for (size_t i = 0; i < indents; i++)
|
||||
stream << "\t";
|
||||
stream << "ReturnStatement" << endl;
|
||||
DrawIndents(stream, indents);
|
||||
stream << "ReturnStatement";
|
||||
if (_expression != nullptr){
|
||||
stream << endl;
|
||||
_expression->GetTreeString(stream, indents + 1);
|
||||
}
|
||||
}
|
||||
@@ -289,20 +289,18 @@ namespace Porygon::Binder {
|
||||
}
|
||||
|
||||
void GetTreeString(std::stringstream& stream, size_t indents) const override{
|
||||
for (size_t i = 0; i < indents; i++)
|
||||
stream << "\t";
|
||||
DrawIndents(stream, indents);
|
||||
stream << "ConditionalStatement" << endl;
|
||||
for (size_t i = 0; i < indents; i++)
|
||||
stream << "\t";
|
||||
DrawIndents(stream, indents);
|
||||
stream << "Condition:" << endl;
|
||||
_condition->GetTreeString(stream, indents + 1);
|
||||
for (size_t i = 0; i < indents; i++)
|
||||
stream << "\t";
|
||||
stream << endl;
|
||||
DrawIndents(stream, indents);
|
||||
stream << "If True:" << endl;
|
||||
_block->GetTreeString(stream, indents + 1);
|
||||
if (_elseStatement != nullptr){
|
||||
for (size_t i = 0; i < indents; i++)
|
||||
stream << "\t";
|
||||
stream << endl;
|
||||
DrawIndents(stream, indents);
|
||||
stream << "Else:" << endl;
|
||||
_elseStatement->GetTreeString(stream, indents + 1);
|
||||
}
|
||||
@@ -362,25 +360,23 @@ namespace Porygon::Binder {
|
||||
}
|
||||
|
||||
void GetTreeString(std::stringstream& stream, size_t indents) const override{
|
||||
for (size_t i = 0; i < indents; i++)
|
||||
stream << "\t";
|
||||
DrawIndents(stream, indents);
|
||||
stream << "NumericForLoopStatement" << endl;
|
||||
for (size_t i = 0; i < indents; i++)
|
||||
stream << "\t";
|
||||
DrawIndents(stream, indents);
|
||||
stream << "Start:" << endl;
|
||||
_start->GetTreeString(stream, indents + 1);
|
||||
for (size_t i = 0; i < indents; i++)
|
||||
stream << "\t";
|
||||
stream << endl;
|
||||
DrawIndents(stream, indents);
|
||||
stream << "End:" << endl;
|
||||
_end->GetTreeString(stream, indents + 1);
|
||||
if (_step != nullptr){
|
||||
for (size_t i = 0; i < indents; i++)
|
||||
stream << "\t";
|
||||
stream << endl;
|
||||
DrawIndents(stream, indents);
|
||||
stream << "Step:" << endl;
|
||||
_step->GetTreeString(stream, indents + 1);
|
||||
}
|
||||
for (size_t i = 0; i < indents; i++)
|
||||
stream << "\t";
|
||||
stream << endl;
|
||||
DrawIndents(stream, indents);
|
||||
stream << "Do:" << endl;
|
||||
_block->GetTreeString(stream, indents + 1);
|
||||
}
|
||||
@@ -432,18 +428,18 @@ namespace Porygon::Binder {
|
||||
}
|
||||
|
||||
void GetTreeString(std::stringstream& stream, size_t indents) const override{
|
||||
for (size_t i = 0; i < indents; i++)
|
||||
stream << "\t";
|
||||
DrawIndents(stream, indents);
|
||||
stream << "GenericForLoopStatement" << endl;
|
||||
for (size_t i = 0; i < indents; i++)
|
||||
stream << "\t";
|
||||
stream << "Key: " << _keyIdentifier->GetIdentifier()->GetString().get() << endl;
|
||||
for (size_t i = 0; i < indents; i++)
|
||||
stream << "\t";
|
||||
stream << "Value: " << _valueIdentifier->GetIdentifier()->GetString().get() << endl;
|
||||
stream << "Iterator: " << endl;
|
||||
DrawIndents(stream, indents);
|
||||
stream << "Key: " << _keyIdentifier->GetIdentifier()->GetDebugString() << endl;
|
||||
DrawIndents(stream, indents);
|
||||
stream << "Value: " << _valueIdentifier->GetIdentifier()->GetDebugString() << endl;
|
||||
DrawIndents(stream, indents);
|
||||
stream << "Iterator:" << endl;
|
||||
_iterator->GetTreeString(stream, indents + 1);
|
||||
stream << endl;
|
||||
DrawIndents(stream, indents);
|
||||
stream << "Do:" << endl;
|
||||
_block->GetTreeString(stream, indents + 1);
|
||||
}
|
||||
};
|
||||
@@ -477,15 +473,13 @@ namespace Porygon::Binder {
|
||||
}
|
||||
|
||||
void GetTreeString(std::stringstream& stream, size_t indents) const override{
|
||||
for (size_t i = 0; i < indents; i++)
|
||||
stream << "\t";
|
||||
stream << "ConditionalStatement" << endl;
|
||||
for (size_t i = 0; i < indents; i++)
|
||||
stream << "\t";
|
||||
DrawIndents(stream, indents);
|
||||
stream << "WhileStatement" << endl;
|
||||
DrawIndents(stream, indents);
|
||||
stream << "Condition:" << endl;
|
||||
_condition->GetTreeString(stream, indents + 1);
|
||||
for (size_t i = 0; i < indents; i++)
|
||||
stream << "\t";
|
||||
stream << endl;
|
||||
DrawIndents(stream, indents);
|
||||
stream << "While True:" << endl;
|
||||
_block->GetTreeString(stream, indents + 1);
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
#include <string>
|
||||
#include <memory>
|
||||
#include "StringUtils.hpp"
|
||||
|
||||
namespace Porygon::Utilities{
|
||||
class HashedString{
|
||||
@@ -51,6 +52,13 @@ namespace Porygon::Utilities{
|
||||
return _string;
|
||||
}
|
||||
|
||||
inline const std::string GetDebugString() const{
|
||||
if (_string){
|
||||
return Utilities::StringUtils::FromUTF8(*_string.get());
|
||||
}
|
||||
return std::to_string(_hash);
|
||||
}
|
||||
|
||||
inline bool operator==(const HashedString& b) const{
|
||||
return _hash == b._hash;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user