private void BuildCode(PropertySymbol propertySymbol) { if (propertySymbol.IsAbstract) { return; } ImplementationBuilder implBuilder = new ImplementationBuilder(options, errorHandler); SymbolImplementation getter = implBuilder.BuildPropertyGetter(propertySymbol); if (getter != null) { propertySymbol.AddImplementation(getter, /* getter */ true); implementations.Add(getter); } SymbolImplementation setter = implBuilder.BuildPropertySetter(propertySymbol); if (setter != null) { propertySymbol.AddImplementation(setter, /* getter */ false); implementations.Add(setter); } if (propertySymbol.AnonymousMethods != null) { foreach (AnonymousMethodSymbol anonymousMethod in propertySymbol.AnonymousMethods) { Debug.Assert(anonymousMethod.Implementation != null); implementations.Add(anonymousMethod.Implementation); } } }
private void BuildCode(FieldSymbol fieldSymbol) { ImplementationBuilder implBuilder = new ImplementationBuilder(_options, _errorHandler); SymbolImplementation implementation = implBuilder.BuildField(fieldSymbol); if (implementation != null) { fieldSymbol.AddImplementation(implementation); _implementations.Add(fieldSymbol.Implementation); } }
private static void GenerateImplementationScript( ScriptGenerator generator, MemberSymbol symbol, SymbolImplementation implementation) { if (implementation == null) { throw new ArgumentNullException(nameof(implementation), $"Member: {symbol?.Name} has no valid implementation"); } generator.StartImplementation(implementation); try { bool generateThisCacheStatement = false; if ((symbol.Visibility & MemberVisibility.Static) == 0) { if (symbol is CodeMemberSymbol codeMemberSymbol && codeMemberSymbol.AnonymousMethods != null) { foreach (AnonymousMethodSymbol anonymousMethod in codeMemberSymbol.AnonymousMethods) { if ((anonymousMethod.Visibility & MemberVisibility.Static) == 0) { generateThisCacheStatement = true; break; } } } } if (generateThisCacheStatement) { ScriptTextWriter writer = generator.Writer; writer.WriteLine("var $this = this;"); writer.WriteLine(); } foreach (Statement statement in implementation.Statements) { StatementGenerator.GenerateStatement(generator, symbol, statement); } } catch (Exception e) { throw; } finally { generator.EndImplementation(); } }
public static void GenerateClassConstructorScript(ScriptGenerator generator, ClassSymbol classSymbol) { // NOTE: This is emitted last in the script file, and separate from the initial class definition // because it needs to be emitted after the class registration. foreach (MemberSymbol memberSymbol in classSymbol.Members) { if (memberSymbol.Type == SymbolType.Field && (memberSymbol.Visibility & MemberVisibility.Static) != 0) { FieldSymbol fieldSymbol = (FieldSymbol)memberSymbol; if (fieldSymbol.IsConstant && (memberSymbol.Visibility & (MemberVisibility.Public | MemberVisibility.Protected)) == 0) { // PrivateInstance/Internal constant fields are omitted since they have been inlined continue; } if (fieldSymbol.HasInitializer) { MemberGenerator.GenerateScript(generator, memberSymbol); } } } if (classSymbol.StaticConstructor != null) { ScriptTextWriter writer = generator.Writer; SymbolImplementation implementation = classSymbol.StaticConstructor.Implementation; bool requiresFunctionScope = implementation.DeclaresVariables; if (requiresFunctionScope) { writer.WriteLine("(function() {"); writer.Indent++; } CodeGenerator.GenerateScript(generator, classSymbol.StaticConstructor); if (requiresFunctionScope) { writer.Indent--; writer.Write("})();"); writer.WriteLine(); } } }
public bool TryBuildPropertySetter(PropertySymbol propertySymbol, out SymbolImplementation symbolImplementation) { AccessorNode setterNode = propertySymbol.GetPropertyNode().SetAccessor; if (setterNode == null || setterNode.IsAutoProperty) { symbolImplementation = null; return(false); } BlockStatementNode accessorBody = setterNode.Implementation; symbolImplementation = BuildImplementation((ISymbolTable)propertySymbol.Parent, propertySymbol, accessorBody, addAllParameters: true); return(symbolImplementation != null); }
public void StartImplementation(SymbolImplementation implementation) { Debug.Assert(implementation != null); _implementationStack.Push(implementation); }
private static void GenerateImplementationScript(ScriptGenerator generator, MemberSymbol symbol, SymbolImplementation implementation) { foreach (Statement statement in implementation.Statements) { StatementGenerator.GenerateStatement(generator, symbol, statement); } }
public void StartImplementation(SymbolImplementation implementation) { implementationStack.Push(implementation); }
private static void GenerateImplementationScript(ScriptGenerator generator, MemberSymbol symbol, SymbolImplementation implementation) { generator.StartImplementation(implementation); try { bool generateThisCacheStatement = false; if ((symbol.Visibility & MemberVisibility.Static) == 0) { CodeMemberSymbol codeMemberSymbol = symbol as CodeMemberSymbol; if ((codeMemberSymbol != null) && (codeMemberSymbol.AnonymousMethods != null)) { foreach (AnonymousMethodSymbol anonymousMethod in codeMemberSymbol.AnonymousMethods) { if ((anonymousMethod.Visibility & MemberVisibility.Static) == 0) { generateThisCacheStatement = true; break; } } } } if (generateThisCacheStatement) { ScriptTextWriter writer = generator.Writer; writer.WriteLine("var $this = this;"); writer.WriteLine(); } foreach (Statement statement in implementation.Statements) { StatementGenerator.GenerateStatement(generator, symbol, statement); } } finally { generator.EndImplementation(); } }