public override IChelaType InstanceGeneric(GenericInstance args, ChelaModule instModule) { GenericPrototype prototype = args.GetPrototype(); for (int i = 0; i < args.GetParameterCount(); ++i) { if (prototype.GetPlaceHolder(i) == this) { IChelaType type = args.GetParameter(i); if (type.IsPassedByReference()) { return(ReferenceType.Create(type)); } else { return(type); } } } return(this); }
/// <summary> /// Gets the display name. /// </summary> public override string GetDisplayName() { if (referencedType == null) { return("null"); } if (displayName == null) { switch (referenceFlow) { case ReferenceFlow.In: displayName = "in "; break; case ReferenceFlow.Out: displayName = "out "; break; case ReferenceFlow.InOut: default: if (referencedType.IsPassedByReference()) { displayName = ""; } else { displayName = "ref "; } break; } displayName += referencedType.GetDisplayName(); } return(displayName); }
public bool Equals(GenericInstance obj) { // Check first differences. if (obj == null || parameters.Length != obj.parameters.Length) { return(false); } // Check each paramter. for (int i = 0; i < parameters.Length; ++i) { // Handle pass by reference. IChelaType leftParam = parameters[i]; if (leftParam.IsPassedByReference()) { leftParam = ReferenceType.Create(leftParam); } // Handle pass by reference. IChelaType rightParam = obj.parameters[i]; if (rightParam.IsPassedByReference()) { rightParam = ReferenceType.Create(rightParam); } // Compare the types. if (leftParam != rightParam) { return(false); } } // No differences found. return(true); }