Пример #1
0
        //------------------------------------------------------------
        // FUNCBREC.EnsureNubHasValue
        //
        /// <summary>
        /// Make sure the HasValue property of System.Nullable&lt;T&gt; is appropriate (and return it).
        /// </summary>
        /// <param name="treeNode"></param>
        /// <returns></returns>
        //------------------------------------------------------------
        private PROPSYM EnsureNubHasValue(BASENODE treeNode)
        {
            PROPSYM propSym = Compiler.MainSymbolManager.NullableHasValuePropertySym;

            if (propSym == null)
            {
                AGGSYM nubAggSym = Compiler.GetOptPredefAggErr(PREDEFTYPE.G_OPTIONAL, true);
                if (nubAggSym == null)
                {
                    return(null);
                }
                string name = Compiler.NameManager.GetPredefinedName(PREDEFNAME.HASVALUE);

                SYM sym = Compiler.MainSymbolManager.LookupAggMember(
                    name, nubAggSym, SYMBMASK.PROPSYM);
                propSym = sym as PROPSYM;
                if (propSym == null ||
                    propSym.IsStatic ||
                    propSym.Access != ACCESS.PUBLIC ||
                    propSym.ParameterTypes.Count > 0 ||
                    !propSym.ReturnTypeSym.IsPredefType(PREDEFTYPE.BOOL) ||
                    propSym.GetMethodSym == null)
                {
                    Compiler.Error(treeNode, CSCERRID.ERR_MissingPredefinedMember,
                                   new ErrArg(nubAggSym), new ErrArg(name));
                    return(null);
                }
                Compiler.MainSymbolManager.NullableHasValuePropertySym = propSym;
            }

            return(propSym);
        }
Пример #2
0
        //------------------------------------------------------------
        // SymWithType.CreateCorrespondingInstance (static)
        //
        /// <summary>
        ///
        /// </summary>
        /// <param name="sym"></param>
        /// <param name="ats"></param>
        /// <returns></returns>
        //------------------------------------------------------------
        static internal SymWithType CreateCorrespondingInstance(SYM sym, AGGTYPESYM ats)
        {
            if (sym == null)
            {
                return(new SymWithType());
            }

            SymWithType swt = null;

            switch (sym.Kind)
            {
            case SYMKIND.METHSYM:
                return(new MethWithType(sym as METHSYM, ats) as SymWithType);

            case SYMKIND.PROPSYM:
                return(new PropWithType(sym as PROPSYM, ats) as SymWithType);

            case SYMKIND.EVENTSYM:
                return(new EventWithType(sym as EVENTSYM, ats) as SymWithType);

            case SYMKIND.MEMBVARSYM:
                return(new FieldWithType(sym as MEMBVARSYM, ats) as SymWithType);

            default:
                break;
            }
            return(new SymWithType(sym, ats));
        }
Пример #3
0
        //------------------------------------------------------------
        // MetaDataHelper.GetFullName (2) static method
        //
        /// <summary></summary>
        /// <param name="sym"></param>
        /// <param name="name"></param>
        /// <returns></returns>
        //------------------------------------------------------------
        public static bool GetFullName(SYM sym, out string name)
        {
            StringBuilder  sb   = new StringBuilder();
            MetaDataHelper help = new MetaDataHelper();

            help.GetFullName(sym, sb, null);
            name = sb.ToString();
            return(true);
        }
Пример #4
0
        //------------------------------------------------------------
        // MetaDataHelper.GetExplicitImplName (2) static method
        //
        /// <summary></summary>
        /// <param name="sym"></param>
        /// <param name="name"></param>
        /// <returns></returns>
        //------------------------------------------------------------
        internal static bool GetExplicitImplName(SYM sym, out string name)
        {
            StringBuilder  sb   = new StringBuilder();
            MetaDataHelper help = new MetaDataHelper();

            help.GetExplicitImplName(sym, sb);
            name = sb.ToString();
            return(true);
        }
Пример #5
0
 //------------------------------------------------------------
 // MetaDataHelper.GetTypeVars
 //
 /// <summary>
 /// Add the count of type variables to name, as "name`2".
 /// </summary>
 /// <param name="sym"></param>
 /// <param name="strBuilder"></param>
 /// <param name="innerSym"></param>
 //------------------------------------------------------------
 protected virtual void GetTypeVars(SYM sym, StringBuilder strBuilder, SYM innerSym)
 {
     if (sym.IsAGGSYM && (sym as AGGSYM).IsArityInName)
     {
         TypeArray typeVars = (sym as AGGSYM).TypeVariables;
         DebugUtil.Assert(typeVars.Count > 0); // isArityInName shouldn't be set otherwise.
         strBuilder.Append('`');
         strBuilder.AppendFormat("{0}", typeVars.Count);
     }
 }
