⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 enumdeclaration.vb

📁 大名鼎鼎的mono是.NET平台的跨平台(支持linux
💻 VB
字号:
' ' Visual Basic.Net Compiler' Copyright (C) 2004 - 2007 Rolf Bjarne Kvinge, RKvinge@novell.com' ' This library is free software; you can redistribute it and/or' modify it under the terms of the GNU Lesser General Public' License as published by the Free Software Foundation; either' version 2.1 of the License, or (at your option) any later version.' ' This library is distributed in the hope that it will be useful,' but WITHOUT ANY WARRANTY; without even the implied warranty of' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU' Lesser General Public License for more details.' ' You should have received a copy of the GNU Lesser General Public' License along with this library; if not, write to the Free Software' Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA' Imports System.Reflection.Emit''' <summary>''' EnumDeclaration  ::='''	[  Attributes  ]  [  TypeModifier+  ]  "Enum"  Identifier  [  "As"  IntegralTypeName  ]  StatementTerminator'''	   EnumMemberDeclaration+'''	"End" "Enum"  StatementTerminator''' ''' LAMESPEC: IntegralTypeName is QualifiedName in the spec. (QualifiedName doesn't exist...)''' </summary>''' <remarks></remarks>Public Class EnumDeclaration    Inherits TypeDeclaration    Private m_QualifiedName As KS = KS.Integer    Private m_Constants As Generic.List(Of EnumMemberDeclaration)    Public Const EnumTypeMemberName As String = "value__"    Sub New(ByVal Parent As ParsedObject, ByVal [Namespace] As String)        MyBase.New(Parent, [Namespace])    End Sub    Shadows Sub Init(ByVal CustomAttributes As Attributes, ByVal Modifiers As Modifiers, ByVal Members As MemberDeclarations, ByVal Name As Token, ByVal EnumType As KS)        MyBase.Init(CustomAttributes, Modifiers, Members, Name, 0)        m_QualifiedName = EnumType    End Sub    ReadOnly Property Constants() As Generic.List(Of EnumMemberDeclaration)        Get            If m_Constants Is Nothing Then                m_Constants = Members.GetSpecificMembers(Of EnumMemberDeclaration)()                Helper.Assert(m_Constants.Count = Members.Count)            End If            Return m_Constants        End Get    End Property    Overrides Function ResolveType() As Boolean        Dim result As Boolean = True#If ENABLECECIL Then        CecilBaseType = Compiler.CecilTypeCache.System_Enum#End If        BaseType = Compiler.TypeCache.System_Enum        result = MyBase.ResolveType AndAlso result        Return result    End Function    ReadOnly Property EnumConstantTypeKeyword() As KS        Get            Return m_QualifiedName        End Get    End Property    ReadOnly Property EnumConstantType() As Type 'Descriptor        Get            Return Compiler.TypeResolution.TypeCodeToType(TypeResolution.KeywordToTypeCode(m_QualifiedName))        End Get    End Property    Overrides Function DefineType() As Boolean        Dim result As Boolean = True        Dim enumBuilder As EnumBuilder = Nothing        Helper.Assert(BaseType IsNot Nothing OrElse Me.TypeDescriptor.IsInterface)        Helper.Assert(Name IsNot Nothing)        'Create the type builder.        Dim Attr As TypeAttributes        Attr = Me.TypeAttributes        If Helper.IsOnMono OrElse IsNestedType Then            result = MyBase.DefineType() AndAlso result        Else            'This is necessary on MS, since they won't allow the use of the enum fields in attribute constructors otherwise.            enumBuilder = Compiler.ModuleBuilder.DefineEnum(FullName, Attr And Reflection.TypeAttributes.VisibilityMask, EnumConstantType)            Compiler.TypeManager.RegisterReflectionType(enumBuilder, Me.TypeDescriptor)            MyBase.EnumBuilder = enumBuilder        End If        Helper.Assert(TypeBuilder IsNot Nothing OrElse enumBuilder IsNot Nothing)        Return result    End Function    Public Overrides Function DefineTypeHierarchy() As Boolean        Dim result As Boolean = True        result = MyBase.DefineTypeHierarchy AndAlso result        If TypeBuilder IsNot Nothing Then            Dim valueField As FieldInfo            valueField = TypeBuilder.DefineField(EnumTypeMemberName, EnumConstantType, Reflection.FieldAttributes.Public Or Reflection.FieldAttributes.SpecialName Or FieldAttributes.RTSpecialName)        End If        Return result    End Function    Shared Function IsMe(ByVal tm As tm) As Boolean        Dim i As Integer        While tm.PeekToken(i).Equals(ModifierMasks.TypeModifiers)            i += 1        End While        Return tm.PeekToken(i).Equals(KS.Enum)    End Function    ReadOnly Property QualifiedName() As KS        Get            Return m_QualifiedName        End Get    End Property    Public Overrides ReadOnly Property TypeAttributes() As System.Reflection.TypeAttributes        Get            Return Helper.getTypeAttributeScopeFromScope(Modifiers, IsNestedType) Or Reflection.TypeAttributes.Sealed        End Get    End Property    Public Overrides ReadOnly Property IsShared() As Boolean        Get            Return True        End Get    End PropertyEnd Class

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -