From a9f2818b0544ce2935619c7b3824a44300c1a66b Mon Sep 17 00:00:00 2001 From: "Samuel D. Crow" Date: Thu, 30 Jun 2022 12:55:25 -0500 Subject: [PATCH] revamped printSegment to get rid of phantom EOLs --- yabIO.cpp | 88 +++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 72 insertions(+), 16 deletions(-) diff --git a/yabIO.cpp b/yabIO.cpp index c70809a..e582f2b 100644 --- a/yabIO.cpp +++ b/yabIO.cpp @@ -8,6 +8,11 @@ */ #include "yab2cpp.h" +/* prototypes for local functions */ +string formatString(enum SEPARATORS s); +string formatInt(enum SEPARATORS s); +string formatFloat(enum SEPARATORS s); + printSegment::printSegment(expression *e, enum SEPARATORS s) { cargo=e; @@ -22,31 +27,82 @@ void printSegment::generate() switch (op->getSimpleVarType()) { case T_STRINGVAR: - output_cpp << "puts(" << op->boxName() << ".c_str());\n"; + output_cpp << "printf(\"" << formatString(sep) << "\"," + << op->boxName() << ".c_str());\n"; break; case T_INTVAR: - output_cpp << "printf(\"%d\", " << op->boxName() << ");\n"; + output_cpp << "printf(\"" << formatInt(sep) << "\", " + << op->boxName() << ");\n"; break; case T_FLOATVAR: - output_cpp << "printf(\"%f\", " << op->boxName() << ");\n"; + output_cpp << "printf(\"" << formatFloat(sep) << "\", " + << op->boxName() << ");\n"; break; default: error(E_TYPE_MISMATCH); break; } + return; } - switch (sep) - { - case S_LINEFEED: - output_cpp << "puts(\"\\n\");\n"; - return; - case S_SEMICOLON: - return; - case S_COMMA: - output_cpp << "putchar('\\t');\n"; - return; - default: - error(E_BAD_SYNTAX); - break; + switch (sep) { + case S_LINEFEED: + output_cpp << "puts(\"\\n\");\n"; + break; + case S_COMMA: + output_cpp << "putchar(\'\\t\');\n"; + break; + case S_SEMICOLON: + break; + default: + error(E_INTERNAL); + break; + } +} + +string formatString(enum SEPARATORS s) +{ + switch (s) + { + case S_LINEFEED: + return string("%s\\n"); + case S_COMMA: + return string("%s\\t"); + case S_SEMICOLON: + return string("%s"); + default: + error(E_BAD_SYNTAX); + return string(""); + } +} + +string formatInt(enum SEPARATORS s) +{ + switch (s) + { + case S_LINEFEED: + return string("%d\\n"); + case S_COMMA: + return string("%d\\t"); + case S_SEMICOLON: + return string("%d"); + default: + error(E_BAD_SYNTAX); + return string(""); + } +} + +string formatFloat(enum SEPARATORS s) +{ + switch (s) + { + case S_LINEFEED: + return string("%f\\n"); + case S_COMMA: + return string("%f\\t"); + case S_SEMICOLON: + return string("%f"); + default: + error(E_BAD_SYNTAX); + return string(""); } }