Пример #6
0
        //------------------------------------------------------------
        // FUNCBREC.BindNubNew
        //
        /// <summary>
        /// Create an expr for new T?(exprSrc) where T is exprSrc-&gt;type.
        /// </summary>
        /// <param name="treeNode"></param>
        /// <param name="srcExpr"></param>
        /// <returns></returns>
        //------------------------------------------------------------
        private EXPR BindNubNew(BASENODE treeNode, EXPR srcExpr)
        {
            DebugUtil.Assert(srcExpr != null);

            // Create a NUBSYM instance whose base bype is represented by srcExpr.TypeSym.
            NUBSYM nubSym = Compiler.MainSymbolManager.GetNubType(srcExpr.TypeSym);

            // Get a TYPESYM instance representing Nullable<> for nubSym.
            AGGTYPESYM aggTypeSym = nubSym.GetAggTypeSym();

            if (aggTypeSym == null)
            {
                return(NewError(treeNode, nubSym));
            }
            Compiler.EnsureState(aggTypeSym, AggStateEnum.Prepared);

            METHSYM methSym = Compiler.MainSymbolManager.NullableCtorMethodSym;

            if (methSym == null)
            {
                string name = Compiler.NameManager.GetPredefinedName(PREDEFNAME.CTOR);

                for (SYM sym = Compiler.MainSymbolManager.LookupAggMember(name, aggTypeSym.GetAggregate(), SYMBMASK.ALL);
                     ;
                     sym = sym.NextSameNameSym)
                {
                    if (sym == null)
                    {
                        Compiler.Error(treeNode, CSCERRID.ERR_MissingPredefinedMember,
                                       new ErrArg(aggTypeSym), new ErrArg(name));
                        return(NewError(treeNode, nubSym));
                    }
                    if (sym.IsMETHSYM)
                    {
                        methSym = sym as METHSYM;
                        if (methSym.ParameterTypes.Count == 1 && methSym.ParameterTypes[0].IsTYVARSYM &&
                            methSym.Access == ACCESS.PUBLIC)
                        {
                            break;
                        }
                    }
                }
                Compiler.MainSymbolManager.NullableCtorMethodSym = methSym;
            }

            EXPRCALL resExpr = NewExpr(treeNode, EXPRKIND.CALL, nubSym) as EXPRCALL;

            resExpr.MethodWithInst.Set(methSym, aggTypeSym, BSYMMGR.EmptyTypeArray);
            resExpr.ArgumentsExpr = srcExpr;
            resExpr.ObjectExpr    = null;
            resExpr.Flags        |= EXPRFLAG.NEWOBJCALL | EXPRFLAG.CANTBENULL;

            return(resExpr);
        }
Пример #7
0
        //------------------------------------------------------------
        // MetaDataHelper.GetFullName
        //
        /// <summary>
        /// Returns a fully-qualified name (open type, do not pass TYPESYMs)
        /// With inner types denoted with m_chNested (defaults to '+')
        /// And everything else separated by dots (.)
        /// </summary>
        /// <param name="sym"></param>
        /// <param name="strBuilder"></param>
        /// <param name="innerSym"></param>
        //------------------------------------------------------------
        public void GetFullName(
            SYM sym,
            StringBuilder strBuilder,
            SYM innerSym)       // = null
        {
            // Special case -- the root namespace.
            if (sym.ParentSym == null)
            {
                // At the root namespace.
                return;
            }

            if (sym.IsTYPESYM)
            {
                DebugUtil.Assert(false, "MetaDataHelper::GetFullName should not be called on TYPESYMs");
                return;
            }

            PARENTSYM parentSym = sym.ParentSym;

            // If Our parent isn't the root, get the parent name and separator and advance beyond it.
            if (parentSym.ParentSym != null)
            {
                GetFullName(parentSym, strBuilder, sym);
                strBuilder.Append(parentSym.IsAGGSYM ? this.nested : ".");
            }

            // Get the current name and add it on
            string name;

            if (sym.IsPROPSYM)
            {
                name = (sym as PROPSYM).GetRealName();
            }
            else
            {
                name = sym.Name;
            }

            int ichMin = strBuilder.Length;

            if (name == null)
            {
                GetExplicitImplName(sym, strBuilder);
            }
            else
            {
                strBuilder.Append(name);
            }

            EscapeSpecialChars(strBuilder);
            GetTypeVars(sym, strBuilder, innerSym);
        }
Пример #8
0
        // Static methods.

        //------------------------------------------------------------
        // MetaDataHelper.GetTypeAccessFlags
        //
        /// <summary>
        /// <para>Determine the visibility flags for a typedef definition in metadata
        /// Accepts TYPEDEFSYMs or AGGSYMs</para>
        /// <para>Use System.Reflection.TypeAttribuetes in place of CorTypeAttr of sscli.</para>
        /// </summary>
        /// <param name="sym"></param>
        /// <returns></returns>
        //------------------------------------------------------------
        internal static TypeAttributes GetTypeAccessFlags(SYM sym)
        {
            TypeAttributes flags = 0;

            DebugUtil.Assert(sym is AGGSYM);

            // Set access flags.
            if (sym.ParentSym is NSSYM)
            {
                // "Top-level" aggregate. Can only be public or internal.
                DebugUtil.Assert(sym.Access == ACCESS.PUBLIC || sym.Access == ACCESS.INTERNAL);
                if (sym.Access == ACCESS.PUBLIC)
                {
                    flags |= TypeAttributes.Public;
                }
                else
                {
                    flags |= TypeAttributes.NotPublic;
                }
            }
            else
            {
                // nested aggregate. Can be any access.
                switch (sym.Access)
                {
                case ACCESS.PUBLIC:
                    flags |= TypeAttributes.NestedPublic;
                    break;

                case ACCESS.INTERNAL:
                    flags |= TypeAttributes.NestedAssembly;
                    break;

                case ACCESS.PROTECTED:
                    flags |= TypeAttributes.NestedFamily;
                    break;

                case ACCESS.INTERNALPROTECTED:
                    flags |= TypeAttributes.NestedFamORAssem;
                    break;

                case ACCESS.PRIVATE:
                    flags |= TypeAttributes.NestedPrivate;
                    break;

                default:
                    DebugUtil.Assert(false, "Bad access flag");
                    break;
                }
            }
            return(flags);
        }
Пример #9
0
 static internal void DebugSymsAdd(SYM sym)
 {
     if (sym == null)
     {
         return;
     }
     try
     {
         SymDictionary.Add(sym.SymID, sym);
     }
     catch (ArgumentException)
     {
     }
 }
Пример #10
0
        //------------------------------------------------------------
        // AggIterator.GetFirstInListAgg
        //------------------------------------------------------------
        static protected AGGSYM GetFirstInListAgg(SYM sym)
        {
            // Only use this for child lists in an AGG.
            DebugUtil.Assert(sym == null || sym.ParentSym.IsAGGSYM);

            for (; sym != null; sym = sym.NextSym)
            {
                if (sym.IsAGGSYM)
                {
                    return(sym as AGGSYM);
                }
            }
            return(null);
        }
Пример #11
0
        //------------------------------------------------------------
        // SymWithType.Set (1)
        //
        /// <summary>
        /// <para>If sym is null, ats is set null.</para>
        /// <para>If sym is not null, sym and ats should have the same parent.</para>
        /// </summary>
        /// <param name="sym"></param>
        /// <param name="ats"></param>
        //------------------------------------------------------------
        internal void Set(SYM sym, AGGTYPESYM ats)
        {
            if (sym == null)
            {
                ats = null;
            }
            DebugUtil.Assert(ats == null || sym.ParentSym == ats.GetAggregate());

            if (ats != null && sym.ParentSym != ats.GetAggregate())
            {
                return;
            }

            this.Sym        = sym;
            this.AggTypeSym = ats;
        }
Пример #12
0
    public GameBoy(string biosFile, string romFile, SpeedupFlags speedupFlags = SpeedupFlags.None)
    {
        ROM = new ROM(romFile);
        Debug.Assert(ROM.HeaderChecksumMatches(), "Cartridge header checksum mismatch!");

        Handle = Libgambatte.gambatte_create();
        Debug.Assert(Libgambatte.gambatte_loadbios(Handle, biosFile, 0x900, 0x31672598) == 0, "Unable to load BIOS!");
        Debug.Assert(Libgambatte.gambatte_load(Handle, romFile, LoadFlags.GbaFlag | LoadFlags.GcbMode | LoadFlags.ReadOnlySav) == 0, "Unable to load ROM!");

        VideoBuffer = new byte[160 * 144 * 4];
        AudioBuffer = new byte[(SamplesPerFrame + 2064) * 2 * 2]; // Stereo 16-bit samples

        InputGetter = () => CurrentJoypad;
        Libgambatte.gambatte_setinputgetter(Handle, InputGetter);

        string symPath = "symfiles/" + Path.GetFileNameWithoutExtension(romFile) + ".sym";

        if (File.Exists(symPath))
        {
            SYM         = new SYM(symPath);
            ROM.Symbols = SYM;
        }

        SetSpeedupFlags(speedupFlags);
        StateSize = Libgambatte.gambatte_savestate(Handle, null, 160, null);

        SaveStateLabels = new Dictionary <string, int>();
        byte[]     state = SaveState();
        ByteStream data  = new ByteStream(state);

        data.Seek(3);
        data.Seek(data.u24be());
        while (data.Position < state.Length)
        {
            string label = "";
            byte   character;
            while ((character = data.u8()) != 0x00)
            {
                label += Convert.ToChar(character);
            }
            int size = data.u24be();
            SaveStateLabels[label] = (int)data.Position;
            data.Seek(size);
        }
    }
