in src/dotnet/APIView/APIViewWeb/Languages/CppLanguageService.cs [1049:1129]
private static void ParseLine(string line, ref CppAstNode node)
{
string[] tokens = line.Split();
//Set any common properties
node.storageClass = tokens.Any(token => token == "static") ? "static" : "";
node.constexpr = tokens.Any(token => token == "constexpr");
node.inline = tokens.Any(token => token == "inline");
node.isimplicit = tokens.Any(token => token == "implicit");
switch (node.kind)
{
case NamespaceDeclKind:
case FunctionTemplateDeclKind:
case TemplateTypeParmDeclKind:
node.name = tokens.LastOrDefault();
break;
case VarDeclKind:
case ParmVarDeclKind:
ParseFieldDecl(line, ref node, ref _varOrParamParser);
break;
case TypeAliasDeclKind:
ParseFieldDecl(line, ref node, ref _typeAliasParser);
break;
case CxxMethodDeclKind:
case CxxConstructorDeclKind:
case CxxDestructorDeclKind:
case FunctionDeclKind:
ParseMethodDecl(line, ref node, ref _methodOrParamParser);
break;
case CxxRecordDeclKind:
ParseClassDecl(line, ref node);
break;
case ClassTemplateSpecializationDeclKind:
ParseClassTemplateSpecializationDecl(line, ref node);
break;
case TemplateArgumentKind:
ParseTemplateArgument(line, ref node);
break;
case ClassTemplateDeclKind:
ParseClassTemplateDecl(line, ref node);
break;
case FieldDeclKind:
ParseFieldDecl(line, ref node, ref _fieldDefParser);
break;
case StringLiteralKind:
case IntegerLiteralKind:
ParseLiteralDecl(line, ref node);
break;
case AccessSpecDeclKind:
ParseAccessType(line, ref node);
break;
case EnumDeclKind:
ParseEnumDecl(line, ref node);
break;
case EnumConstantDeclKind:
ParseEnumConstDecl(line, ref node);
break;
case AccessModifierPublic:
case AccessModifierProtected:
case AccessModifierPrivate:
//Inheritence declaration has inheritance access level as token kinds
ParseInheritanceDecl(line, node);
break;
default:
node.name = "Not implemented";
node.type = "";
break;
}
}