[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:
Родитель
872af5d9e1
Коммит
e66f82d5fc
|
@ -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;
|
||||
|
|
Загрузка…
Ссылка в новой задаче