Пример #13
0
    private void LoadMaps()
    {
        int        numMaps       = IsYellow ? 249 : 248;
        ReadStream bankStream    = ROM.From("MapHeaderBanks");
        ReadStream addressStream = ROM.From("MapHeaderPointers");

        for (byte i = 0; i < numMaps; i++)
        {
            int headerAddress = bankStream.u8() << 16 | addressStream.u16le();
            if (SYM.Contains(headerAddress))
            {
                string addressLabel = SYM[headerAddress];
                if (addressLabel.EndsWith("_h"))
                {
                    Maps.Add(new RbyMap(this, addressLabel.Substring(0, addressLabel.IndexOf("_h")), i, ROM.From(headerAddress)));
                }
            }
        }
    }
Пример #14
0
        //------------------------------------------------------------
        // FUNCBREC.EnsureNubGetValOrDef
        //
        /// <summary>
        /// Make sure the HasValue property of System.Nullable&lt;T&gt; is appropriate (and return it).
        /// </summary>
        /// <param name="treeNode"></param>
        /// <returns></returns>
        //------------------------------------------------------------
        private METHSYM EnsureNubGetValOrDef(BASENODE treeNode)
        {
            METHSYM methSym = Compiler.MainSymbolManager.NullableGetValOrDefMethodSym;

            if (methSym == null)
            {
                AGGSYM nubAggSym = Compiler.GetOptPredefAggErr(PREDEFTYPE.G_OPTIONAL, true);
                if (nubAggSym == null)
                {
                    return(null);
                }
                string name = Compiler.NameManager.GetPredefinedName(PREDEFNAME.GET_VALUE_OR_DEF);

                for (SYM sym = Compiler.MainSymbolManager.LookupAggMember(name, nubAggSym, SYMBMASK.ALL);
                     ;
                     sym = sym.NextSameNameSym)
                {
                    if (sym == null)
                    {
                        Compiler.Error(treeNode, CSCERRID.ERR_MissingPredefinedMember,
                                       new ErrArg(nubAggSym), new ErrArg(name));
                        return(null);
                    }
                    if (sym.IsMETHSYM)
                    {
                        methSym = sym as METHSYM;
                        if (methSym.ParameterTypes.Count == 0 &&
                            methSym.ParameterTypes.Count == 0 &&
                            methSym.ReturnTypeSym.IsTYVARSYM &&
                            !methSym.IsStatic &&
                            methSym.Access == ACCESS.PUBLIC)
                        {
                            break;
                        }
                    }
                }
                Compiler.MainSymbolManager.NullableGetValOrDefMethodSym = methSym;
            }

            return(methSym);
        }
Пример #15
0
        //------------------------------------------------------------
        // FUNCBREC.CreateNewLocVarSym
        //
        /// <summary>Increments the following values:
        /// FUNCBREC.localCount,
        /// FUNCBREC.unreferencedVarCount and
        /// FUNCBREC.uninitedVarCount.
        /// And sets LOCVARSYM.LocSlotInfo.
        /// </summary>
        /// <param name="name"></param>
        /// <param name="typeSym"></param>
        /// <param name="parentSym"></param>
        /// <returns></returns>
        //------------------------------------------------------------
        internal LOCVARSYM CreateNewLocVarSym(
            string name,
            TYPESYM typeSym,
            PARENTSYM parentSym)
        {
            SYM sym = Compiler.LocalSymbolManager.LookupLocalSym(
                name,
                parentSym,
                SYMBMASK.LOCVARSYM);

            if (sym != null)
            {
                return(sym as LOCVARSYM);
            }

            LOCVARSYM locSym = Compiler.LocalSymbolManager.CreateLocalSym(
                SYMKIND.LOCVARSYM,
                name,
                parentSym) as LOCVARSYM;

            locSym.TypeSym = typeSym;

            StoreInCache(null, name, locSym, null, true);

            ++this.localCount;
            if (this.localCount > 0xffff)
            {
                Compiler.Error(treeNode, CSCERRID.ERR_TooManyLocals);
            }
            ++this.unreferencedVarCount;

            locSym.LocSlotInfo.SetJbitDefAssg(this.uninitedVarCount + 1);
            int cbit = FlowChecker.GetCbit(Compiler, locSym.TypeSym);

            this.uninitedVarCount += cbit;

            return(locSym);
        }
