Appendix A

image

ILAsm Grammar Reference

Lexical Tokens

ID - C style alphanumeric identifier (e.g., Hello_There2)
DOTTEDNAME - Sequence of dot-separated IDs (e.g., System.Object)
QSTRING  - C style quoted string (e.g.,  "hi ")
SQSTRING - Single-quoted string(e.g.,  'hi')
INT32    - C style 32-bit integer (e.g.,  235,  03423, 0x34FFF)
INT64    - C style 64-bit integer (e.g.,  -2353453636235234,  0x34FFFFFFFFFF)
FLOAT64  - C style floating point number (e.g.,  -0.2323, 354.3423, 3435.34E-5)
INSTR_*  - IL instructions of a particular class (see opcode.def)
HEXBYTE  - 1- or 2-digit hexadecimal number (e.g., A2, F0)

ILAsm keywords are in bold (e.g., .class, valuetype, marshal)

Comments are enclosed in pairs /* */ (e.g., /* This is a comment */)

Auxiliary Lexical Tokens

TYPEDEF_T - Aliased class (TypeDef or TypeRef)
TYPEDEF_M - Aliased method
TYPEDEF_F - Aliased field
TYPEDEF_TS - Aliased type specification (TypeSpec)
TYPEDEF_MR - Aliased field/method reference (MemberRef)
TYPEDEF_CA – Aliased custom attribute

Data Type Nonterminals

compQstring::= QSTRING |compQstring+ QSTRING
int32::= INT64
int64::= INT64
float64::= FLOAT64 | float32(int32) | float64(int64)
bytes::= /* EMPTY */ |hexbytes
hexbytes::= HEXBYTE |hexbytesHEXBYTE
truefalse::= true| false
mdtoken::= mdtoken(int32)

Identifier Nonterminals

id::= ID | SQSTRING
dottedName::=id| DOTTEDNAME |dottedName.dottedName
slashedName::=dottedName|slashedName/dottedName

Class Referencing

className::= [dottedName]slashedName
          | [mdtoken]slashedName
          | [ * ]slashedName
          | [ .moduledottedName]slashedName
          |slashedName
          |mdtoken
          | TYPEDEF_T
          | .this
          | .base
          | .nester
 
classNameSeq::= /* EMPTY */ |className classNameSeq

Module-Level Declarations

PROGRAM ::=decls
decls::= /* EMPTY */ |decls decl
 
decl::=moduleParamDecl
     |manifestDecl
     |classHead{classDecls}
     | .namespacedottedName{decls} /* obsolete */
     |methodHead  methodDecls}
     |fieldDecl
     |dataDecl
     |extSourceSpec
     |secDecl
     |customAttrDecl
     |languageDecl
     |typedefDecl
     |compControl

Compilation Control Directives

compControl::= #definedottedName
            | #definedottedNameQSTRING
            | #undefdottedName
            | #ifdefdottedName
            | #ifndefdottedName
            | #else
            | #endif
            | #include QSTRING
            | ;

Module Parameter Declaration

moduleParamDecl::= .subsystemint32
                | .corflagsint32
                | .file alignmentint32
                | .imagebaseint64
                | .stackreserveint64
                | .typelist{classNameSeq}
                | .mscorlib
                |vtableDecl/* deprecated, usevtfixupDeclinstead */
                |vtfixupDecl

V-Table Fixup Table Declaration

vtfixupDecl::= .vtfixup[int32]vtfixupAttratid
 
vtfixupAttr::= /* EMPTY */
            |vtfixupAttrint32
            |vtfixupAttrint64
            |vtfixupAttrfromunmanaged
            |vtfixupAttrcallmostderived  /* unused */
            |vtfixupAttrretainappdomain  /* unused */
 
vtableDecl::= .vtable= (bytes)   /* deprecated, use .vtfixup instead */

Manifest Declarations

