Пример #1
0
        private bool TryAdaptExpression(JassMapScriptAdapterContext context, IExpressionSyntax?expression, [NotNullWhen(true)] out IExpressionSyntax?adaptedExpression)
        {
            return(expression switch
            {
                JassFunctionReferenceExpressionSyntax functionReferenceExpression => TryAdaptFunctionReferenceExpression(context, functionReferenceExpression, out adaptedExpression),
                JassInvocationExpressionSyntax invocationExpression => TryAdaptInvocationExpression(context, invocationExpression, out adaptedExpression),
                JassArrayReferenceExpressionSyntax arrayReferenceExpression => TryAdaptArrayReferenceExpression(context, arrayReferenceExpression, out adaptedExpression),
                JassVariableReferenceExpressionSyntax variableReferenceExpression => TryAdaptVariableReferenceExpression(context, variableReferenceExpression, out adaptedExpression),
                JassParenthesizedExpressionSyntax parenthesizedExpression => TryAdaptParenthesizedExpression(context, parenthesizedExpression, out adaptedExpression),
                JassUnaryExpressionSyntax unaryExpression => TryAdaptUnaryExpression(context, unaryExpression, out adaptedExpression),
                JassBinaryExpressionSyntax binaryExpression => TryAdaptBinaryExpression(context, binaryExpression, out adaptedExpression),

                _ => TryAdaptDummy(context, expression, out adaptedExpression),
            });
Пример #2
0
 public ExpressionSyntax Transpile(IExpressionSyntax expression)
 {
     return(expression switch
     {
         JassCharacterLiteralExpressionSyntax characterLiteralExpression => Transpile(characterLiteralExpression),
         JassFourCCLiteralExpressionSyntax fourCCLiteralExpression => Transpile(fourCCLiteralExpression),
         JassHexadecimalLiteralExpressionSyntax hexadecimalLiteralExpression => Transpile(hexadecimalLiteralExpression),
         JassRealLiteralExpressionSyntax realLiteralExpression => Transpile(realLiteralExpression),
         JassOctalLiteralExpressionSyntax octalLiteralExpression => Transpile(octalLiteralExpression),
         JassDecimalLiteralExpressionSyntax decimalLiteralExpression => Transpile(decimalLiteralExpression),
         JassBooleanLiteralExpressionSyntax booleanLiteralExpression => Transpile(booleanLiteralExpression),
         JassStringLiteralExpressionSyntax stringLiteralExpression => Transpile(stringLiteralExpression),
         JassNullLiteralExpressionSyntax nullLiteralExpression => Transpile(nullLiteralExpression),
         JassFunctionReferenceExpressionSyntax functionReferenceExpression => Transpile(functionReferenceExpression),
         JassInvocationExpressionSyntax invocationExpression => Transpile(invocationExpression),
         JassArrayReferenceExpressionSyntax arrayReferenceExpression => Transpile(arrayReferenceExpression),
         JassVariableReferenceExpressionSyntax variableReferenceExpression => Transpile(variableReferenceExpression),
         JassParenthesizedExpressionSyntax parenthesizedExpression => Transpile(parenthesizedExpression),
         JassUnaryExpressionSyntax unaryExpression => Transpile(unaryExpression),
         JassBinaryExpressionSyntax binaryExpression => Transpile(binaryExpression),
     });
 public ExpressionSyntax Transpile(JassFunctionReferenceExpressionSyntax functionReferenceExpression)
 {
     return(SyntaxFactory.IdentifierName(Transpile(functionReferenceExpression.IdentifierName)));
 }
Пример #4
0
        public LuaExpressionSyntax Transpile(JassFunctionReferenceExpressionSyntax functionReferenceExpression, out JassTypeSyntax type)
        {
            type = JassTypeSyntax.Code;

            return(Transpile(functionReferenceExpression.IdentifierName));
        }
 public void Render(JassFunctionReferenceExpressionSyntax functionReferenceExpression)
 {
     Write($"{JassKeyword.Function} ");
     Render(functionReferenceExpression.IdentifierName);
 }
        private bool TryAdaptFunctionReferenceExpression(JassMapScriptAdapterContext context, JassFunctionReferenceExpressionSyntax functionReferenceExpression, [NotNullWhen(true)] out IExpressionSyntax?adaptedFunctionReferenceExpression)
        {
            if (context.KnownFunctions.TryGetValue(functionReferenceExpression.IdentifierName.Name, out var knownFunctionParameters))
            {
                if (knownFunctionParameters.Length != 0)
                {
                    context.Diagnostics.Add($"Invalid function reference: '{functionReferenceExpression.IdentifierName}' should not have any parameters.");
                }
            }
            else
            {
                context.Diagnostics.Add($"Unknown function '{functionReferenceExpression.IdentifierName}'.");
            }

            adaptedFunctionReferenceExpression = null;
            return(false);
        }