127 lines
2.4 KiB
C++
127 lines
2.4 KiB
C++
#include "NodeKind.h"
|
|
|
|
int nodeKindToInt(NodeKind kind)
|
|
{
|
|
return kind;
|
|
}
|
|
|
|
NodeKind intToNodeKind(int value)
|
|
{
|
|
switch (value)
|
|
{
|
|
case NODE_TYPE:
|
|
return NODE_TYPE;
|
|
case NODE_BUILTIN_TYPE:
|
|
return NODE_BUILTIN_TYPE;
|
|
case NODE_MODULE:
|
|
return NODE_MODULE;
|
|
case NODE_NAMESPACE:
|
|
return NODE_NAMESPACE;
|
|
case NODE_PACKAGE:
|
|
return NODE_PACKAGE;
|
|
case NODE_STRUCT:
|
|
return NODE_STRUCT;
|
|
case NODE_CLASS:
|
|
return NODE_CLASS;
|
|
case NODE_INTERFACE:
|
|
return NODE_INTERFACE;
|
|
case NODE_ANNOTATION:
|
|
return NODE_ANNOTATION;
|
|
case NODE_GLOBAL_VARIABLE:
|
|
return NODE_GLOBAL_VARIABLE;
|
|
case NODE_FIELD:
|
|
return NODE_FIELD;
|
|
case NODE_FUNCTION:
|
|
return NODE_FUNCTION;
|
|
case NODE_METHOD:
|
|
return NODE_METHOD;
|
|
case NODE_ENUM:
|
|
return NODE_ENUM;
|
|
case NODE_ENUM_CONSTANT:
|
|
return NODE_ENUM_CONSTANT;
|
|
case NODE_TYPEDEF:
|
|
return NODE_TYPEDEF;
|
|
case NODE_TYPE_PARAMETER:
|
|
return NODE_TYPE_PARAMETER;
|
|
case NODE_FILE:
|
|
return NODE_FILE;
|
|
case NODE_MACRO:
|
|
return NODE_MACRO;
|
|
case NODE_UNION:
|
|
return NODE_UNION;
|
|
}
|
|
|
|
return NODE_SYMBOL;
|
|
}
|
|
|
|
std::string getReadableNodeKindString(NodeKind kind)
|
|
{
|
|
switch (kind)
|
|
{
|
|
case NODE_SYMBOL:
|
|
return "symbol";
|
|
case NODE_BUILTIN_TYPE:
|
|
return "built-in type";
|
|
case NODE_TYPE:
|
|
return "type";
|
|
case NODE_MODULE:
|
|
return "module";
|
|
case NODE_NAMESPACE:
|
|
return "namespace";
|
|
case NODE_PACKAGE:
|
|
return "package";
|
|
case NODE_STRUCT:
|
|
return "struct";
|
|
case NODE_CLASS:
|
|
return "class";
|
|
case NODE_INTERFACE:
|
|
return "interface";
|
|
case NODE_ANNOTATION:
|
|
return "annotation";
|
|
case NODE_GLOBAL_VARIABLE:
|
|
return "global variable";
|
|
case NODE_FIELD:
|
|
return "field";
|
|
case NODE_FUNCTION:
|
|
return "function";
|
|
case NODE_METHOD:
|
|
return "method";
|
|
case NODE_ENUM:
|
|
return "enum";
|
|
case NODE_ENUM_CONSTANT:
|
|
return "enum constant";
|
|
case NODE_TYPEDEF:
|
|
return "typedef";
|
|
case NODE_TYPE_PARAMETER:
|
|
return "type parameter";
|
|
case NODE_FILE:
|
|
return "file";
|
|
case NODE_MACRO:
|
|
return "macro";
|
|
case NODE_UNION:
|
|
return "union";
|
|
}
|
|
|
|
return "";
|
|
}
|
|
|
|
std::wstring getReadableNodeKindWString(NodeKind kind)
|
|
{
|
|
std::string str = getReadableNodeKindString(kind);
|
|
return std::wstring(str.begin(), str.end());
|
|
}
|
|
|
|
NodeKind getNodeKindForReadableNodeKindString(const std::wstring& str)
|
|
{
|
|
for (NodeKindMask mask = 1; mask <= NODE_MAX_VALUE; mask *= 2)
|
|
{
|
|
NodeKind kind = intToNodeKind(mask);
|
|
if (getReadableNodeKindWString(kind) == str)
|
|
{
|
|
return kind;
|
|
}
|
|
}
|
|
|
|
return NODE_SYMBOL;
|
|
}
|