private bool TryAdaptVariableDeclarator(JassMapScriptAdapterContext context, bool isGlobalVariable, IVariableDeclaratorSyntax declarator, [NotNullWhen(true)] out IVariableDeclaratorSyntax?adaptedDeclarator)
        {
            if (!context.KnownTypes.ContainsKey(declarator.Type.TypeName.Name))
            {
                context.Diagnostics.Add($"Unknown variable type '{declarator.Type}'.");
            }

            if (isGlobalVariable)
            {
                if (!context.KnownGlobalVariables.TryAdd(declarator.IdentifierName.Name, declarator.Type.TypeName.Name))
                {
                    context.Diagnostics.Add($"Duplicate global variable '{declarator.IdentifierName}'.");
                }
            }
            else
            {
                if (!context.KnownLocalVariables.TryAdd(declarator.IdentifierName.Name, declarator.Type.TypeName.Name))
                {
                    context.Diagnostics.Add($"Duplicate local variable '{declarator.IdentifierName}'.");
                }
            }

            return(declarator switch
            {
                JassArrayDeclaratorSyntax arrayDeclarator => TryAdaptArrayDeclarator(context, isGlobalVariable, arrayDeclarator, out adaptedDeclarator),
                JassVariableDeclaratorSyntax variableDeclarator => TryAdaptVariableDeclarator(context, isGlobalVariable, variableDeclarator, out adaptedDeclarator),

                _ => TryAdaptDummy(context, declarator, out adaptedDeclarator),
            });
 public VariableDeclarationSyntax Transpile(IVariableDeclaratorSyntax declarator)
 {
     return(declarator switch
     {
         JassArrayDeclaratorSyntax arrayDeclarator => Transpile(arrayDeclarator),
         JassVariableDeclaratorSyntax variableDeclarator => Transpile(variableDeclarator),
     });
Example #3
0
        private VariableDeclarationSyntax Transpile(JassArrayDeclaratorSyntax arrayDeclarator)
        {
            var type = Transpile(arrayDeclarator.Type);

            return(SyntaxFactory.VariableDeclaration(
                       SyntaxFactory.ArrayType(type),
                       SyntaxFactory.SingletonSeparatedList(SyntaxFactory.VariableDeclarator(
                                                                Transpile(arrayDeclarator.IdentifierName),
                                                                null,
                                                                SyntaxFactory.EqualsValueClause(SyntaxFactory.ArrayCreationExpression(SyntaxFactory.ArrayType(type)))))));
        }
Example #4
0
        public LuaVariableDeclaratorSyntax Transpile(JassArrayDeclaratorSyntax arrayDeclarator)
        {
            LuaExpressionSyntax expression = arrayDeclarator.Type switch
            {
                JassTypeSyntax type when type.Equals(JassTypeSyntax.Integer) => new LuaInvocationExpressionSyntax("__jarray", "0"),
                JassTypeSyntax type when type.Equals(JassTypeSyntax.Real) => new LuaInvocationExpressionSyntax("__jarray", "0.0"),
                JassTypeSyntax type when type.Equals(JassTypeSyntax.String) => new LuaInvocationExpressionSyntax("__jarray", LuaStringLiteralExpressionSyntax.Empty),
                JassTypeSyntax type when type.Equals(JassTypeSyntax.Boolean) => new LuaInvocationExpressionSyntax("__jarray", LuaIdentifierLiteralExpressionSyntax.False),
                _ => new LuaTableExpression(),
            };

            return(new LuaVariableDeclaratorSyntax(Transpile(arrayDeclarator.IdentifierName), expression));
        }
        public LuaLocalDeclarationStatementSyntax Transpile(IVariableDeclaratorSyntax declarator, bool isLocalDeclaration)
        {
            RegisterVariableType(declarator, isLocalDeclaration);

            var luaDeclarator = declarator switch
            {
                JassArrayDeclaratorSyntax arrayDeclarator => Transpile(arrayDeclarator),
                JassVariableDeclaratorSyntax variableDeclarator => Transpile(variableDeclarator),
            };

            var declaration = new LuaVariableListDeclarationSyntax();

            luaDeclarator.IsLocalDeclaration = isLocalDeclaration;
            declaration.Variables.Add(luaDeclarator);

            return(new LuaLocalDeclarationStatementSyntax(declaration));
        }
 public void Render(JassArrayDeclaratorSyntax arrayDeclarator)
 {
     Render(arrayDeclarator.Type);
     Write($" {JassKeyword.Array} ");
     Render(arrayDeclarator.IdentifierName);
 }
 private bool TryAdaptArrayDeclarator(JassMapScriptAdapterContext context, bool isGlobalVariable, JassArrayDeclaratorSyntax arrayDeclarator, [NotNullWhen(true)] out IVariableDeclaratorSyntax?adaptedArrayDeclarator)
 {
     adaptedArrayDeclarator = null;
     return(false);
 }