コード例 #1
0
ファイル: PlaceHolderType.cs プロジェクト: MilkTool/chela
        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);
        }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
        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);
        }