Esempio n. 1
0
        private static void RegisterVariableDeclarator(IVariableDeclaratorSyntax declarator, bool isGlobalVariable, JassMapScriptAdapterContext context)
        {
            if (!context.KnownTypes.ContainsKey(declarator.Type.TypeName.Name))
            {
                context.Diagnostics.Add($"Unknown variable type '{declarator.Type}'.");
            }

            if (declarator is JassVariableDeclaratorSyntax variableDeclarator)
            {
                if (variableDeclarator.Value is not null)
                {
                    RegisterExpression(variableDeclarator.Value.Expression, context);
                }
            }

            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}'.");
                }
            }
        }
 public VariableDeclarationSyntax Transpile(IVariableDeclaratorSyntax declarator)
 {
     return(declarator switch
     {
         JassArrayDeclaratorSyntax arrayDeclarator => Transpile(arrayDeclarator),
         JassVariableDeclaratorSyntax variableDeclarator => Transpile(variableDeclarator),
     });
        public void Render(IVariableDeclaratorSyntax declarator)
        {
            switch (declarator)
            {
            case JassArrayDeclaratorSyntax arrayDeclarator: Render(arrayDeclarator); break;

            case JassVariableDeclaratorSyntax variableDeclarator: Render(variableDeclarator); break;
            }
        }
Esempio n. 4
0
        private void RegisterVariableType(IVariableDeclaratorSyntax declarator, bool isLocalDeclaration)
        {
            switch (declarator)
            {
            case JassArrayDeclaratorSyntax arrayDeclarator: (isLocalDeclaration ? _localTypes : _globalTypes).Add(arrayDeclarator.IdentifierName.Name, arrayDeclarator.Type); break;

            case JassVariableDeclaratorSyntax variableDeclarator: (isLocalDeclaration ? _localTypes : _globalTypes).Add(variableDeclarator.IdentifierName.Name, variableDeclarator.Type); break;
            }
        }
        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));
        }
Esempio n. 6
0
 public JassGlobalDeclarationSyntax(IVariableDeclaratorSyntax declarator)
 {
     Declarator = declarator;
 }
        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),
            });
Esempio n. 8
0
 public JassLocalVariableDeclarationStatementSyntax(IVariableDeclaratorSyntax declarator)
 {
     Declarator = declarator;
 }