Method Body Declarations
<methodDecls> ::= /* EMPTY */ <methodDecls> <methodDecl> <methodDecl> ::= .emitbyte <int32> .maxstack <int32> .locals( <sigArgs> ) .locals init ( <sigArgs> ) .entrypoint .zeroinit .export [ <int32> ] .export [ <int32> ] as <id> .vtentry <int32>:<int32> .override <typeSpec>::<methodName> <scopeBlock> .param [ <int32> ] <initOpt> <id>: <sehBlock> <instr> <secDecl> <extSourceSpec> <languageDecl> <customAttrDecl> <dataDecl> <typeSpec> ::= <classRef> [ <compName> ] [.module <compName> ] <type> <scopeBlock> ::= { <methodDecls> } <sehBlock> ::= <tryBlock> <sehClauses> <tryBlock> ::= .try <scopeBlock> .try <id> to <id> .try <int32> to <int32> <sehClauses> ::= <sehClause> <sehClauses> <sehClause> <sehClause> ::= catch <classRef> <handlerBlock> finally <handlerBlock> fault <handlerBlock> <filterClause> <handlerBlock> <filterClause> ::= filter <scopeBlock> filter <id> filter <int32> <handlerBlock> ::= <scopeBlock> handler <id> to <id> handler <int32> to <int32> <instr> ::= INSTR_NONE // nop INSTR_VAR <int32> // ldarg,ldarga,starg,ldloc, // ldloca,stloc INSTR_VAR <id> INSTR_I <int32> // ldc.i4 INSTR_I8 <int64> // ldc.i8 INSTR_R <float64> // ldc.r8 INSTR_R <int64> INSTR_R ( <bytes> ) INSTR_BRTARGET <int32> // br,brtrue,brfalse,beq,bne,... INSTR_BRTARGET <id> INSTR_METHOD <methodRef> // call,callvirt,jmp,newobj,ldftn,ldvirtftn INSTR_FIELD <type> <typeSpec>::<id> // ldfld,ldsfld,ldflda,ldsflda,stfld,stsfld INSTR_FIELD <type> <id> INSTR_TYPE <typeSpec> // ldobj,stobj,box,unbox,newarr,... INSTR_STRING <compQstring> // ldstr INSTR_STRING bytearray = ( <bytes> ) INSTR_SIG <callConv> <type> ( <sigArgs> ) // calli INSTR_TOK <ownerType> // ldtoken INSTR_SWITCH ( <labels> ) // switch <methodRef> ::= <callConv> <type> <typeSpec>::<methodName>( <sigArgs> ) <callConv> <type> <methodName>( <sigArgs> ) <labels> ::= /* EMPTY */ <id>,<labels> <int32>,<labels> <id> <int32> <ownerType> ::= <typeSpec> <memberRef> <memberRef> ::= method <methodRef> field <type> <typeSpec>::<id> field <type> <id>