mirror of
https://github.com/vczh-libraries/Release.git
synced 2026-08-17 17:31:44 +08:00
Update release
This commit is contained in:
@@ -29814,12 +29814,7 @@ WfGenerateClassMemberDeclVisitor
|
||||
auto symbol = scope->symbols[node->name.value][0];
|
||||
auto typeInfo = symbol->typeInfo;
|
||||
writer.WriteString(prefix + config->ConvertType(typeInfo.Obj()) + L" " + config->ConvertName(node->name.value));
|
||||
if (!forClassExpr && node->expression)
|
||||
{
|
||||
writer.WriteString(L" = ");
|
||||
GenerateExpression(config, writer, node->expression, typeInfo.Obj());
|
||||
}
|
||||
else
|
||||
if (forClassExpr)
|
||||
{
|
||||
auto defaultValue = config->DefaultValue(typeInfo.Obj());
|
||||
if (defaultValue != L"")
|
||||
@@ -29893,6 +29888,78 @@ WfGenerateClassMemberDeclVisitor
|
||||
}
|
||||
};
|
||||
|
||||
class WfGenerateClassMemberInitVisitor : public empty_visitor::DeclarationVisitor
|
||||
{
|
||||
public:
|
||||
WfCppConfig * config;
|
||||
stream::StreamWriter& writer;
|
||||
WString prefix;
|
||||
vint& callIndex;
|
||||
|
||||
WfGenerateClassMemberInitVisitor(WfCppConfig* _config, stream::StreamWriter& _writer, const WString& _prefix, vint& _callIndex)
|
||||
:config(_config)
|
||||
, writer(_writer)
|
||||
, prefix(_prefix)
|
||||
, callIndex(_callIndex)
|
||||
{
|
||||
}
|
||||
|
||||
void WriteVariableHeader(WfVariableDeclaration* node)
|
||||
{
|
||||
writer.WriteString(prefix);
|
||||
if (callIndex++ == 0)
|
||||
{
|
||||
writer.WriteString(L"\t: ");
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.WriteString(L"\t, ");
|
||||
}
|
||||
writer.WriteString(config->ConvertName(node->name.value));
|
||||
}
|
||||
|
||||
void Visit(WfVariableDeclaration* node)override
|
||||
{
|
||||
auto scope = config->manager->nodeScopes[node].Obj();
|
||||
auto symbol = scope->symbols[node->name.value][0];
|
||||
auto typeInfo = symbol->typeInfo;
|
||||
if (node->expression)
|
||||
{
|
||||
WriteVariableHeader(node);
|
||||
writer.WriteString(L"(");
|
||||
GenerateExpression(config, writer, node->expression, typeInfo.Obj());
|
||||
writer.WriteLine(L")");
|
||||
}
|
||||
else
|
||||
{
|
||||
auto defaultValue = config->DefaultValue(typeInfo.Obj());
|
||||
if (defaultValue != L"")
|
||||
{
|
||||
WriteVariableHeader(node);
|
||||
writer.WriteString(L"(");
|
||||
writer.WriteString(defaultValue);
|
||||
writer.WriteLine(L")");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Dispatch(WfVirtualCfeDeclaration* node)override
|
||||
{
|
||||
FOREACH(Ptr<WfDeclaration>, decl, node->expandedDeclarations)
|
||||
{
|
||||
decl->Accept(this);
|
||||
}
|
||||
}
|
||||
|
||||
void Dispatch(WfVirtualCseDeclaration* node)override
|
||||
{
|
||||
FOREACH(Ptr<WfDeclaration>, decl, node->expandedDeclarations)
|
||||
{
|
||||
decl->Accept(this);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
void GenerateClassMemberDecl(WfCppConfig* config, stream::StreamWriter& writer, const WString& className, Ptr<WfDeclaration> memberDecl, const WString& prefix, bool forClassExpr)
|
||||
{
|
||||
WfGenerateClassMemberDeclVisitor visitor(config, writer, className, prefix, forClassExpr);
|
||||
@@ -29908,15 +29975,17 @@ WfGenerateClassMemberImplVisitor
|
||||
public:
|
||||
WfCppConfig* config;
|
||||
stream::StreamWriter& writer;
|
||||
WfClassDeclaration* classDef;
|
||||
WString classBaseName;
|
||||
WString className;
|
||||
WString classFullName;
|
||||
WString prefix;
|
||||
bool printableMember = false;
|
||||
|
||||
WfGenerateClassMemberImplVisitor(WfCppConfig* _config, stream::StreamWriter& _writer, const WString& _classBaseName, const WString& _className, const WString& _classFullName, const WString& _prefix)
|
||||
WfGenerateClassMemberImplVisitor(WfCppConfig* _config, stream::StreamWriter& _writer, WfClassDeclaration* _classDef, const WString& _classBaseName, const WString& _className, const WString& _classFullName, const WString& _prefix)
|
||||
:config(_config)
|
||||
, writer(_writer)
|
||||
, classDef(_classDef)
|
||||
, classBaseName(_classBaseName)
|
||||
, className(_className)
|
||||
, classFullName(_classFullName)
|
||||
@@ -30004,13 +30073,15 @@ WfGenerateClassMemberImplVisitor
|
||||
writer.WriteString(prefix);
|
||||
config->WriteFunctionHeader(writer, methodInfo, arguments, classBaseName + L"::" + className, false);
|
||||
writer.WriteLine(L"");
|
||||
FOREACH_INDEXER(Ptr<WfBaseConstructorCall>, call, callIndex, node->baseConstructorCalls)
|
||||
|
||||
vint callIndex = 0;
|
||||
FOREACH(Ptr<WfBaseConstructorCall>, call, node->baseConstructorCalls)
|
||||
{
|
||||
auto callType = CreateTypeInfoFromType(scope, call->type);
|
||||
auto callCtor = config->manager->baseConstructorCallResolvings[{node, callType->GetTypeDescriptor()}].value;
|
||||
|
||||
writer.WriteString(prefix);
|
||||
if (callIndex == 0)
|
||||
if (callIndex++ == 0)
|
||||
{
|
||||
writer.WriteString(L"\t: ");
|
||||
}
|
||||
@@ -30029,6 +30100,15 @@ WfGenerateClassMemberImplVisitor
|
||||
writer.WriteLine(L")");
|
||||
}
|
||||
|
||||
if (classDef)
|
||||
{
|
||||
WfGenerateClassMemberInitVisitor visitor(config, writer, prefix, callIndex);
|
||||
FOREACH(Ptr<WfDeclaration>, member, classDef->declarations)
|
||||
{
|
||||
member->Accept(&visitor);
|
||||
}
|
||||
}
|
||||
|
||||
if (userImpl)
|
||||
{
|
||||
WriteNotImplemented();
|
||||
@@ -30093,9 +30173,9 @@ WfGenerateClassMemberImplVisitor
|
||||
}
|
||||
};
|
||||
|
||||
bool GenerateClassMemberImpl(WfCppConfig* config, stream::StreamWriter& writer, const WString& classBaseName, const WString& className, const WString& classFullName, Ptr<WfDeclaration> memberDecl, const WString& prefix)
|
||||
bool GenerateClassMemberImpl(WfCppConfig* config, stream::StreamWriter& writer, WfClassDeclaration* classDef, const WString& classBaseName, const WString& className, const WString& classFullName, Ptr<WfDeclaration> memberDecl, const WString& prefix)
|
||||
{
|
||||
WfGenerateClassMemberImplVisitor visitor(config, writer, classBaseName, className, classFullName, prefix);
|
||||
WfGenerateClassMemberImplVisitor visitor(config, writer, classDef, classBaseName, className, classFullName, prefix);
|
||||
memberDecl->Accept(&visitor);
|
||||
return visitor.printableMember;
|
||||
}
|
||||
@@ -34112,7 +34192,7 @@ namespace vl
|
||||
|
||||
auto td = manager->declarationTypes[decl.Obj()].Obj();
|
||||
auto classFullName = CppGetFullName(td);
|
||||
return GenerateClassMemberImpl(this, writer, GetClassBaseName(decl), ConvertName(decl->name.value), classFullName , memberDecl, prefix);
|
||||
return GenerateClassMemberImpl(this, writer, decl.Obj(), GetClassBaseName(decl), ConvertName(decl->name.value), classFullName , memberDecl, prefix);
|
||||
}
|
||||
|
||||
void WfCppConfig::WriteCpp_Class(stream::StreamWriter& writer, Ptr<WfClassDeclaration> decl, collections::List<WString>& nss)
|
||||
@@ -35054,7 +35134,7 @@ WfCppConfig::WriteCpp
|
||||
WString classFullName = L"::" + assemblyNamespace + L"::" + name;
|
||||
FOREACH(Ptr<WfDeclaration>, memberDecl, lambda->declarations)
|
||||
{
|
||||
if (GenerateClassMemberImpl(this, writer, name, name, classFullName, memberDecl, L"\t"))
|
||||
if (GenerateClassMemberImpl(this, writer, nullptr, name, name, classFullName, memberDecl, L"\t"))
|
||||
{
|
||||
writer.WriteLine(L"");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user