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(']'); }
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); } }
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(); }
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(')'); }
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); }
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(); } }