Skip to content

Commit

Permalink
Cleanup Class Logic in the Slice Compiler (#2264)
Browse files Browse the repository at this point in the history
  • Loading branch information
InsertCreativityHere authored Jun 5, 2024
1 parent ae7e172 commit 6a03462
Show file tree
Hide file tree
Showing 20 changed files with 314 additions and 497 deletions.
60 changes: 21 additions & 39 deletions cpp/src/Slice/Parser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -94,13 +94,7 @@ namespace
// Returns true if the type contains data types which can be referenced by user code and mutated after a
// dispatch returns.

if (dynamic_pointer_cast<ClassDecl>(type))
{
return true;
}

BuiltinPtr builtin = dynamic_pointer_cast<Builtin>(type);
if (builtin && builtin->usesClasses())
if (type->isClassType())
{
return true;
}
Expand Down Expand Up @@ -381,6 +375,18 @@ Slice::SyntaxTreeBase::SyntaxTreeBase(const UnitPtr& unit) : _unit(unit)

Slice::Type::Type(const UnitPtr& unit) : SyntaxTreeBase(unit) {}

bool
Slice::Type::isClassType() const
{
return false;
}

bool
Slice::Type::usesClasses() const
{
return isClassType();
}

// ----------------------------------------------------------------------
// Builtin
// ----------------------------------------------------------------------
Expand All @@ -399,7 +405,7 @@ Slice::Builtin::typeId() const
}

bool
Slice::Builtin::usesClasses() const
Slice::Builtin::isClassType() const
{
return _kind == KindObject || _kind == KindValue;
}
Expand Down Expand Up @@ -2813,7 +2819,7 @@ Slice::ClassDecl::containedType() const
}

bool
Slice::ClassDecl::usesClasses() const
Slice::ClassDecl::isClassType() const
{
return true;
}
Expand Down Expand Up @@ -3038,13 +3044,9 @@ Slice::ClassDef::classDataMembers() const
for (const auto& p : _contents)
{
DataMemberPtr q = dynamic_pointer_cast<DataMember>(p);
if (q)
if (q && q->type()->isClassType())
{
BuiltinPtr builtin = dynamic_pointer_cast<Builtin>(q->type());
if ((builtin && builtin->usesClasses()) || dynamic_pointer_cast<ClassDecl>(q->type()))
{
result.push_back(q);
}
result.push_back(q);
}
}
return result;
Expand Down Expand Up @@ -3182,12 +3184,6 @@ Slice::InterfaceDecl::containedType() const
return ContainedTypeInterface;
}

bool
Slice::InterfaceDecl::usesClasses() const
{
return false;
}

size_t
Slice::InterfaceDecl::minWireSize() const
{
Expand Down Expand Up @@ -3794,13 +3790,9 @@ Slice::Exception::classDataMembers() const
for (const auto& p : _contents)
{
DataMemberPtr q = dynamic_pointer_cast<DataMember>(p);
if (q)
if (q && q->type()->isClassType())
{
BuiltinPtr builtin = dynamic_pointer_cast<Builtin>(q->type());
if ((builtin && builtin->usesClasses()) || dynamic_pointer_cast<ClassDecl>(q->type()))
{
result.push_back(q);
}
result.push_back(q);
}
}
return result;
Expand Down Expand Up @@ -4030,13 +4022,9 @@ Slice::Struct::classDataMembers() const
for (const auto& p : _contents)
{
DataMemberPtr q = dynamic_pointer_cast<DataMember>(p);
if (q)
if (q && q->type()->isClassType())
{
BuiltinPtr builtin = dynamic_pointer_cast<Builtin>(q->type());
if ((builtin && builtin->usesClasses()) || dynamic_pointer_cast<ClassDecl>(q->type()))
{
result.push_back(q);
}
result.push_back(q);
}
}
return result;
Expand Down Expand Up @@ -4381,12 +4369,6 @@ Slice::Enum::containedType() const
return ContainedTypeEnum;
}

bool
Slice::Enum::usesClasses() const
{
return false;
}

size_t
Slice::Enum::minWireSize() const
{
Expand Down
9 changes: 4 additions & 5 deletions cpp/src/Slice/Parser.h
Original file line number Diff line number Diff line change
Expand Up @@ -316,7 +316,8 @@ namespace Slice
public:
Type(const UnitPtr&);
virtual std::string typeId() const = 0;
virtual bool usesClasses() const = 0;
virtual bool isClassType() const;
virtual bool usesClasses() const;
virtual size_t minWireSize() const = 0;
virtual std::string getOptionalFormat() const = 0;
virtual bool isVariableLength() const = 0;
Expand Down Expand Up @@ -347,7 +348,7 @@ namespace Slice
Builtin(const UnitPtr&, Kind);

virtual std::string typeId() const;
virtual bool usesClasses() const;
virtual bool isClassType() const;
virtual size_t minWireSize() const;
virtual std::string getOptionalFormat() const;
virtual bool isVariableLength() const;
Expand Down Expand Up @@ -556,7 +557,7 @@ namespace Slice
virtual void destroy();
ClassDefPtr definition() const;
virtual ContainedType containedType() const;
virtual bool usesClasses() const;
virtual bool isClassType() const;
virtual size_t minWireSize() const;
virtual std::string getOptionalFormat() const;
virtual bool isVariableLength() const;
Expand Down Expand Up @@ -633,7 +634,6 @@ namespace Slice
virtual void destroy();
InterfaceDefPtr definition() const;
virtual ContainedType containedType() const;
virtual bool usesClasses() const;
virtual size_t minWireSize() const;
virtual std::string getOptionalFormat() const;
virtual bool isVariableLength() const;
Expand Down Expand Up @@ -897,7 +897,6 @@ namespace Slice
int minValue() const;
int maxValue() const;
virtual ContainedType containedType() const;
virtual bool usesClasses() const;
virtual size_t minWireSize() const;
virtual std::string getOptionalFormat() const;
virtual bool isVariableLength() const;
Expand Down
12 changes: 1 addition & 11 deletions cpp/src/ice2slice/Gen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -76,16 +76,6 @@ namespace
return l;
}

bool isClassType(const TypePtr& type)
{
if (dynamic_pointer_cast<ClassDecl>(type))
{
return true;
}
BuiltinPtr builtin = dynamic_pointer_cast<Builtin>(type);
return builtin && (builtin->kind() == Builtin::KindObject || builtin->kind() == Builtin::KindValue);
}

static string getCSharpNamespace(const ContainedPtr& cont, bool& hasCSharpNamespaceAttribute)
{
// Traverse to the top-level module.
Expand Down Expand Up @@ -592,7 +582,7 @@ Gen::TypesVisitor::visitSequence(const SequencePtr& p)
if (s.find(csGenericPrefix) == 0)
{
string type = s.substr(csGenericPrefix.size());
if ((type == "LinkedList" || type == "Queue" || type == "Stack") && isClassType(p->type()))
if ((type == "LinkedList" || type == "Queue" || type == "Stack") && p->type()->isClassType())
{
continue; // Ignored for objects
}
Expand Down
Loading

0 comments on commit 6a03462

Please sign in to comment.