Exemple #1
0
 public static JassGlobalDeclarationSyntax GlobalDeclaration(JassTypeSyntax type, string name)
 {
     return(new JassGlobalDeclarationSyntax(
                new JassVariableDeclaratorSyntax(
                    type,
                    ParseIdentifierName(name),
                    null)));
 }
Exemple #2
0
 public static JassGlobalDeclarationSyntax GlobalDeclaration(JassTypeSyntax type, string name, IExpressionSyntax value)
 {
     return(new JassGlobalDeclarationSyntax(
                new JassVariableDeclaratorSyntax(
                    type,
                    ParseIdentifierName(name),
                    new JassEqualsValueClauseSyntax(value))));
 }
Exemple #3
0
 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),
     });
Exemple #4
0
        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));
        }
Exemple #5
0
        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,
            });
Exemple #6
0
        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);
        }
Exemple #8
0
 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);
        }
Exemple #11
0
 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);
        }
Exemple #13
0
        public LuaExpressionSyntax Transpile(JassArrayReferenceExpressionSyntax arrayReferenceExpression, out JassTypeSyntax type)
        {
            type = GetVariableType(arrayReferenceExpression.IdentifierName);

            return(new LuaTableIndexAccessExpressionSyntax(
                       Transpile(arrayReferenceExpression.IdentifierName),
                       Transpile(arrayReferenceExpression.Indexer, out _)));
        }
Exemple #14
0
        public LuaExpressionSyntax Transpile(JassCharacterLiteralExpressionSyntax characterLiteralExpression, out JassTypeSyntax type)
        {
            type = JassTypeSyntax.Integer;

            return(new LuaCharacterLiteralExpression(characterLiteralExpression.Value));
        }
Exemple #15
0
        public LuaExpressionSyntax Transpile(JassFunctionReferenceExpressionSyntax functionReferenceExpression, out JassTypeSyntax type)
        {
            type = JassTypeSyntax.Code;

            return(Transpile(functionReferenceExpression.IdentifierName));
        }
Exemple #16
0
 public LuaExpressionSyntax Transpile(JassParenthesizedExpressionSyntax parenthesizedExpression, out JassTypeSyntax type)
 {
     return(new LuaParenthesizedExpressionSyntax(Transpile(parenthesizedExpression.Expression, out type)));
 }
Exemple #17
0
        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);
        }
Exemple #21
0
 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;
 }
Exemple #24
0
        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));
        }
Exemple #25
0
 public void Render(JassTypeSyntax type)
 {
     Render(type.TypeName);
 }
 public static JassLocalVariableDeclarationStatementSyntax LocalArrayDeclarationStatement(JassTypeSyntax type, string name)
 {
     return(new JassLocalVariableDeclarationStatementSyntax(
                new JassArrayDeclaratorSyntax(
                    type, ParseIdentifierName(name))));
 }