private Expression ProcessAnonymousMethodNode(AnonymousMethodNode node) { TypeSymbol voidType = _symbolSet.ResolveIntrinsicType(IntrinsicType.Void); Debug.Assert(voidType != null); bool createStaticDelegate = (_memberContext.Visibility & MemberVisibility.Static) != 0; AnonymousMethodSymbol methodSymbol = new AnonymousMethodSymbol(_memberContext, _symbolTable, voidType, createStaticDelegate); methodSymbol.SetParseContext(node); if ((node.Parameters != null) && (node.Parameters.Count != 0)) { foreach (ParameterNode parameterNode in node.Parameters) { TypeSymbol parameterType = _symbolSet.ResolveType(parameterNode.Type, _symbolTable, _symbolContext); Debug.Assert(parameterType != null); ParameterSymbol paramSymbol = new ParameterSymbol(parameterNode.Name, methodSymbol, parameterType, ParameterMode.In); if (paramSymbol != null) { paramSymbol.SetParseContext(parameterNode); methodSymbol.AddParameter(paramSymbol); } } } ImplementationBuilder implBuilder = new ImplementationBuilder(_options, _errorHandler); SymbolImplementation implementation = implBuilder.BuildMethod(methodSymbol); methodSymbol.AddImplementation(implementation); if ((createStaticDelegate == false) && (implementation.RequiresThisContext == false)) { methodSymbol.SetVisibility(methodSymbol.Visibility | MemberVisibility.Static); createStaticDelegate = true; } Expression objectExpression; if (createStaticDelegate) { TypeSymbol objectType = _symbolSet.ResolveIntrinsicType(IntrinsicType.Object); Debug.Assert(objectType != null); objectExpression = new LiteralExpression(objectType, null); } else { objectExpression = new ThisExpression(_classContext, /* explicitReference */ true); } return new DelegateExpression(objectExpression, methodSymbol); }
private static void GenerateThisExpression(ScriptGenerator generator, MemberSymbol symbol, ThisExpression expression) { ScriptTextWriter writer = generator.Writer; writer.Write("this"); }
private static void GenerateThisExpression(ScriptGenerator generator, MemberSymbol symbol, ThisExpression expression) { ScriptTextWriter writer = generator.Writer; writer.Write(generator.CurrentImplementation.ThisIdentifier); }