manifestDecl::= .module
             | .moduledottedName
             | .module externdottedName
             |assemblyHead{assemblyDecls}
             |assemblyRefHead{assemblyRefDecls}
             |fileDecl
             |exptypeHead{exptypeDecls}
             |manifestResHead{manifestResDecls}
             |moduleHead
 
assemblyHead::= .assemblyasmAttr dottedName
 
asmAttr::= /* EMPTY */
        |asmAttrretargetable
        |asmAttrlegacy library/* for backward compatibility only */
        |asmAttrcil
        |asmAttrx86
        |asmAttria64
        |asmAttramd64
        |asmAttrarm/* introduced in v4.5 */
        |asmAttrwindowsruntime/* introduced in v4.5 */
 
assemblyDecls::= /* EMPTY */
              |assemblyDecls assemblyDecl
 
assemblyDecl::= .hash algorithmint32
             |secDecl
             |asmOrRefDecl
 
asmOrRefDecl::= .publickey= (bytes)
             | .verintOrWildcard:intOrWildcard:intOrWildcard:intOrWildcard
             | .localecompQstring
             | .locale= (bytes)
             |customAttrDecl
             |compControl
 
intOrWildcard::=int32| *
 
assemblyRefHead::= .assembly externasmAttr dottedName
                | .assembly externasmAttr dottedNameasdottedName
 
assemblyRefDecls::= /* EMPTY */
                 |assemblyRefDecls assemblyRefDecl
 
assemblyRefDecl::= .hash= (bytes)
                |asmOrRefDecl
                | .publickeytoken= (bytes)
                | auto
 
fileDecl::= .filefileAttr dottedName fileEntry.hash= (bytes)fileEntry
         | .filefileAttr dottedName fileEntry
 
fileAttr::= /* EMPTY */
         |fileAttrnometadata
 
fileEntry::= /* EMPTY */
          | .entrypoint
 
exptypeHead::= .class externexptAttr dottedName
 
exptAttr::= /* EMPTY */
         |exptAttrprivate
         |exptAttrpublic
         |exptAttrforwarder
         |exptAttrnested public
         |exptAttrnested private
         |exptAttrnested family
         |exptAttrnested assembly
         |exptAttrnested famandassem
         |exptAttrnested famorassem
 
exptypeDecls::= /* EMPTY */
             |exptypeDecls exptypeDecl
 
exptypeDecl::= .filedottedName
            | .class externslashedName
            | .assembly externdottedName
            | mdtoken(int32)
            | .classint32
            |customAttrDecl
            |compControl
 
manifestResHead::= .mresourcemanresAttr dottedName
                | .mresourcemanresAttr dottedNameasdottedName
 
manresAttr::= /* EMPTY */
           |manresAttrpublic
           |manresAttrprivate
 
manifestResDecls::= /* EMPTY */
                 |manifestResDecls manifestResDecl
 
manifestResDecl::= .filedottedNameatint32
                | .assembly externdottedName
                |customAttrDecl
                |compControl

Managed Types in Signatures

type::= classclassName
     | value classclassName
     | valuetypeclassName
     |type[ ]
     |type[bounds]
     |type&
     |type*
     |typepinned
     |typemodreq(typeSpec)
     |typemodopt(typeSpec)
     | methodcallConv type* (sigArgs0)
     |type<tyArgs>
     | ! !int32
     | !int32
     | ! !dottedName
     | !dottedName
     | object
     | typedref
     | void
     | native int
     | native unsigned int
     | native uint
     | native float
     |simpleType
     | ...type
 
simpleType::= char
           | string
           | bool
           |intType
           | float32
           | float64
           | TYPEDEF_TS
 
intType::= int8
        | int16
        | int32
        | int64
        | unsigned int8
        | unsigned int16
        | unsigned int32
        | unsigned int64
        | uint8
        | uint16
        | uint32
        | uint64
 
bounds::=bound|bounds,bound
 
bound::= /* EMPTY */
      | ...
      |int32
      |int32...int32
      |int32...
 
typeSpec::=className
         | [dottedName]
         | [ .moduledottedName]
         |type

Native Types in Marshaling Signatures