Пример #16
0
    public GameBoy(string biosFile, string romFile, string savFile = null, SpeedupFlags speedupFlags = SpeedupFlags.None)
    {
        ROM = new ROM(romFile);
        Debug.Assert(ROM.HeaderChecksumMatches(), "Cartridge header checksum mismatch!");

        string romName = Path.GetFileNameWithoutExtension(romFile);

        if (savFile == null || savFile == "")
        {
            File.Delete("roms/" + romName + ".sav");
        }
        else
        {
            File.WriteAllBytes("roms/" + romName + ".sav", File.ReadAllBytes(savFile));
        }

        Handle = Libgambatte.gambatte_create();
        Debug.Assert(Libgambatte.gambatte_loadbios(Handle, biosFile, 0x900, 0x31672598) == 0, "Unable to load BIOS!");
        Debug.Assert(Libgambatte.gambatte_load(Handle, romFile, LoadFlags.GbaFlag | LoadFlags.GcbMode | LoadFlags.ReadOnlySav) == 0, "Unable to load ROM!");

        VideoBuffer = new byte[160 * 144 * 4];
        AudioBuffer = new byte[(SamplesPerFrame + 2064) * 2 * 2]; // Stereo 16-bit samples

        InputGetter = () => CurrentJoypad;
        Libgambatte.gambatte_setinputgetter(Handle, InputGetter);

        string symPath = "symfiles/" + romName + ".sym";

        if (File.Exists(symPath))
        {
            SYM         = new SYM(symPath);
            ROM.Symbols = SYM;
        }

        SetSpeedupFlags(speedupFlags);
        StateSize = Libgambatte.gambatte_savestate(Handle, null, 160, null);
    }
Пример #17
0
        //------------------------------------------------------------
        // AggIterator.GetFirstInListNsDecl
        //------------------------------------------------------------
        static protected AGGSYM GetFirstInListNsDecl(SYM sym)
        {
            // Only use this for child lists in an NSDECL.
            DebugUtil.Assert(sym == null || sym.ParentSym.IsNSDECLSYM);

            AGGSYM agg;

            for (; sym != null; sym = sym.NextSym)
            {
                switch (sym.Kind)
                {
                case SYMKIND.AGGDECLSYM:
                    if ((sym as AGGDECLSYM).IsFirst)
                    {
                        return((sym as AGGDECLSYM).AggSym);
                    }
                    break;

                case SYMKIND.NSDECLSYM:
                    agg = GetFirstInListNsDecl((sym as NSDECLSYM).FirstChildSym);
                    if (agg != null)
                    {
                        return(agg);
                    }
                    break;

                case SYMKIND.GLOBALATTRSYM:
                    break;

                default:
                    DebugUtil.Assert(false, "Bad SK");
                    break;
                }
            }
            return(null);
        }
Пример #18
0
 //------------------------------------------------------------
 // SymWithType.Clear
 //
 /// <summary></summary>
 //------------------------------------------------------------
 internal void Clear()
 {
     Sym        = null;
     AggTypeSym = null;
 }
Пример #19
0
 //------------------------------------------------------------
 // SymWithType Constructor (2)
 //
 /// <summary></summary>
 /// <param name="sym"></param>
 /// <param name="ats"></param>
 //------------------------------------------------------------
 internal SymWithType(SYM sym, AGGTYPESYM ats)
 {
     Set(sym, ats);
 }
Пример #20
0
        //------------------------------------------------------------
        // MetaDataHelper.GetExplicitImplName
        //
        /// <summary>
        /// Get a synthesized name for explicit interface implementations.
        /// The name we use is: "InterfaceName.MethodName", where InterfaceName is the fully qualified name
        /// of the interface containing the implemented method.
        /// This name has a '.' in it, so it can't conflict with any "real" name or be confused with one.
        /// </summary>
        /// <remarks>
        /// Returns true if the buffer had enough space for the name.
        /// If not enough space, then adds as much of name as possible to buffer.
        /// Always NULL terminates buffer.
        /// </remarks>
        /// <param name="sym"></param>
        /// <param name="strBuilder"></param>
        //------------------------------------------------------------
        public void GetExplicitImplName(SYM sym, StringBuilder strBuilder)
        {
            DebugUtil.Assert(sym.IsEVENTSYM || sym.IsMETHPROPSYM);

            SymWithType swtImpl   = new SymWithType();
            ERRORSYM    errSym    = null;
            string      implName  = null;
            string      aliasName = null;

            switch (sym.Kind)
            {
            case SYMKIND.EVENTSYM:
                EVENTSYM eventSym = sym as EVENTSYM;
                DebugUtil.Assert(eventSym.IsExpImpl);
                swtImpl = eventSym.SlotEventWithType;
                errSym  = eventSym.ExpImplErrorSym;
                break;

            case SYMKIND.METHSYM:
            case SYMKIND.PROPSYM:
            {
                METHPROPSYM mpSym = sym as METHPROPSYM;
                DebugUtil.Assert(mpSym.IsExplicitImplementation);
                swtImpl = mpSym.SlotSymWithType;
                errSym  = mpSym.ExpImplErrorSym;
                BASENODE nameNode = null;

                if (sym.IsMETHSYM &&
                    (sym as METHSYM).ParseTreeNode != null &&
                    (sym as METHSYM).ParseTreeNode.Kind == NODEKIND.METHOD)
                {
                    nameNode = ((sym as METHSYM).ParseTreeNode as METHODNODE).NameNode;
                }
                else if (
                    sym.IsPROPSYM &&
                    (sym as PROPSYM).ParseTreeNode != null &&
                    (sym as PROPSYM).ParseTreeNode.Kind == NODEKIND.PROPERTY)
                {
                    nameNode = ((sym as PROPSYM).ParseTreeNode as PROPERTYNODE).NameNode;
                }

                while (nameNode != null && nameNode.Kind == NODEKIND.DOT)
                {
                    nameNode = nameNode.AsDOT.Operand1;
                }

                if (nameNode != null && nameNode.Kind == NODEKIND.ALIASNAME)
                {
                    aliasName = nameNode.AsANYNAME.Name;
                }
                if (!sym.IsPROPSYM || !(sym as PROPSYM).IsIndexer)
                {
                    break;
                }

                implName = (swtImpl != null ? (swtImpl.Sym as PROPSYM).GetRealName() : "Item");
                // fish out any user specified alias
                break;
            }

            default:
                // gcc -Wall (all warnings enabled) complains if all cases
                // aren't handled, so we explicitly handle default and assert
                DebugUtil.Assert(false);
                break;
            }

            DebugUtil.Assert(swtImpl != null || errSym != null);

            if (aliasName != null)
            {
                strBuilder.Append(aliasName);
                strBuilder.Append("::");
            }

            if (swtImpl != null)
            {
                GetExplicitImplTypeName(swtImpl.AggTypeSym, strBuilder);
                if (implName == null)
                {
                    implName = swtImpl.Sym.Name;
                }
            }
            else
            {
                GetExplicitImplTypeName(errSym, strBuilder);
            }

            if (implName != null)
            {
                // Add dot seperator.
                strBuilder.Append('.');
                strBuilder.Append(implName);
            }
        }
Пример #21
0
        //------------------------------------------------------------
        // MemberLookup.LookupExtensionMethodInInterfaces
        //
        /// <summary></summary>
        /// <param name="startAggTypeSym"></param>
        /// <returns></returns>
        //------------------------------------------------------------
        private bool LookupExtensionMethodInInterfaces(AGGTYPESYM startAggTypeSym)
        {
            //DebugUtil.Assert(this.firstSymWithType == null || this.isMulti);
            //DebugUtil.Assert(startAggTypeSym != null);
            if (startAggTypeSym == null)
            {
                return(false);
            }
            if (this.firstSymWithType != null && this.firstSymWithType.IsNotNull)
            {
                return(false);
            }

            //DebugUtil.Assert(startAggTypeSym == null || startAggTypeSym.IsInterfaceType());
            //DebugUtil.Assert(startAggTypeSym != null || interfaceTypeArray.Count > 0);
            //DebugUtil.Assert((this.flags &
            //    (MemLookFlagsEnum.Ctor | MemLookFlagsEnum.Operator | MemLookFlagsEnum.BaseCall))
            //    == 0);

            TypeArray interfaceTypeArray = startAggTypeSym.GetIfacesAll();

            if (interfaceTypeArray == null || interfaceTypeArray.Count == 0)
            {
                return(false);
            }

            // Clear all the hidden flags. Anything found in a class hides any other
            // kind of member in all the interfaces.
            if (startAggTypeSym != null)
            {
                startAggTypeSym.AllHidden  = false;
                startAggTypeSym.DiffHidden = (this.firstSymWithType != null);
            }

            for (int i = 0; i < interfaceTypeArray.Count; ++i)
            {
                AGGTYPESYM type = interfaceTypeArray[i] as AGGTYPESYM;
                DebugUtil.Assert(type.IsInterfaceType());

                type.AllHidden  = false;
                type.DiffHidden = (this.firstSymWithType != null);
            }

            if (startAggTypeSym != null)
            {
                Compiler.EnsureState(startAggTypeSym, AggStateEnum.Prepared);
            }
            if (interfaceTypeArray != null)
            {
                Compiler.EnsureState(interfaceTypeArray, AggStateEnum.Prepared);
            }

            //--------------------------------------------------------
            // Loop through the interfaces.
            //--------------------------------------------------------
            bool       hideObject = false;
            int        index      = 0;
            AGGTYPESYM currentSym = interfaceTypeArray[index++] as AGGTYPESYM;

            DebugUtil.Assert(currentSym != null);

            for (; ;)
            {
                DebugUtil.Assert(currentSym != null && currentSym.IsInterfaceType());
                bool hideByName = false;

                if (!currentSym.AllHidden && SearchSingleType(currentSym, out hideByName))
                {
                    SYM fsym = this.firstSymWithType.Sym;
                    DebugUtil.Assert(fsym != null);

                    if (fsym.Kind == SYMKIND.METHSYM &&
                        (fsym as METHSYM).IsInstanceExtensionMethod)
                    {
                        hideByName |= !this.isMulti;

                        // Mark base interfaces appropriately.
                        TypeArray interfaceArray = currentSym.GetIfacesAll();
                        for (int i = 0; i < interfaceArray.Count; ++i)
                        {
                            AGGTYPESYM sym = interfaceArray[i] as AGGTYPESYM;
                            DebugUtil.Assert(sym.IsInterfaceType());

                            if (hideByName)
                            {
                                sym.AllHidden = true;
                            }
                            sym.DiffHidden = true;
                        }

                        // If we hide all base types, that includes object!
                        if (hideByName)
                        {
                            hideObject = true;
                        }
                    }
                }
                this.flags &= ~MemLookFlagsEnum.TypeVarsAllowed;

                if (index >= interfaceTypeArray.Count)
                {
                    return(!hideObject);
                }

                // Substitution has already been done.
                currentSym = interfaceTypeArray[index++] as AGGTYPESYM;
            }
        }
