コード例 #1
0
ファイル: module.cs プロジェクト: balkin/playscript-mono
            private void VisitClass(Class c)
            {
                if (visitedClasses.Contains(c))
                {
                    Skip = true;
                    return;
                }
                visitedClasses.Add(c);

                switch (CurrentPass)
                {
                case Pass.DiscoverClassesAndMethods: {
                    TypeSpec baseType = c.BaseType;
                    if (baseType != null)
                    {
                        if (verbose)
                        {
                            Console.WriteLine("[Auto-sealing] Found parent class {0} for class {1}.", baseType.GetSignatureForError(), c.GetSignatureForError());
                        }
                        baseTypes.Add(baseType);

                        if (baseType.MemberDefinition is ImportedTypeDefinition)
                        {
                            // The base class is coming from another assembly - It will not be visited as part of this assembly
                            // But we still have to get some of its information recursively
                            // and visit all the methods

                            // TODO: Do the parsing work
                        }
                    }
                    break;
                }

                case Pass.FinalizeModifierFlags:
                    // Last class of a hierarchy are auto-sealed if they are not static
                    if (IsLeafClass(c.CurrentType) && ((c.ModFlags & Modifiers.STATIC) == 0))
                    {
                        if (verbose)
                        {
                            Console.WriteLine("[Auto-sealing] Making class {0} sealed.", c.GetSignatureForError());
                        }

                        // When we seal here, we get proper compile error, however the class does not seem to be marked as sealed in IL
                        //c.ModFlags |= Modifiers.SEALED;
                    }
                    break;
                }
            }
コード例 #2
0
ファイル: module.cs プロジェクト: johnv315/playscript-mono
			private void VisitClass(Class c)
			{
				if (visitedClasses.Contains(c)) {
					Skip = true;
					return;
				}
				visitedClasses.Add(c);

				switch (CurrentPass) {
					case Pass.DiscoverClassesAndMethods: {
						TypeSpec baseType = c.BaseType;
						if (baseType != null) {
							if (verbose) {
								Console.WriteLine("[Auto-sealing] Found parent class {0} for class {1}.", baseType.GetSignatureForError(), c.GetSignatureForError());
							}
							baseTypes.Add (baseType);

							if (baseType.MemberDefinition is ImportedTypeDefinition) {
								// The base class is coming from another assembly - It will not be visited as part of this assembly
								// But we still have to get some of its information recursively
								// and visit all the methods

								// TODO: Do the parsing work
							}
						}
						break;
					}

					case Pass.FinalizeModifierFlags:
						// Last class of a hierarchy are auto-sealed if they are not static
						if (IsLeafClass(c.CurrentType) && ((c.ModFlags & Modifiers.STATIC) == 0)) {
							if (verbose) {
								Console.WriteLine("[Auto-sealing] Making class {0} sealed.", c.GetSignatureForError());
							}

							// When we seal here, we get proper compile error, however the class does not seem to be marked as sealed in IL
							c.ModFlags |= Modifiers.SEALED;
						}
						break;
				}
			}