Skip to content
This repository was archived by the owner on Dec 12, 2024. It is now read-only.

Commit d951ec7

Browse files
author
Stephen Hawley
committed
Missed a change.
1 parent 0caa9fe commit d951ec7

File tree

1 file changed

+27
-16
lines changed

1 file changed

+27
-16
lines changed

SwiftReflector/NewClassCompiler.cs

+27-16
Original file line numberDiff line numberDiff line change
@@ -2265,7 +2265,7 @@ CSProperty ImplementProtocolSubscriptEtter (WrappingResult wrapper,
22652265
List<CSLine> vtableAssignments, CSUsingPackages use, bool isSetter, CSProperty wrapperProp, string swiftLibraryPath)
22662266
{
22672267
CSDelegateTypeDecl etterDelegateDecl = DefineDelegateAndAddToVtable (vtable, etterFunc, use,
2268-
OverrideBuilder.VTableEntryIdentifier (vtableEntryIndex), true);
2268+
OverrideBuilder.VTableEntryIdentifier (vtableEntryIndex), !protocolDecl.HasAssociatedTypes);
22692269
vtable.Delegates.Add (etterDelegateDecl);
22702270

22712271
var etterWrapperFunc = FindProtocolWrapperFunction (etterFunc, wrapper);
@@ -2524,7 +2524,7 @@ int ImplementPropertyVtableForVirtualProperties (WrappingResult wrapper,
25242524
}
25252525
var wrapperProp = ImplementPropertyEtter (wrapper, classDecl, subclassDecl, classContents, cl, picl, usedPinvokeNames, virtFuncs,
25262526
getterFunc, tlSetter, vtableEntryIndex, vtableName, vtable, vtableAssignments, use,
2527-
false, null, swiftLibraryPath);
2527+
false, null, swiftLibraryPath, null);
25282528

25292529
if (hasSetter) {
25302530
wrapperProp = ImplementPropertyEtter (wrapper, classDecl, subclassDecl, classContents, cl, picl, usedPinvokeNames, virtFuncs,
@@ -2544,7 +2544,7 @@ CSProperty ImplementProtocolPropertyEtter (WrappingResult wrapper,
25442544
List<CSLine> vtableAssignments, CSUsingPackages use, bool isSetter, bool isObjC, CSProperty wrapperProp, string swiftLibraryPath)
25452545
{
25462546
var etterDelegateDecl = DefineDelegateAndAddToVtable (vtable, etterFunc, use,
2547-
OverrideBuilder.VTableEntryIdentifier (vtableEntryIndex), true);
2547+
OverrideBuilder.VTableEntryIdentifier (vtableEntryIndex), !protocolDecl.HasAssociatedTypes);
25482548
vtable.Delegates.Add (etterDelegateDecl);
25492549

25502550
var etterWrapperFunc = FindProtocolWrapperFunction (etterFunc, wrapper);
@@ -2561,7 +2561,7 @@ CSProperty ImplementProtocolPropertyEtter (WrappingResult wrapper,
25612561
piEtterName = Uniqueify (piEtterName, usedPinvokeNames);
25622562
usedPinvokeNames.Add (piEtterName);
25632563

2564-
string piEtterRef = PIClassName (TypeMapper.GetDotNetNameForSwiftClassName (protocolContents.Name)) + "." + piEtterName;
2564+
string piEtterRef = picl.Name + "." + piEtterName;
25652565
var piGetter = TLFCompiler.CompileMethod (etterWrapperFunc, use,
25662566
PInvokeName (wrapper.ModuleLibPath, swiftLibraryPath),
25672567
etterWrapper.MangledName, piEtterName, true, true, false);
@@ -2583,6 +2583,8 @@ CSProperty ImplementProtocolPropertyEtter (WrappingResult wrapper,
25832583

25842584
var usedIds = new List<string> { propName };
25852585
var marshal = new MarshalEngine (use, usedIds, TypeMapper, wrapper.Module.SwiftCompilerVersion);
2586+
if (protocolDecl.HasAssociatedTypes)
2587+
marshal.GenericReferenceNamer = MakeAssociatedTypeNamer (protocolDecl);
25862588

25872589
var ifTest = kInterfaceImpl != CSConstant.Null;
25882590
var ifBlock = new CSCodeBlock ();
@@ -2603,12 +2605,16 @@ CSProperty ImplementProtocolPropertyEtter (WrappingResult wrapper,
26032605
etterFunc, etterFunc.ReturnTypeSpec, wrapperProp.PropType, etterFunc.ParameterLists [0] [0].TypeSpec, new CSSimpleType (iface.Name.Name), false, wrapper, etterFunc.HasThrows));
26042606
}
26052607

2606-
var ifElse = new CSIfElse (ifTest, ifBlock, elseBlock);
2607-
target.Add (ifElse);
2608+
if (protocolDecl.HasAssociatedTypes) {
2609+
target.AddRange (elseBlock);
2610+
} else {
2611+
var ifElse = new CSIfElse (ifTest, ifBlock, elseBlock);
2612+
target.Add (ifElse);
2613+
}
26082614

26092615
var recvr = ImplementVirtualPropertyStaticReceiver (new CSSimpleType (iface.Name.Name),
2610-
proxyClass.Name.Name, etterDelegateDecl, use,
2611-
etterFunc, wrapperProp, null, vtable.Name, isObjC);
2616+
proxyClass.ToCSType ().ToString (), etterDelegateDecl, use,
2617+
etterFunc, wrapperProp, null, vtable.Name, isObjC, protocolDecl.HasAssociatedTypes);
26122618
proxyClass.Methods.Add (recvr);
26132619

26142620
vtableAssignments.Add (CSAssignment.Assign (String.Format ("{0}.{1}",
@@ -2620,7 +2626,8 @@ CSProperty ImplementPropertyEtter (WrappingResult wrapper,
26202626
ClassDeclaration classDecl, ClassDeclaration subclassDecl,
26212627
ClassContents classContents, CSClass cl, CSClass picl, List<string> usedPinvokeNames, List<FunctionDeclaration> virtFuncs,
26222628
FunctionDeclaration etterFunc, TLFunction tlSetter, int vtableEntryIndex, string vtableName, CSStruct vtable,
2623-
List<CSLine> vtableAssignments, CSUsingPackages use, bool isSetter, CSProperty wrapperProp, string swiftLibraryPath)
2629+
List<CSLine> vtableAssignments, CSUsingPackages use, bool isSetter, CSProperty wrapperProp, string swiftLibraryPath,
2630+
Func<int, int, string> genericRenamer = null)
26242631
{
26252632
var swiftClassName = XmlToTLFunctionMapper.ToSwiftClassName (subclassDecl);
26262633
var tlEtter = XmlToTLFunctionMapper.ToTLFunction (etterFunc, classContents);
@@ -2647,7 +2654,8 @@ CSProperty ImplementPropertyEtter (WrappingResult wrapper,
26472654

26482655
var piGetter = TLFCompiler.CompileMethod (etterWrapperFunc, use,
26492656
PInvokeName (wrapper.ModuleLibPath, swiftLibraryPath),
2650-
etterWrapper.MangledName, piEtterName, true, true, false); picl.Methods.Add (piGetter);
2657+
etterWrapper.MangledName, piEtterName, true, true, false);
2658+
picl.Methods.Add (piGetter);
26512659

26522660
var superEtterFunc = subclassDecl.AllMethodsNoCDTor ().Where (fn =>
26532661
fn.Access == Accessibility.Internal && fn.IsProperty &&
@@ -2688,7 +2696,8 @@ CSProperty ImplementPropertyEtter (WrappingResult wrapper,
26882696
}
26892697
}
26902698

2691-
ImplementOverloadFromKnownWrapper (cl, picl, usedPinvokeNames, swiftClassName, superEtterTlf, superEtterFunc, use, true, wrapper, swiftLibraryPath, superEtterFuncWrapper, "", true);
2699+
ImplementOverloadFromKnownWrapper (cl, picl, usedPinvokeNames, swiftClassName, superEtterTlf, superEtterFunc, use, true, wrapper, swiftLibraryPath, superEtterFuncWrapper, "", true,
2700+
genericRenamer: genericRenamer);
26922701
var propertyImplMethod = cl.Methods.Last ();
26932702
CSMethod protoListMethod = null;
26942703
if (returnIsProtocolList) {
@@ -2714,7 +2723,7 @@ CSProperty ImplementPropertyEtter (WrappingResult wrapper,
27142723
}
27152724

27162725
var recvr = ImplementVirtualPropertyStaticReceiver (cl.ToCSType (), null, etterDelegateDecl, use, etterFunc,
2717-
wrapperProp, protoListMethod, vtable.Name, classDecl.IsObjC);
2726+
wrapperProp, protoListMethod, vtable.Name, classDecl.IsObjC, false);
27182727
cl.Methods.Add (recvr);
27192728

27202729
vtableAssignments.Add (CSAssignment.Assign (String.Format ("{0}.{1}",
@@ -2844,7 +2853,7 @@ CSMethod ImplementVirtualSubscriptStaticReceiver (CSType thisType, string csProx
28442853

28452854
CSMethod ImplementVirtualPropertyStaticReceiver (CSType thisType, string csProxyName, CSDelegateTypeDecl delType,
28462855
CSUsingPackages use, FunctionDeclaration funcDecl, CSProperty prop, CSMethod protoListMethod,
2847-
CSIdentifier vtableName, bool isObjC)
2856+
CSIdentifier vtableName, bool isObjC, bool hasAssociatedTypes)
28482857
{
28492858
var returnType = funcDecl.IsGetter ? delType.Type : CSSimpleType.Void;
28502859
CSParameterList pl = delType.Parameters;
@@ -2863,7 +2872,7 @@ CSMethod ImplementVirtualPropertyStaticReceiver (CSType thisType, string csProxy
28632872

28642873
var bodyContents = marshaler.MarshalFromLambdaReceiverToCSProp (prop, thisType, csProxyName,
28652874
delType.Parameters,
2866-
funcDecl, prop.PropType, isObjC);
2875+
funcDecl, prop.PropType, isObjC, hasAssociatedTypes);
28672876
body.AddRange (bodyContents);
28682877
recvrName = "xamVtable_recv_" + (funcDecl.IsGetter ? "get_" : "set_") + prop.Name.Name;
28692878
}
@@ -2898,7 +2907,7 @@ CSLambda ImplementVirtualPropertyReceiver (CSType thisType, string csProxyName,
28982907
var marshaler = new MarshalEngineCSafeSwiftToCSharp (use, usedIDs, TypeMapper);
28992908

29002909
var bodyContents = marshaler.MarshalFromLambdaReceiverToCSProp (prop, thisType, csProxyName, delType.Parameters,
2901-
funcDecl, prop.PropType, isObjC);
2910+
funcDecl, prop.PropType, isObjC, false);
29022911
var body = new CSCodeBlock (bodyContents);
29032912
return new CSLambda (pl, body);
29042913
}
@@ -5125,7 +5134,8 @@ CSIfElse InterfaceMethodRedirect (CSMethod publicMethod, IEnumerable<ICodeElemen
51255134
CSMethod ImplementOverloadFromKnownWrapper (CSClass cl, CSClass picl, List<string> usedPinvokeNames, SwiftClassName classForPI,
51265135
TLFunction methodToWrap, FunctionDeclaration funcToWrap, CSUsingPackages use, bool isFinal,
51275136
WrappingResult wrapper, string swiftLibraryPath, TLFunction wrapperFunction,
5128-
string homonymSuffix, bool forcePrivate = false, string alternativeName = null)
5137+
string homonymSuffix, bool forcePrivate = false, string alternativeName = null,
5138+
Func<int, int, string> genericRenamer = null)
51295139
{
51305140
var wrapperFuncDecl = FindEquivalentFunctionDeclarationForWrapperFunction (wrapperFunction, TypeMapper, wrapper);
51315141
var pinvokeMethodName = PIMethodName (classForPI, wrapperFunction.Name) + homonymSuffix;
@@ -5193,6 +5203,7 @@ CSMethod ImplementOverloadFromKnownWrapper (CSClass cl, CSClass picl, List<strin
51935203
};
51945204

51955205
var marshaler = new MarshalEngine (use, localIdentifiers, TypeMapper, wrapper.Module.SwiftCompilerVersion);
5206+
marshaler.GenericReferenceNamer = genericRenamer;
51965207

51975208
publicMethod.Body.AddRange (marshaler.MarshalFunctionCall (wrapperFuncDecl, false, pinvokeMethodRef,
51985209
publicMethod.Parameters, funcToWrap, funcToWrap.ReturnTypeSpec, publicMethod.Type, instanceTypeSpec, cl.ToCSType (),

0 commit comments

Comments
 (0)