Пример #22
0
    protected void Button_find_diamonds_Click(object sender, EventArgs e)
    {
        List <string> list_shapes   = new List <string>();
        List <string> list_clarity  = new List <string>();
        List <string> list_color    = new List <string>();
        List <string> list_cut      = new List <string>();
        List <string> list_polish   = new List <string>();
        List <string> list_symmetry = new List <string>();
        List <string> list_lab      = new List <string>();
        double        weightMin;
        double        weightMax;
        double        priceMin;
        double        priceMax;
        string        name;


        #region SHAPE
        List <string> list_shapes_ = s.readfromyDS("Shape");
        foreach (var S in list_shapes_)
        {
            var chk_SHAPE = (HtmlInputCheckBox)SAHPE.FindControl("ShapeCB_" + S.ToString());


            if (chk_SHAPE.Checked == true)
            {
                list_shapes.Add(S.ToString());
            }
        }


        #endregion

        #region Weight

        HtmlInputGenericControl weightMin_control = (HtmlInputGenericControl)WEIGHT.FindControl("weightMin");
        if (weightMin_control.Value == "".ToString())
        {
            weightMin_control.Value = "0.1";
        }
        weightMin = Convert.ToDouble(weightMin_control.Value);

        HtmlInputGenericControl weightMax_control = (HtmlInputGenericControl)WEIGHT.FindControl("weightMax");
        if (weightMax_control.Value == "".ToString())
        {
            weightMax_control.Value = "0.1";
        }
        weightMax = Convert.ToDouble(weightMax_control.Value);

        #endregion

        #region Price

        HtmlInputGenericControl priceMin_control = (HtmlInputGenericControl)WEIGHT.FindControl("priceMin");
        if (priceMin_control.Value == "".ToString())
        {
            priceMin_control.Value = "1";
        }
        priceMin = Convert.ToDouble(priceMin_control.Value.ToString());

        HtmlInputGenericControl priceMax_control = (HtmlInputGenericControl)WEIGHT.FindControl("priceMax");
        if (priceMax_control.Value == "".ToString())
        {
            priceMax_control.Value = "1";
        }
        priceMax = Convert.ToDouble(priceMax_control.Value.ToString());

        #endregion

        #region CLARITY
        List <string> list_clarity_ = s.readfromyDS("Clarity");
        foreach (var C in list_clarity_)
        {
            CheckBox chk_CLARITY = (CheckBox)CLARITY.FindControl("ClarityCB_" + C.ToString());
            if (chk_CLARITY.Checked == true)
            {
                list_clarity.Add(C.ToString());
            }
        }

        #endregion

        #region COLOR
        List <string> list_color_ = s.readfromyDS("Color");
        foreach (var CR in list_color_)
        {
            CheckBox chk_COLOR = (CheckBox)COLOR.FindControl("ColorCB_" + CR.ToString());
            if (chk_COLOR.Checked == true)
            {
                list_color.Add(CR.ToString());
            }
        }

        #endregion

        #region CUT
        List <string> list_cut_ = s.readfromyDS("Cut");
        foreach (var CU_ in list_cut_)
        {
            CheckBox chk_CUT = (CheckBox)CUT.FindControl("CutCB_" + CU_.ToString());
            if (chk_CUT.Checked == true)
            {
                list_cut.Add(CU_.ToString());
            }
        }
        #endregion

        #region POLISH
        List <string> list_polish_ = s.readfromyDS("Polish");
        foreach (var P in list_polish_)
        {
            CheckBox chk_P = (CheckBox)POLISH.FindControl("PolishCB_" + P.ToString());
            if (chk_P.Checked == true)
            {
                list_polish.Add(P.ToString());
            }
        }
        #endregion

        #region SYMMETRY
        List <string> list_symmetry_ = s.readfromyDS("Symmetry");
        foreach (var SYM in list_symmetry_)
        {
            CheckBox chk_SYM = (CheckBox)SYMMETRY.FindControl("SymmetryCB_" + SYM.ToString());
            if (chk_SYM.Checked == true)
            {
                list_symmetry.Add(SYM.ToString());
            }
        }

        #endregion

        #region LAB
        List <string> list_lab_ = s.readfromyDS("Lab");
        foreach (var LAB_ in list_lab_)
        {
            CheckBox chk_LAB = (CheckBox)LAB.FindControl("LabCB_" + LAB_.ToString());
            if (chk_LAB.Checked == true)
            {
                list_lab.Add(LAB_.ToString());
            }
        }

        #endregion

        #region Name

        HtmlInputText txt_name = (HtmlInputText)NAME.FindControl("Search_By_ID".ToString());
        name = txt_name.Value;

        #endregion

        addproducts_after_filter(list_shapes,
                                 list_clarity,
                                 list_color,
                                 list_cut,
                                 list_polish,
                                 list_symmetry,
                                 list_lab,
                                 weightMin,
                                 weightMax,
                                 priceMin,
                                 priceMax,
                                 name);
    }