nativeType::= /* EMPTY */
           | custom(compQstring,compQstring,compQstring,compQstring)
           | custom(compQstring,compQstring)
           | fixed sysstring[int32]
           | fixed array[int32]nativeType
           | variant
           | currency
           | syschar
           | void
           | bool
           |intType
           | float32
           | float64
           | error
           |nativeType*
           |nativeType[ ]
           |nativeType[int32]
           |nativeType[int32+int32]
           |nativeType[ +int32]
           | decimal
           | date
           | bstr
           | lpstr
           | lpwstr
           | lptstr
           | objectref
           | iunknown  iidParamIndex
           | idispatchiidParamIndex
           | struct
           | interfaceiidParamIndex
           | safearrayvariantType
           | safearrayvariantType,compQstring
           | int
           | unsigned int
           | uint
           | nested struct
           | byvalstr
           | ansi bstr
           | tbstr
           | variant bool
           | method
           | as any
           | lpstruct
           | TYPEDEF_TS
 
iidParamIndex::= /* EMPTY */ | (iidparam=int32)
 
variantType::= /* EMPTY */
            | null
            | variant
            | currency
            | void
            | bool
            |intType
            | float32
            | float64
            | *
            |variantType[ ]
            |variantTypevector
            |variantType&
            | decimal
            | date
            | bstr
            | lpstr
            | lpwstr
            | iunknown
            | idispatch
            | safearray
            | int
            | unsigned int
            | uint
            | error
            | hresult
            | carray
            | userdefined
            | record
            | filetime
            | blob
            | stream
            | storage
            | streamed_object
            | stored_object
            | blob_object
            | cf
            | clsid

Method and Field Referencing

methodRef::=callConv type typeSpec::methodName tyArgs0(sigArgs0)
          |callConv type methodName tyArgs0(sigArgs0)
          |mdtoken
          | TYPEDEF_M
          | TYPEDEF_MR
 
genMethodRef::= methodcallConv type typeSpec::methodName genArity(sigArgs0)
 
callConv::= instancecallConv
         | explicitcallConv
         |callKind
         | callconv(int32)
 
callKind::= /* EMPTY */
         | default
         | vararg
         | unmanaged cdecl
         | unmanaged stdcall
         | unmanaged thiscall
         | unmanaged fastcall
 
methodName::= .ctor
           | .cctor
           |dottedName
 
genArity::= /* EMPTY */
         | < [int32] >
 
tyArgs0::= /* EMPTY */ | <tyArgs>
 
tyArgs::= /* EMPTY */ |tyArgsNotEmpty
 
tyArgsNotEmpty:=type|tyArgsNotEmpty,type
 
sigArgs0::= /* EMPTY */ |sigArgsNotEmpty
 
sigArgsNotEmpty::=sigArg|sigArgsNotEmpty,sigArg
 
sigArg::= ...  /* ellipsis */
       |paramAttr type marshalClause
       |paramAttr type marshalClauseid
 
fieldRef::=type typeSpec::dottedName
          |type dottedName
          | TYPEDEF_F
          | TYPEDEF_MR
          |mdtoken
 
memberRef::= methodmethodRef
          | fieldfieldRef

Class Declaration

classHead::= classHeadBegin extendsClause implClause
 
classHeadBegin::= .classclassAttr dottedName typarsClause
 
classAttr::= /* EMPTY */
          |classAttrpublic
          |classAttrprivate
          |classAttrvalue
          |classAttrenum
          |classAttrinterface
          |classAttrsealed
          |classAttrabstract
          |classAttrauto
          |classAttrsequential
          |classAttrexplicit
          |classAttransi
          |classAttrunicode
          |classAttrautochar
          |classAttrimport
          |classAttrserializable
          |classAttrnested public
          |classAttrnested private
          |classAttrnested family
          |classAttrnested assembly
          |classAttrnested famandassem
          |classAttrnested famorassem
          |classAttrbeforefieldinit
          |classAttrspecialname
          |classAttrrtspecialname
          |classAttrwindowsruntime/* introduced in v4.5 */
          |classAttrflags(int32)
 
