[static registrar] Refactor code to make it easier to reuse code later on.

There are no functional changes here, just refactoring to make code easier to re-use.
This commit is contained in:
Rolf Bjarne Kvinge 2023-01-25 16:23:12 +01:00
Родитель 872af5d9e1
Коммит e66f82d5fc
1 изменённых файлов: 26 добавлений и 21 удалений

Просмотреть файл

@ -4223,27 +4223,7 @@ namespace Registrar {
sb.Write (", 0x{0:X}", token_ref);
sb.WriteLine (");");
if (isCtor) {
sb.WriteLine ("if (call_super && rv) {");
sb.Write ("struct objc_super super = { rv, [").Write (method.DeclaringType.SuperType.ExportedName).WriteLine (" class] };");
sb.Write ("rv = ((id (*)(objc_super*, SEL");
if (method.Parameters is not null) {
for (int i = 0; i < method.Parameters.Length; i++)
sb.Append (", ").Append (ToObjCParameterType (method.Parameters [i], method.DescriptiveMethodName, exceptions, method.Method));
}
if (method.IsVariadic)
sb.Append (", ...");
sb.Write (")) objc_msgSendSuper) (&super, @selector (");
sb.Write (method.Selector);
sb.Write (")");
var split = method.Selector.Split (':');
for (int i = 0; i < split.Length - 1; i++) {
sb.Append (", ");
sb.AppendFormat ("p{0}", i);
}
sb.WriteLine (");");
sb.WriteLine ("}");
GenerateCallToSuperForConstructor (sb, method, exceptions);
sb.WriteLine ("return rv;");
}
sb.WriteLine ("}");
@ -4378,6 +4358,31 @@ namespace Registrar {
}
}
void GenerateCallToSuperForConstructor (AutoIndentStringBuilder sb, ObjCMethod method, List<Exception> exceptions)
{
sb.WriteLine ("if (call_super && rv) {");
sb.Write ("struct objc_super super = { rv, [").Write (method.DeclaringType.SuperType.ExportedName).WriteLine (" class] };");
sb.Write ("rv = ((id (*)(objc_super*, SEL");
if (method.Parameters is not null) {
for (int i = 0; i < method.Parameters.Length; i++)
sb.Append (", ").Append (ToObjCParameterType (method.Parameters [i], method.DescriptiveMethodName, exceptions, method.Method));
}
if (method.IsVariadic)
sb.Append (", ...");
sb.Write (")) objc_msgSendSuper) (&super, @selector (");
sb.Write (method.Selector);
sb.Write (")");
var split = method.Selector.Split (':');
for (int i = 0; i < split.Length - 1; i++) {
sb.Append (", ");
sb.AppendFormat ("p{0}", i);
}
sb.WriteLine (");");
sb.WriteLine ("}");
}
public TypeDefinition GetInstantiableType (TypeDefinition td, List<Exception> exceptions, string descriptiveMethodName)
{
TypeDefinition nativeObjType = td;