public override object Visit (Mono.CSharpPs.AnonymousMethodExpression anonymousMethodExpression) { var result = new AnonymousMethodExpression (); var location = LocationsBag.GetLocations (anonymousMethodExpression); int l = 0; if (anonymousMethodExpression.IsAsync) { result.IsAsync = true; result.AddChild (new CSharpTokenNode (Convert (location [l++]), AnonymousMethodExpression.AsyncModifierRole), AnonymousMethodExpression.AsyncModifierRole); } if (location != null) { result.AddChild (new CSharpTokenNode (Convert (location [l++]), AnonymousMethodExpression.DelegateKeywordRole), AnonymousMethodExpression.DelegateKeywordRole); if (location.Count > l) { result.HasParameterList = true; result.AddChild (new CSharpTokenNode (Convert (location [l++]), Roles.LPar), Roles.LPar); AddParameter (result, anonymousMethodExpression.Parameters); result.AddChild (new CSharpTokenNode (Convert (location [l++]), Roles.RPar), Roles.RPar); } } if (anonymousMethodExpression.Block != null) result.AddChild ((BlockStatement)anonymousMethodExpression.Block.Accept (this), Roles.Body); return result; }
public AsLocalFunction (Location loc, string name, AnonymousMethodExpression methodExpr, BlockVariableDeclaration varDecl) { this.loc = loc; this.Name = name; this.MethodExpr = methodExpr; this.VarDecl = varDecl; }
/* * Completes the anonymous method processing, if lambda_expr is null, this * means that we have a Statement instead of an Expression embedded */ AnonymousMethodExpression end_anonymous (ParametersBlock anon_block) { AnonymousMethodExpression retval; if (async_block) anon_block.IsAsync = true; current_anonymous_method.Block = anon_block; retval = current_anonymous_method; async_block = (bool) oob_stack.Pop (); current_variable = (BlockVariableDeclaration) oob_stack.Pop (); current_local_parameters = (ParametersCompiled) oob_stack.Pop (); current_anonymous_method = (AnonymousMethodExpression) oob_stack.Pop (); return retval; }
public virtual object Visit (AnonymousMethodExpression anonymousMethodExpression) { return null; }
void start_anonymous (bool isLambda, ParametersCompiled parameters, bool isAsync, Location loc) { oob_stack.Push (current_anonymous_method); oob_stack.Push (current_local_parameters); oob_stack.Push (current_variable); oob_stack.Push (async_block); current_local_parameters = parameters; if (isLambda) { if (lang_version <= LanguageVersion.ISO_2) FeatureIsNotAvailable (loc, "lambda expressions"); current_anonymous_method = new LambdaExpression (loc); } else { if (lang_version == LanguageVersion.ISO_1) FeatureIsNotAvailable (loc, "anonymous methods"); current_anonymous_method = new AnonymousMethodExpression (loc); } current_anonymous_method.IsAsync = isAsync; async_block = isAsync; // Force the next block to be created as a ToplevelBlock parsing_anonymous_method = true; }