extendsClause::= /* EMPTY */
              | extendstypeSpec
 
implClause::= /* EMPTY */
           | implementsimplList
 
implList::=implList,typeSpec
         |typeSpec

Generic Type Parameters Declaration

typeList::= /* EMPTY */
         |typeListNotEmpty
 
typeListNotEmpty::=typeSpec
                 |typeListNotEmpty,typeSpec
 
typarsClause::= /* EMPTY */
             | <typars>
 
typarAttrib::= + | - | class| valuetype| .ctor
 
typarAttribs::= /* EMPTY */
             |typarAttrib typarAttribs
 
typars::=typarAttribs tyBound dottedName typarsRest
       |typarAttribs dottedName typarsRest
 
tyBound::= (typeList)
 
typarsRest::= /* EMPTY */
           | ,typars

Class Body Declarations

classDecls::= /* EMPTY */
           |classDecls classDecl
 
classDecl::=methodHead  methodDecls}
          |classHead{classDecls}
          |eventHead{eventDecls}
          |propHead{propDecls}
          |fieldDecl
          |dataDecl
          |secDecl
          |extSourceSpec
          |customAttrDecl
          | .sizeint32
          | .packint32
          | .overridetypeSpec::methodNamewith
                callConv type typeSpec::methodName(sigArgs0)
          | .overridegenMethodRefwithgenMethodRef
          |languageDecl
          |compControl
          | .param type[int32]
          | .param typedottedName

Field Declaration

fieldDecl::=.fieldrepeatOpt fieldAttr marshalClause type dottedName atOpt initOpt
 
fieldAttr::= /* EMPTY */
          |fieldAttrstatic
          |fieldAttrpublic
          |fieldAttrprivate
          |fieldAttrfamily
          |fieldAttrassembly
          |fieldAttrfamandassem
          |fieldAttrfamorassem
          |fieldAttrprivatescope
          |fieldAttrinitonly
          |fieldAttrrtspecialname
          |fieldAttrspecialname
          |fieldAttrliteral
          |fieldAttrnotserialized
          |fieldAttrflags(int32)
 
marshalClause::= /* EMPTY */
              | marshal(nativeType)
 
atOpt::= /* EMPTY */
      | atid
 
initOpt::= /* EMPTY */
        | =fieldInit
 
repeatOpt::= /* EMPTY */
          | [int32]

Method Declaration

