@@ -5,6 +5,16 @@ class CilVariable instanceof @method {
55 string toString ( ) { none ( ) }
66}
77
8+ class CilParameter instanceof @il_parameter {
9+ string toString ( ) { result = this .getName ( ) }
10+
11+ CilMethod getMethod ( ) { il_parameter ( this , result , _, _) }
12+
13+ int getIndex ( ) { il_parameter ( this , _, result , _) }
14+
15+ string getName ( ) { il_parameter ( this , _, _, result ) }
16+ }
17+
818class CilMethod extends @method {
919 string getName ( ) { methods ( this , result , _, _) }
1020
@@ -21,6 +31,11 @@ class CilMethod extends @method {
2131 CilInstruction getInstruction ( int i ) { il_instruction_parent ( result , i , this ) }
2232
2333 CilVariable getVariable ( int i ) { none ( ) } // TODO
34+
35+ CilParameter getParameter ( int i ) {
36+ result .getMethod ( ) = this and
37+ result .getIndex ( ) = i
38+ }
2439}
2540
2641pragma [ nomagic]
@@ -77,13 +92,21 @@ class CilNop extends @il_nop, CilInstruction { }
7792
7893class CilBreak extends @il_break, CilInstruction { }
7994
80- class CilLdarg_0 extends @il_ldarg_0, CilInstruction { }
95+ class CilLdarg_0 extends @il_ldarg_0, CilLoadArgument {
96+ override int getArgumentIndex ( ) { result = 0 }
97+ }
8198
82- class CilLdarg_1 extends @il_ldarg_1, CilInstruction { }
99+ class CilLdarg_1 extends @il_ldarg_1, CilLoadArgument {
100+ override int getArgumentIndex ( ) { result = 1 }
101+ }
83102
84- class CilLdarg_2 extends @il_ldarg_2, CilInstruction { }
103+ class CilLdarg_2 extends @il_ldarg_2, CilLoadArgument {
104+ override int getArgumentIndex ( ) { result = 2 }
105+ }
85106
86- class CilLdarg_3 extends @il_ldarg_3, CilInstruction { }
107+ class CilLdarg_3 extends @il_ldarg_3, CilLoadArgument {
108+ override int getArgumentIndex ( ) { result = 3 }
109+ }
87110
88111class CilLdloc_0 extends @il_ldloc_0, CilLoadLocal {
89112 override int getLocalVariableIndex ( ) { result = 0 }
@@ -117,11 +140,15 @@ class CilStloc_3 extends @il_stloc_3, CilStoreLocal {
117140 override int getLocalVariableIndex ( ) { result = 3 }
118141}
119142
120- abstract class CilLoadArgument extends CilInstruction { }
143+ abstract class CilLoadArgument extends CilInstruction {
144+ abstract int getArgumentIndex ( ) ;
145+ }
121146
122- class CilLdarg_S extends @il_ldarg_S, CilLoadArgument { }
147+ class CilLdarg_S extends @il_ldarg_S, CilLoadArgument {
148+ override int getArgumentIndex ( ) { il_operand_byte ( this , result ) }
149+ }
123150
124- class CilLdarga_S extends @il_ldarga_S, CilLoadArgument { }
151+ class CilLdarga_S extends @il_ldarga_S, CilInstruction { }
125152
126153abstract class CilStoreArgument extends CilInstruction { }
127154
@@ -677,7 +704,9 @@ class CilLdftn extends @il_ldftn, CilInstruction { }
677704
678705class CilLdvirtftn extends @il_ldvirtftn, CilInstruction { }
679706
680- class CilLdarg extends @il_ldarg, CilInstruction { }
707+ class CilLdarg extends @il_ldarg, CilLoadArgument {
708+ override int getArgumentIndex ( ) { il_operand_int ( this , result ) }
709+ }
681710
682711class CilLdarga extends @il_ldarga, CilInstruction { }
683712
0 commit comments