public static void Transpile(this Syntax.ArrayReferenceSyntax arrayReferenceNode, ref StringBuilder sb, out bool isString)
        {
            _ = arrayReferenceNode ?? throw new ArgumentNullException(nameof(arrayReferenceNode));

            isString = TranspileStringConcatenationHandler.IsStringVariable(arrayReferenceNode.IdentifierNameNode.ValueText);

            arrayReferenceNode.IdentifierNameNode.TranspileExpression(ref sb);
            sb.Append('[');
            arrayReferenceNode.IndexExpressionNode.Transpile(ref sb);
            sb.Append(']');
        }
Пример #2
0
        public static void Transpile(this Syntax.TypeReferenceSyntax typeReferenceNode, ref StringBuilder sb)
        {
            _ = typeReferenceNode ?? throw new ArgumentNullException(nameof(typeReferenceNode));

            typeReferenceNode.TypeReferenceNameToken.TranspileIdentifier(ref sb);

            if (typeReferenceNode.TypeNameNode.TypeNameToken.TokenType == SyntaxTokenType.StringKeyword)
            {
                TranspileStringConcatenationHandler.RegisterLocalStringVariable(typeReferenceNode.TypeReferenceNameToken.ValueText);
            }
        }
Пример #3
0
        public static void Transpile(this Syntax.FunctionSyntax functionNode, ref StringBuilder sb)
        {
            _ = functionNode ?? throw new ArgumentNullException(nameof(functionNode));

            functionNode.FunctionDeclarationNode.Transpile(ref sb);
            functionNode.DeclarationLineDelimiterNode.Transpile(ref sb);
            functionNode.LocalVariableListNode.Transpile(ref sb);
            functionNode.StatementListNode.Transpile(ref sb);
            sb.Append("end");
            functionNode.LastLineDelimiterNode.Transpile(ref sb);

            TranspileStringConcatenationHandler.ResetLocalVariables();
        }
Пример #4
0
        public static void Transpile(this Syntax.FunctionCallSyntax functionCallNode, ref StringBuilder sb, out bool isString)
        {
            _ = functionCallNode ?? throw new ArgumentNullException(nameof(functionCallNode));

            isString = TranspileStringConcatenationHandler.IsFunctionStringReturnType(functionCallNode.IdentifierNameNode.ValueText);

            functionCallNode.IdentifierNameNode.TranspileExpression(ref sb);
            sb.Append('(');
            if (functionCallNode.EmptyArgumentListNode is null)
            {
                functionCallNode.ArgumentListNode.Transpile(ref sb);
            }

            sb.Append(')');
        }
Пример #5
0
        public static void Transpile(this Syntax.ExpressionSyntax expressionNode, ref StringBuilder sb, out bool isString)
        {
            _ = expressionNode ?? throw new ArgumentNullException(nameof(expressionNode));

            isString = false;
            if (expressionNode.Identifier != null)
            {
                isString = TranspileStringConcatenationHandler.IsStringVariable(expressionNode.Identifier.ValueText);
            }

            expressionNode.UnaryExpression?.Transpile(ref sb);
            expressionNode.FunctionCall?.Transpile(ref sb, out isString);
            expressionNode.ArrayReference?.Transpile(ref sb, out isString);
            expressionNode.FunctionReference?.Transpile(ref sb);
            expressionNode.ConstantExpression?.Transpile(ref sb, out isString);
            expressionNode.ParenthesizedExpressionSyntax?.Transpile(ref sb, out isString);
            expressionNode.Identifier?.TranspileExpression(ref sb);
        }
Пример #6
0
        public static void Transpile(this Syntax.FileSyntax fileNode, ref StringBuilder sb, bool resetStringConcatenationHandler = true)
        {
            _ = fileNode ?? throw new ArgumentNullException(nameof(fileNode));

            foreach (var declaration in fileNode.DeclarationList)
            {
                declaration.Transpile(ref sb);
            }

            foreach (var function in fileNode.FunctionList)
            {
                function.Transpile(ref sb);
            }

            if (resetStringConcatenationHandler)
            {
                TranspileStringConcatenationHandler.Reset();
            }
        }