methodHead::=.methodmethAttr callConv paramAttr type marshalClause
                  methodName typarsClause(sigArgs0)implAttr{
 
methAttr::= /* EMPTY */
         |methAttrstatic
         |methAttrpublic
         |methAttrprivate
         |methAttrfamily
         |methAttrassembly
         |methAttrfamandassem
         |methAttrfamorassem
         |methAttrprivatescope  /* default */
         |methAttrfinal
         |methAttrvirtual
         |methAttrstrict
         |methAttrabstract
         |methAttrhidebysig
         |methAttrnewslot
         |methAttrspecialname
         |methAttrrtspecialname
         |methAttrunmanagedexp  /* unused */
         |methAttrreqsecobj
         |methAttrflags(int32)
         |methAttrpinvokeimpl(compQstringascompQstring pinvAttr)
         |methAttrpinvokeimpl(compQstring  pinvAttr)
         |methAttrpinvokeimpl(pinvAttr)
 
pinvAttr::= /* EMPTY */
         |pinvAttrnomangle
         |pinvAttransi
         |pinvAttrunicode
         |pinvAttrautochar
         |pinvAttrlasterr
         |pinvAttrwinapi
         |pinvAttrcdecl
         |pinvAttrstdcall
         |pinvAttrthiscall
         |pinvAttrfastcall
         |pinvAttrbestfit: on
         |pinvAttrbestfit: off
         |pinvAttrcharmaperror: on
         |pinvAttrcharmaperror: off
         |pinvAttrflags(int32)
 
paramAttr::= /* EMPTY */
          |paramAttr[ in]
          |paramAttr[ out]
          |paramAttr[ opt]
          |paramAttr[int32]
 
implAttr::= /* EMPTY */
         |implAttrnative
         |implAttrcil      /* default */
         |implAttroptil    /* unused */
         |implAttrmanaged  /* default */
         |implAttrunmanaged
         |implAttrforwardref
         |implAttrpreservesig
         |implAttrruntime
         |implAttrinternalcall
         |implAttrsynchronized
         |implAttrnoinlining
         |implAttrflags(int32)

Method Body Declarations

methodDecls::= /* EMPTY */
            |methodDecls methodDecl
 
methodDecl::= .emitbyteint32
           |mehBlock
           | .maxstackint32
           | .locals(sigArgs0)
           | .locals init(sigArgs0)
           | .entrypoint
           | .zeroinit   /* deprecated, use .locals init*/
           |dataDecl
           |instr
           |id:        /* label */
           |secDecl
           |extSourceSpec
           |languageDecl
           |customAttrDecl
           |compControl
           | .export[int32]
           | .export[int32] asid
           | .vtentryint32:int32
           | .overridetypeSpec::methodName
           | .overridegenMethodRef
           |scopeBlock
           | .param type[int32]
           | .param typedottedName
           | .param[int32]initOpt
 
scopeBlock::= {methodDecls}

External Source Directives

languageDecl::= .language SQSTRING
             | .language SQSTRING , SQSTRING
             | .language SQSTRING , SQSTRING , SQSTRING
 
extSourceSpec::=esHead int32SQSTRING
              |esHead int32
              |esHead int32:int32SQSTRING
              |esHead int32:int32
              |esHead int32:int32,int32SQSTRING
              |esHead int32:int32,int32
              |esHead int32,int32:int32SQSTRING
              |esHead int32,int32:int32
              |esHead int32,int32:int32,int32SQSTRING
              |esHead int32,int32:int32,int32
              |esHead int32QSTRING
 
esHead::= .line| #line

Managed Exception Handling Directives

mehBlock::= tryBlock mehClauses
 
tryBlock::= .tryscopeBlock
         | .tryidtoid
         | .tryint32toint32
 
mehClauses::=mehClause mehClauses
           |mehClause
 
mehClause::= catchtypeSpec handlerBlock
          |filterClause handlerBlock
          | finallyhandlerBlock
          | faulthandlerBlock
 
filterClause::= filterscopeBlock
             | filterid
             | filterint32
 
handlerBlock::=scopeBlock
             | handleridtoid
             | handlerint32toint32

IL Instructions

instr::= INSTR_NONE /* nop, add, ldc.i4.1, ldnull, ldarg.0, and so on */
      | INSTR_VARint32/* ldarg, ldarga, starg, ldloc, ldloca, stloc*/
      | INSTR_VARid
      | INSTR_Iint32  /* ldc.i4*/
      | INSTR_I8int64/* ldc.i8*/
      | INSTR_Rfloat64/* ldc.r4, ldc.r8*/
      | INSTR_Rint64
      | INSTR_R (bytes)
      | INSTR_BRTARGETint32/* br, beq, ble, brtrue, etc. */
      | INSTR_BRTARGETid
      | INSTR_METHODmethodRef/* call, callvirt, jmp, ldftn, ldvirtftn, newobj*/
      | INSTR_FIELDfieldRef  /* ldfld, stfld, ldflda, ldsflda, stfld, stsfld*/
      | INSTR_TYPEtypeSpec   /* ldobj, stobj, box, unbox, newarr, etc. */
      | INSTR_STRINGcompQstring  /* ldstr*/
      | INSTR_STRING ansi(compQstring)
      | INSTR_STRING bytearray= (bytes)
      | INSTR_SIGcallConv type(sigArgs0) /* calli*/
      | INSTR_TOKownerType/* ldtoken*/
      | INSTR_SWITCH (labels)
 
labels::= /* EMPTY */
       |id,labels
       |int32,labels
       |id
       |int32

Event Declaration

eventHead::=.eventeventAttr typeSpec dottedName
          | .eventeventAttr dottedName
 
eventAttr::= /* EMPTY */
          |eventAttrrtspecialname
          |eventAttrspecialname
 
eventDecls::= /* EMPTY */
           |eventDecls eventDecl
 
eventDecl::= .addonmethodRef
          | .removeonmethodRef
          | .firemethodRef
          | .othermethodRef
          |extSourceSpec
          |customAttrDecl
          |languageDecl
          |compControl

Property Declaration

propHead::=.propertypropAttr callConv type dottedName ( sigArgs0 ) initOpt
 
propAttr::= /* EMPTY */
         |propAttrrtspecialname
         |propAttrspecialname
 
propDecls::= /* EMPTY */
          |propDecls propDecl
 
propDecl::= .setmethodRef
         | .getmethodRef
         | .othermethodRef
         |extSourceSpec
         |customAttrDecl
         |languageDecl
         |compControl

Constant Declarations

/*  Default values declaration for fields, properties, parameters
    and verbal form of Custom Attribute blob description  */
 
/*  Field/property/parameter initialization  */
fieldInit::=fieldSerInit
          |compQstring
          | nullref
 
fieldSerInit::= float32(float64)
             | float64(float64)
             | float32(int32)
             | float64(int64)
             | int64(int64)
             | int32(int32)
             | int16(int32)
             | int8(int32)
             | unsigned int64(int64)
             | unsigned int32(int32)
             | unsigned int16(int32)
             | unsigned int8(int32)
             | uint64(int64)
             | uint32(int32)
             | uint16(int32)
             | uint8(int32)
             | char(int32)
             | bool(truefalse)
             | bytearray(bytes)
 
/*  Values for verbal form of Custom Attribute blob description  */
serInit::=fieldSerInit
        | string(nullref)
        | string( SQSTRING )
        | type(class SQSTRING ) /* class name specified in Reflection notation */
        | type(className) /* class name specified in ILAsm notation */
        | type(nullref)
        | object(serInit)
        | float32[int32] (f32seq)
        | float64[int32] (f64seq)
        | int64[int32] (i64seq)
        | int32[int32] (i32seq)
        | int16[int32] (i16seq)
        | int8[int32] (i8seq)
        | uint64[int32] (i64seq)
        | uint32[int32] (i32seq)
        | uint16[int32] (i16seq)
        | uint8[int32] (i8seq)
        | unsigned int64[int32] (i64seq)
        | unsigned int32[int32] (i32seq)
        | unsigned int16[int32] (i16seq)
        | unsigned int8[int32] (i8seq)
        | char[int32] (i16seq)
        | bool[int32] (boolSeq)
        | string[int32] (sqstringSeq)
        | type[int32] (classSeq)
        | object[int32] (objSeq)
 
f32seq::= /* EMPTY */
       |f32seq float64
       |f32seq int32
 
f64seq::= /* EMPTY */
       |f64seq float64
       |f64seq int64
 
i64seq::= /* EMPTY */ |i64seq int64
 
i32seq::= /* EMPTY */ |i32seq int32
 
i16seq::= /* EMPTY */ |i16seq int32
 
i8seq  ::= /* EMPTY */ |i8seq int32
 
boolSeq::= /* EMPTY */ |boolSeq truefalse
 
sqstringSeq::= /* EMPTY */
            |sqstringSeqnullref
            |sqstringSeqSQSTRING
 
classSeq::= /* EMPTY */
         |classSeqnullref
         |classSeqclass SQSTRING /* class name specified in Reflection notation */
         |classSeq className/* class name specified in ILAsm notation */
 
objSeq::= /* EMPTY */ |objSeq serInit

Custom Attribute Declarations

customAttrDecl::= customDescr
               |customDescrWithOwner
               | TYPEDEF_CA
 
customDescr::= .customcustomType
            | .customcustomType=compQstring
            | .customcustomType= {customBlobDescr}
            | .customcustomType= (bytes)
 
customDescrWithOwner::= .custom(ownerType)customType
            | .custom(ownerType)customType=compQstring
            | .custom(ownerType)customType= {customBlobDescr}
            | .custom(ownerType)customType= (bytes)
 
customType::=methodRef/* method must be .ctor*/
 
ownerType::= typeSpec | memberRef

Verbal Description of Custom Attribute Initialization Blob

customBlobDescr::= customBlobArgs customBlobNVPairs
 
customBlobArgs::= /* EMPTY */
               |customBlobArgs serInit
               |customBlobArgs compControl
 
customBlobNVPairs::= /* EMPTY */
               |customBlobNVPairs fieldOrProp serializType dottedName=serInit
               |customBlobNVPairs compControl
 
fieldOrProp::= field| property
 
serializType::=simpleType
             | type
             | object
             | enum class SQSTRING /* class specified in Reflection notation */
             | enumclassName/* class name specified in ILAsm notation */
             |serializType[ ]

Security Declarations

secDecl::= .permissionsecAction typeSpec ( nameValPairs )
        | .permissionsecAction typeSpec= {customBlobDescr}
        | .permissionsecAction typeSpec
        | .permissionsetsecAction= (bytes)
        | .permissionsetsecActionbytearray(bytes)
        | .permissionsetsecAction compQstring
        | .permissionsetsecAction= {secAttrSetBlob}
 
secAttrSetBlob::= /* EMPTY */
               |secAttrBlob
               |secAttrBlob,secAttrSetBlob
 
secAttrBlob::=typeSpec= {customBlobNVPairs}
            | classSQSTRING= {customBlobNVPairs}
 
nameValPairs::=nameValPair
             |nameValPair,nameValPairs
 
nameValPair::=compQstring=caValue
 
caValue::=truefalse
        |int32
        | int32(int32)
        |compQstring
        |className(int8:int32)
        |className(int16:int32)
        |className(int32:int32)
        |className(int32)
 
secAction::= request
          | demand
          | assert
          | deny/* not supported in v4.0 or later */
          | permitonly
          | linkcheck
          | inheritcheck
          | reqmin/* not supported in v4.0 or later */
          | reqopt/* not supported in v4.0 or later */
          | reqrefuse/* not supported in v4.0 or later */
          | prejitgrant
          | prejitdeny
          | noncasdemand
          | noncaslinkdemand
          | noncasinheritance

Aliasing of Types, Methods, Fields, and Custom Attributes

typedefDecl::= .typedeftypeasdottedName               /* TYPEDEF_TS */
            | .typedefclassNameasdottedName            /* TYPEDEF_T  */
            | .typedefmemberRefasdottedName            /* TYPEDEF_M, _F, _MR */
            | .typedefcustomDescrasdottedName          /* TYPEDEF_CA */
            | .typedefcustomDescrWithOwnerasdottedName/* TYPEDEF_CA */

Data Declaration

dataDecl::= ddHead ddBody
 
ddHead::= .datasection id=
       | .datasection
 
section::= /* EMPTY */  /* defaults to .sdata section */
        | tls  /* .tls section */
        | cil  /* .text section */
 
ddBody::= {ddItemList}
       |ddItem
 
ddItemList::=ddItem,ddItemList
           |ddItem
 
ddItem::= char* (compQstring)
       | & (id)  /* data is pointer to another data */
       | bytearray(bytes)
       | float32(float64)ddItemCount
       | float64(float64)ddItemCount
       | int64(int64)ddItemCount
       | int32(int32)ddItemCount
       | int16(int32)ddItemCount
       | int8(int32)ddItemCount
       | float32ddItemCount
       | float64ddItemCount
       | int64ddItemCount
       | int32ddItemCount
       | int16ddItemCount
       | int8ddItemCount
 
ddItemCount::= /* EMPTY */ /* defaults to 1 */
            | [int32]
..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
18.216.83.240