Пример #1
0
        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());
        }
Пример #2
0
        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));
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }