public static JassGlobalDeclarationSyntax GlobalDeclaration(JassTypeSyntax type, string name) { return(new JassGlobalDeclarationSyntax( new JassVariableDeclaratorSyntax( type, ParseIdentifierName(name), null))); }
public static JassGlobalDeclarationSyntax GlobalDeclaration(JassTypeSyntax type, string name, IExpressionSyntax value) { return(new JassGlobalDeclarationSyntax( new JassVariableDeclaratorSyntax( type, ParseIdentifierName(name), new JassEqualsValueClauseSyntax(value)))); }
public LuaExpressionSyntax Transpile(IExpressionSyntax expression, out JassTypeSyntax type) { return(expression switch { JassCharacterLiteralExpressionSyntax characterLiteralExpression => Transpile(characterLiteralExpression, out type), JassFourCCLiteralExpressionSyntax fourCCLiteralExpression => Transpile(fourCCLiteralExpression, out type), JassHexadecimalLiteralExpressionSyntax hexadecimalLiteralExpression => Transpile(hexadecimalLiteralExpression, out type), JassRealLiteralExpressionSyntax realLiteralExpression => Transpile(realLiteralExpression, out type), JassOctalLiteralExpressionSyntax octalLiteralExpression => Transpile(octalLiteralExpression, out type), JassDecimalLiteralExpressionSyntax decimalLiteralExpression => Transpile(decimalLiteralExpression, out type), JassBooleanLiteralExpressionSyntax booleanLiteralExpression => Transpile(booleanLiteralExpression, out type), JassStringLiteralExpressionSyntax stringLiteralExpression => Transpile(stringLiteralExpression, out type), JassNullLiteralExpressionSyntax nullLiteralExpression => Transpile(nullLiteralExpression, out type), JassFunctionReferenceExpressionSyntax functionReferenceExpression => Transpile(functionReferenceExpression, out type), JassInvocationExpressionSyntax invocationExpression => Transpile(invocationExpression, out type), JassArrayReferenceExpressionSyntax arrayReferenceExpression => Transpile(arrayReferenceExpression, out type), JassVariableReferenceExpressionSyntax variableReferenceExpression => Transpile(variableReferenceExpression, out type), JassParenthesizedExpressionSyntax parenthesizedExpression => Transpile(parenthesizedExpression, out type), JassUnaryExpressionSyntax unaryExpression => Transpile(unaryExpression, out type), JassBinaryExpressionSyntax binaryExpression => Transpile(binaryExpression, out type), });
public TypeSyntax Transpile(JassTypeSyntax type) { if (type.Equals(JassTypeSyntax.Boolean)) { return(SyntaxFactory.PredefinedType(SyntaxFactory.Token(SyntaxKind.BoolKeyword))); } if (type.Equals(JassTypeSyntax.Code)) { return(SyntaxFactory.ParseTypeName(typeof(Action).FullName !)); } if (type.Equals(JassTypeSyntax.Handle)) { return(SyntaxFactory.PredefinedType(SyntaxFactory.Token(SyntaxKind.ObjectKeyword))); } if (type.Equals(JassTypeSyntax.Integer)) { return(SyntaxFactory.PredefinedType(SyntaxFactory.Token(SyntaxKind.IntKeyword))); } if (type.Equals(JassTypeSyntax.Nothing)) { return(SyntaxFactory.PredefinedType(SyntaxFactory.Token(SyntaxKind.VoidKeyword))); } if (type.Equals(JassTypeSyntax.Real)) { return(SyntaxFactory.PredefinedType(SyntaxFactory.Token(SyntaxKind.FloatKeyword))); } if (type.Equals(JassTypeSyntax.String)) { return(SyntaxFactory.PredefinedType(SyntaxFactory.Token(SyntaxKind.StringKeyword))); } return(SyntaxFactory.ParseTypeName(Transpile(type.TypeName).Text)); }
public string Transpile(BinaryOperatorType binaryOperator, JassTypeSyntax left, JassTypeSyntax right, out JassTypeSyntax type) { switch (binaryOperator) { case BinaryOperatorType.GreaterThan: case BinaryOperatorType.LessThan: case BinaryOperatorType.Equals: case BinaryOperatorType.NotEquals: case BinaryOperatorType.GreaterOrEqual: case BinaryOperatorType.LessOrEqual: case BinaryOperatorType.And: case BinaryOperatorType.Or: type = JassTypeSyntax.Boolean; break; default: type = left.Equals(JassTypeSyntax.String) || right.Equals(JassTypeSyntax.String) ? JassTypeSyntax.String : left.Equals(JassTypeSyntax.Real) || right.Equals(JassTypeSyntax.Real) ? JassTypeSyntax.Real : left; break; } return(binaryOperator switch { BinaryOperatorType.Add => type.Equals(JassTypeSyntax.String) ? LuaSyntaxNode.Tokens.Concatenation : LuaSyntaxNode.Tokens.Plus, BinaryOperatorType.Subtract => LuaSyntaxNode.Tokens.Sub, BinaryOperatorType.Multiplication => LuaSyntaxNode.Tokens.Multiply, BinaryOperatorType.Division => type.Equals(JassTypeSyntax.Integer) ? LuaSyntaxNode.Tokens.IntegerDiv : LuaSyntaxNode.Tokens.Div, BinaryOperatorType.GreaterThan => ">", BinaryOperatorType.LessThan => "<", BinaryOperatorType.Equals => LuaSyntaxNode.Tokens.EqualsEquals, BinaryOperatorType.NotEquals => LuaSyntaxNode.Tokens.NotEquals, BinaryOperatorType.GreaterOrEqual => ">=", BinaryOperatorType.LessOrEqual => "<=", BinaryOperatorType.And => LuaSyntaxNode.Keyword.And, BinaryOperatorType.Or => LuaSyntaxNode.Keyword.Or, });
public LuaExpressionSyntax Transpile(JassRealLiteralExpressionSyntax realLiteralExpression, out JassTypeSyntax type) { type = JassTypeSyntax.Real; return(realLiteralExpression.ToString()); }
public LuaExpressionSyntax Transpile(JassDecimalLiteralExpressionSyntax decimalLiteralExpression, out JassTypeSyntax type) { type = JassTypeSyntax.Integer; return(decimalLiteralExpression.Value); }
public static JassGlobalDeclarationSyntax GlobalArrayDeclaration(JassTypeSyntax type, string name) { return(new JassGlobalDeclarationSyntax( new JassArrayDeclaratorSyntax( type, ParseIdentifierName(name)))); }
public LuaExpressionSyntax Transpile(JassVariableReferenceExpressionSyntax variableReferenceExpression, out JassTypeSyntax type) { type = GetVariableType(variableReferenceExpression.IdentifierName); return(Transpile(variableReferenceExpression.IdentifierName)); }
public LuaExpressionSyntax Transpile(JassBooleanLiteralExpressionSyntax booleanLiteralExpression, out JassTypeSyntax type) { type = JassTypeSyntax.Boolean; return(booleanLiteralExpression.Value ? LuaIdentifierLiteralExpressionSyntax.True : LuaIdentifierLiteralExpressionSyntax.False); }
public JassTypeDeclarationSyntax(JassIdentifierNameSyntax identifierName, JassTypeSyntax baseType) { IdentifierName = identifierName; BaseType = baseType; }
public LuaExpressionSyntax Transpile(JassInvocationExpressionSyntax invocationExpression, out JassTypeSyntax type) { type = GetFunctionReturnType(invocationExpression.IdentifierName); var luaInvocationExpression = new LuaInvocationExpressionSyntax(Transpile(invocationExpression.IdentifierName)); luaInvocationExpression.AddArguments(Transpile(invocationExpression.Arguments)); return(luaInvocationExpression); }
public LuaExpressionSyntax Transpile(JassArrayReferenceExpressionSyntax arrayReferenceExpression, out JassTypeSyntax type) { type = GetVariableType(arrayReferenceExpression.IdentifierName); return(new LuaTableIndexAccessExpressionSyntax( Transpile(arrayReferenceExpression.IdentifierName), Transpile(arrayReferenceExpression.Indexer, out _))); }
public LuaExpressionSyntax Transpile(JassCharacterLiteralExpressionSyntax characterLiteralExpression, out JassTypeSyntax type) { type = JassTypeSyntax.Integer; return(new LuaCharacterLiteralExpression(characterLiteralExpression.Value)); }
public LuaExpressionSyntax Transpile(JassFunctionReferenceExpressionSyntax functionReferenceExpression, out JassTypeSyntax type) { type = JassTypeSyntax.Code; return(Transpile(functionReferenceExpression.IdentifierName)); }
public LuaExpressionSyntax Transpile(JassParenthesizedExpressionSyntax parenthesizedExpression, out JassTypeSyntax type) { return(new LuaParenthesizedExpressionSyntax(Transpile(parenthesizedExpression.Expression, out type))); }
public LuaExpressionSyntax Transpile(JassNullLiteralExpressionSyntax nullLiteralExpression, out JassTypeSyntax type) { type = JassTypeSyntax.Handle; return(LuaIdentifierLiteralExpressionSyntax.Nil); }
public LuaExpressionSyntax Transpile(JassUnaryExpressionSyntax unaryExpression, out JassTypeSyntax type) { return(new LuaPrefixUnaryExpressionSyntax( Transpile(unaryExpression.Expression, out type), Transpile(unaryExpression.Operator))); }
public LuaExpressionSyntax Transpile(JassHexadecimalLiteralExpressionSyntax hexadecimalLiteralExpression, out JassTypeSyntax type) { type = JassTypeSyntax.Integer; return(hexadecimalLiteralExpression.ToString()); }
public LuaExpressionSyntax Transpile(JassFourCCLiteralExpressionSyntax fourCCLiteralExpression, out JassTypeSyntax type) { type = JassTypeSyntax.Integer; return(fourCCLiteralExpression.Value); }
public JassArrayDeclaratorSyntax(JassTypeSyntax type, JassIdentifierNameSyntax identifierName) { Type = type; IdentifierName = identifierName; }
public LuaExpressionSyntax Transpile(JassStringLiteralExpressionSyntax stringLiteralExpression, out JassTypeSyntax type) { type = JassTypeSyntax.String; return($"\"{stringLiteralExpression.Value.Replace($"{JassSymbol.CarriageReturn}", @"\r").Replace($"{JassSymbol.LineFeed}", @"\n")}\""); }
public JassVariableDeclaratorSyntax(JassTypeSyntax type, JassIdentifierNameSyntax identifierName, JassEqualsValueClauseSyntax?value) { Type = type; IdentifierName = identifierName; Value = value; }
public LuaExpressionSyntax Transpile(JassBinaryExpressionSyntax binaryExpression, out JassTypeSyntax type) { var left = Transpile(binaryExpression.Left, out var leftType); var right = Transpile(binaryExpression.Right, out var rightType); return(new LuaBinaryExpressionSyntax(left, Transpile(binaryExpression.Operator, leftType, rightType, out type), right)); }
public void Render(JassTypeSyntax type) { Render(type.TypeName); }
public static JassLocalVariableDeclarationStatementSyntax LocalArrayDeclarationStatement(JassTypeSyntax type, string name) { return(new JassLocalVariableDeclarationStatementSyntax( new JassArrayDeclaratorSyntax( type, ParseIdentifierName(name)))); }