public static ExpressionSyntax Transpile(this Syntax.ExpressionSyntax expressionNode) { _ = expressionNode ?? throw new ArgumentNullException(nameof(expressionNode)); return(expressionNode.UnaryExpression?.Transpile() ?? expressionNode.FunctionCall?.Transpile() ?? expressionNode.ArrayReference?.Transpile() ?? expressionNode.FunctionReference?.Transpile() ?? expressionNode.ConstantExpression?.Transpile() ?? expressionNode.ParenthesizedExpressionSyntax?.Transpile() ?? expressionNode.Identifier.TranspileExpression()); }
public static ExpressionSyntax Transpile(this Syntax.ExpressionSyntax expressionNode, out bool @const) { _ = expressionNode ?? throw new ArgumentNullException(nameof(expressionNode)); // Assign here so it doesn't complain about out parameter not being assigned, even though it gets assigned in all code paths. @const = false; return(expressionNode.UnaryExpression?.Transpile(out @const) ?? expressionNode.FunctionCall?.Transpile(out @const) ?? expressionNode.ArrayReference?.Transpile(out @const) ?? expressionNode.FunctionReference?.Transpile(out @const) ?? expressionNode.ConstantExpression?.Transpile(out @const) ?? expressionNode.ParenthesizedExpressionSyntax?.Transpile(out @const) ?? expressionNode.Identifier.TranspileExpression(out @const)); }
public static void Transpile(this Syntax.ExpressionSyntax expressionNode, ref StringBuilder sb, out bool isString) { _ = expressionNode ?? throw new ArgumentNullException(nameof(expressionNode)); isString = false; if (expressionNode.Identifier != null) { isString = TranspileStringConcatenationHandler.IsStringVariable(expressionNode.Identifier.ValueText); } expressionNode.UnaryExpression?.Transpile(ref sb); expressionNode.FunctionCall?.Transpile(ref sb, out isString); expressionNode.ArrayReference?.Transpile(ref sb, out isString); expressionNode.FunctionReference?.Transpile(ref sb); expressionNode.ConstantExpression?.Transpile(ref sb, out isString); expressionNode.ParenthesizedExpressionSyntax?.Transpile(ref sb, out isString); expressionNode.Identifier?.TranspileExpression(ref sb); }
private static ImportChain GetImports(RuntimeInstance runtime, string methodName, Syntax.ExpressionSyntax syntax) { var evalContext = CreateMethodContext( runtime, methodName: methodName); var compContext = evalContext.CreateCompilationContext(syntax); return(compContext.NamespaceBinder.ImportChain); }