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; } }
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)); }
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), });
public JassLocalVariableDeclarationStatementSyntax(IVariableDeclaratorSyntax declarator) { Declarator = declarator; }