throw new Exception ("Type host is null");
if (current_type == type_host && ec.IsStatic){
- if (ec.IsStatic)
+ if (ec.IsStatic){
method_modifiers |= Modifiers.STATIC;
+ }
current_type = null;
}
method_modifiers, false, new MemberName ("<#AnonymousMethod>" + anonymous_method_count++),
Parameters, null, loc);
method.Block = Block;
-
//
// Swap the TypeBuilder while we define the method, then restore
invoke_mb = (MethodInfo) Delegate.GetInvokeMethod (ec, delegate_type, loc);
ParameterData invoke_pd = TypeManager.GetParameterData (invoke_mb);
- //
- // If implicit parameters are set, then we must check for out in the parameters
- // and flag it accordingly.
- //
- bool out_invalid_check = false;
-
if (Parameters == null){
int i, j;
- out_invalid_check = true;
//
// We provide a set of inaccessible parameters
for (int i = 0; i < amp.Count; i++){
Parameter.Modifier amp_mod = amp.ParameterModifier (i);
+
+ if ((amp_mod & (Parameter.Modifier.OUT | Parameter.Modifier.REF)) != 0){
+ if (!probe){
+ Error_ParameterMismatch (delegate_type);
+ Report.Error (1677, loc, "Parameter '{0}' should not be declared with the '{1}' keyword",
+ i+1, amp.ModifierDesc (i));
+ }
+ return null;
+ }
+
if (amp_mod != invoke_pd.ParameterModifier (i)){
if (!probe){
Report.Error (1676, loc,
}
return null;
}
-
- if (out_invalid_check && (invoke_pd.ParameterModifier (i) & Parameter.Modifier.OUT) != 0){
- if (!probe){
- Report.Error (1676, loc,"Parameter {0} must include the `out' modifier ", i+1);
- Error_ParameterMismatch (delegate_type);
- }
- return null;
- }
}
//
// Adjust based on the computed state of the
// method from CreateMethodHost
- if ((method_modifiers & Modifiers.STATIC) != 0)
- aec.IsStatic = true;
+ aec.MethodIsStatic = (method_modifiers & Modifiers.STATIC) != 0;
aec.EmitMeta (Block, amp);
aec.EmitResolvedTopBlock (Block, unreachable);