Load constructor/method/event/property imports

This commit is contained in:
Yoshi Askharoun
2024-02-18 22:25:10 -06:00
parent 167ca01ba6
commit 2cd9bfe943
+46 -3
View File
@@ -158,17 +158,58 @@ internal class AsmMarkupLoader
if (_currentValidationPass == LoadPass.Full)
{
foreach (var typeImport in Program.Imports.OfType<TypeImport>())
foreach (var import in Program.Imports)
{
if (import is TypeImport typeImport)
{
var typeSchema = ResolveTypeFromQualifiedName(typeImport.QualifiedName);
TrackImportedType(typeSchema);
}
foreach (var nsImport in Program.Imports.OfType<NamespaceImport>())
else if (import is NamespaceImport nsImport)
{
if (!_referencedNamespaces.Contains(nsImport.Name))
ErrorManager.ReportWarning(nsImport.Line, nsImport.Column, $"Unreferenced namespace '{nsImport.Name}'");
}
else if (import is ConstructorImport ctorImport)
{
var typeSchema = ResolveTypeFromQualifiedName(ctorImport.QualifiedName);
var ctorParamTypes = ctorImport.ParameterTypes.Select(ResolveTypeFromQualifiedName).ToArray();
var ctorSchema = typeSchema.FindConstructor(ctorParamTypes);
TrackImportedConstructor(ctorSchema);
}
else if (import is MethodImport mthdImport)
{
var typeSchema = ResolveTypeFromQualifiedName(mthdImport.QualifiedName);
var mthdParamTypes = mthdImport.ParameterTypes.Select(ResolveTypeFromQualifiedName).ToArray();
var mthdSchema = typeSchema.FindMethod(mthdImport.MethodName, mthdParamTypes);
TrackImportedMethod(mthdSchema);
}
else if (import is NamedMemberImport mbrsImport)
{
var typeSchema = ResolveTypeFromQualifiedName(mbrsImport.QualifiedName);
foreach (var memberName in mbrsImport.MemberNames)
{
var propMember = typeSchema.FindProperty(memberName);
if (propMember is not null)
{
TrackImportedProperty(propMember);
continue;
}
var eventMember = typeSchema.FindEvent(memberName);
if (eventMember is not null)
{
TrackImportedEvent(eventMember);
continue;
}
}
}
}
}
}
@@ -260,6 +301,8 @@ internal class AsmMarkupLoader
else
{
mode = MarkupConstantPersistMode.FromString;
if (persistData is null)
throw new Exception($"{constant.Name} cannot be persisted as a string without persist data.");
}
var constantIndex = (ushort)constantsTable.Add(constantTypeSchema, constantValue, mode, persistData);