From 2cd9bfe9439c03d94c47aa66cb413aa6ca65ea14 Mon Sep 17 00:00:00 2001 From: Yoshi Askharoun Date: Sun, 18 Feb 2024 22:25:10 -0600 Subject: [PATCH] Load constructor/method/event/property imports --- libs/UIX.Asm/AsmMarkupLoader.cs | 59 ++++++++++++++++++++++++++++----- 1 file changed, 51 insertions(+), 8 deletions(-) diff --git a/libs/UIX.Asm/AsmMarkupLoader.cs b/libs/UIX.Asm/AsmMarkupLoader.cs index 4b565b8..e143c2d 100644 --- a/libs/UIX.Asm/AsmMarkupLoader.cs +++ b/libs/UIX.Asm/AsmMarkupLoader.cs @@ -158,16 +158,57 @@ internal class AsmMarkupLoader if (_currentValidationPass == LoadPass.Full) { - foreach (var typeImport in Program.Imports.OfType()) + foreach (var import in Program.Imports) { - var typeSchema = ResolveTypeFromQualifiedName(typeImport.QualifiedName); - TrackImportedType(typeSchema); - } + if (import is TypeImport typeImport) + { + var typeSchema = ResolveTypeFromQualifiedName(typeImport.QualifiedName); + TrackImportedType(typeSchema); + } + 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(); - foreach (var nsImport in Program.Imports.OfType()) - { - if (!_referencedNamespaces.Contains(nsImport.Name)) - ErrorManager.ReportWarning(nsImport.Line, nsImport.Column, $"Unreferenced namespace '{nsImport.Name}'"); + 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);