Пример #23
0
        //------------------------------------------------------------
        // MetaDataHelper.GetExplicitImplTypeName
        //
        /// <summary></summary>
        /// <param name="typeSym"></param>
        /// <param name="strBuilder"></param>
        //------------------------------------------------------------
        public void GetExplicitImplTypeName(TYPESYM typeSym, StringBuilder strBuilder)
        {
#if DEBUG
            if (!(typeSym != null))
            {
                ;
            }
#endif
            DebugUtil.Assert(typeSym != null);

            TYPESYM   nakedTypeSym = typeSym.GetNakedType(false);
            TypeArray typeArgs     = null;

            switch (nakedTypeSym.Kind)
            {
            default:
                DebugUtil.Assert(false, "Unhandled type in GetExplicitImplTypeName");
                return;

            case SYMKIND.TYVARSYM:
                strBuilder.Append(nakedTypeSym.Name);
                break;

            case SYMKIND.NUBSYM:
                nakedTypeSym = (nakedTypeSym as NUBSYM).GetAggTypeSym();
                if (nakedTypeSym == null)
                {
                    DebugUtil.Assert(false, "Why did GetAts return null?");
                    return;
                }
                // Fall through.
                goto case SYMKIND.AGGTYPESYM;

            case SYMKIND.AGGTYPESYM:
            {
                AGGTYPESYM outerAggTypeSym = (nakedTypeSym as AGGTYPESYM).OuterTypeSym;
                AGGSYM     aggSym          = nakedTypeSym.GetAggregate();

                if (outerAggTypeSym != null)
                {
                    GetExplicitImplTypeName(outerAggTypeSym, strBuilder);
                    strBuilder.Append('.');
                }
                else
                {
                    DebugUtil.Assert(aggSym.ParentBagSym != null && !aggSym.ParentBagSym.IsAGGSYM);
                    int cch = strBuilder.Length;
                    GetFullName(aggSym.ParentBagSym, strBuilder, aggSym);
                    if (cch < strBuilder.Length)
                    {
                        strBuilder.Append('.');
                    }
                }
                strBuilder.Append(aggSym.Name);

                typeArgs = (nakedTypeSym as AGGTYPESYM).TypeArguments;
            }
            break;

            case SYMKIND.ERRORSYM:
            {
                ERRORSYM errSym    = nakedTypeSym as ERRORSYM;
                SYM      parentSym = errSym.ParentSym;

                if (parentSym != null && parentSym.IsTYPESYM)
                {
                    GetExplicitImplTypeName(parentSym as TYPESYM, strBuilder);
                    strBuilder.Append('.');
                }
                else if (parentSym != null && parentSym.IsNSAIDSYM)
                {
                    parentSym = (parentSym as NSAIDSYM).NamespaceSym;
                    int cch = strBuilder.Length;
                    GetFullName(parentSym, strBuilder, errSym);
                    if (cch < strBuilder.Length)
                    {
                        strBuilder.Append('.');
                    }
                }
                strBuilder.Append(errSym.ErrorName);

                typeArgs = errSym.TypeArguments;
            }
            break;
            }

            if (typeArgs != null && typeArgs.Count > 0)
            {
                strBuilder.Append('<');
                for (int i = 0; i < typeArgs.Count; ++i)
                {
                    if (i > 0)
                    {
                        strBuilder.Append(',');
                    }
                    GetExplicitImplTypeName(typeArgs[i], strBuilder);
                }
                strBuilder.Append('>');
            }

            // Add ptr and array modifiers
            AddTypeModifiers(typeSym, strBuilder);
        }