Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

implement visitor for dsymbol and type (need for #2074) #2356

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
5 changes: 5 additions & 0 deletions src/aggregate.h
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,7 @@ class AggregateDeclaration : public ScopeDsymbol
Symbol *toInitializer();

AggregateDeclaration *isAggregateDeclaration() { return this; }
void acceptVisitor(Visitor *v);
};

class StructDeclaration : public AggregateDeclaration
Expand Down Expand Up @@ -185,6 +186,7 @@ class StructDeclaration : public AggregateDeclaration
void toDebug(); // to symbolic debug info

StructDeclaration *isStructDeclaration() { return this; }
void acceptVisitor(Visitor *v);
};

class UnionDeclaration : public StructDeclaration
Expand All @@ -195,6 +197,7 @@ class UnionDeclaration : public StructDeclaration
const char *kind();

UnionDeclaration *isUnionDeclaration() { return this; }
void acceptVisitor(Visitor *v);
};

struct BaseClass
Expand Down Expand Up @@ -312,6 +315,7 @@ class ClassDeclaration : public AggregateDeclaration
Symbol *vtblsym;

ClassDeclaration *isClassDeclaration() { return (ClassDeclaration *)this; }
void acceptVisitor(Visitor *v);
};

class InterfaceDeclaration : public ClassDeclaration
Expand All @@ -334,6 +338,7 @@ class InterfaceDeclaration : public ClassDeclaration
Symbol *toSymbol();

InterfaceDeclaration *isInterfaceDeclaration() { return this; }
void acceptVisitor(Visitor *v);
};

#endif /* DMD_AGGREGATE_H */
62 changes: 61 additions & 1 deletion src/attrib.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
#include "template.h"
#include "hdrgen.h"
#include "utf.h"

#include "visitor.h"

/********************************* AttribDeclaration ****************************/

Expand Down Expand Up @@ -1755,4 +1755,64 @@ const char *UserAttributeDeclaration::kind()
return "UserAttribute";
}

void AttribDeclaration::acceptVisitor(Visitor *v)
{
v->visit(this);
}

void StorageClassDeclaration::acceptVisitor(Visitor *v)
{
v->visit(this);
}

void DeprecatedDeclaration::acceptVisitor(Visitor *v)
{
v->visit(this);
}

void LinkDeclaration::acceptVisitor(Visitor *v)
{
v->visit(this);
}

void ProtDeclaration::acceptVisitor(Visitor *v)
{
v->visit(this);
}

void AlignDeclaration::acceptVisitor(Visitor *v)
{
v->visit(this);
}

void AnonDeclaration::acceptVisitor(Visitor *v)
{
v->visit(this);
}

void PragmaDeclaration::acceptVisitor(Visitor *v)
{
v->visit(this);
}

void ConditionalDeclaration::acceptVisitor(Visitor *v)
{
v->visit(this);
}

void StaticIfDeclaration::acceptVisitor(Visitor *v)
{
v->visit(this);
}

void CompileDeclaration::acceptVisitor(Visitor *v)
{
v->visit(this);
}

void UserAttributeDeclaration::acceptVisitor(Visitor *v)
{
v->visit(this);
}


12 changes: 12 additions & 0 deletions src/attrib.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ class AttribDeclaration : public Dsymbol
AttribDeclaration *isAttribDeclaration() { return this; }

void toObjFile(int multiobj); // compile to .obj file
void acceptVisitor(Visitor *v);
};

class StorageClassDeclaration : public AttribDeclaration
Expand All @@ -76,6 +77,7 @@ class StorageClassDeclaration : public AttribDeclaration

static const char *stcToChars(char tmp[], StorageClass& stc);
static void stcToCBuffer(OutBuffer *buf, StorageClass stc);
void acceptVisitor(Visitor *v);
};

class DeprecatedDeclaration : public StorageClassDeclaration
Expand All @@ -87,6 +89,7 @@ class DeprecatedDeclaration : public StorageClassDeclaration
Dsymbol *syntaxCopy(Dsymbol *s);
void setScope(Scope *sc);
void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
void acceptVisitor(Visitor *v);
};

class LinkDeclaration : public AttribDeclaration
Expand All @@ -101,6 +104,7 @@ class LinkDeclaration : public AttribDeclaration
void semantic3(Scope *sc);
void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
char *toChars();
void acceptVisitor(Visitor *v);
};

class ProtDeclaration : public AttribDeclaration
Expand All @@ -116,6 +120,7 @@ class ProtDeclaration : public AttribDeclaration
void toCBuffer(OutBuffer *buf, HdrGenState *hgs);

static void protectionToCBuffer(OutBuffer *buf, PROT protection);
void acceptVisitor(Visitor *v);
};

class AlignDeclaration : public AttribDeclaration
Expand All @@ -128,6 +133,7 @@ class AlignDeclaration : public AttribDeclaration
void setScope(Scope *sc);
void semantic(Scope *sc);
void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
void acceptVisitor(Visitor *v);
};

class AnonDeclaration : public AttribDeclaration
Expand All @@ -143,6 +149,7 @@ class AnonDeclaration : public AttribDeclaration
void setFieldOffset(AggregateDeclaration *ad, unsigned *poffset, bool isunion);
void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
const char *kind();
void acceptVisitor(Visitor *v);
};

class PragmaDeclaration : public AttribDeclaration
Expand All @@ -158,6 +165,7 @@ class PragmaDeclaration : public AttribDeclaration
void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
const char *kind();
void toObjFile(int multiobj); // compile to .obj file
void acceptVisitor(Visitor *v);
};

class ConditionalDeclaration : public AttribDeclaration
Expand All @@ -176,6 +184,7 @@ class ConditionalDeclaration : public AttribDeclaration
void toJson(JsonOut *json);
void importAll(Scope *sc);
void setScope(Scope *sc);
void acceptVisitor(Visitor *v);
};

class StaticIfDeclaration : public ConditionalDeclaration
Expand All @@ -192,6 +201,7 @@ class StaticIfDeclaration : public ConditionalDeclaration
void importAll(Scope *sc);
void setScope(Scope *sc);
const char *kind();
void acceptVisitor(Visitor *v);
};

// Mixin declarations
Expand All @@ -211,6 +221,7 @@ class CompileDeclaration : public AttribDeclaration
void semantic(Scope *sc);
void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
const char *kind();
void acceptVisitor(Visitor *v);
};

/**
Expand All @@ -229,6 +240,7 @@ class UserAttributeDeclaration : public AttribDeclaration
static Expressions *concat(Expressions *udas1, Expressions *udas2);
void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
const char *kind();
void acceptVisitor(Visitor *v);
};

#endif /* DMD_ATTRIB_H */
11 changes: 11 additions & 0 deletions src/class.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
#include "expression.h"
#include "statement.h"
#include "template.h"
#include "visitor.h"

/********************************* ClassDeclaration ****************************/

Expand Down Expand Up @@ -1732,3 +1733,13 @@ void BaseClass::copyBaseInterfaces(BaseClasses *vtblInterfaces)
}
//printf("-copyBaseInterfaces\n");
}

void ClassDeclaration::acceptVisitor(Visitor *v)
{
v->visit(this);
}

void InterfaceDeclaration::acceptVisitor(Visitor *v)
{
v->visit(this);
}