From 6442c86084e91c79ff8f84cc9bc58b648fc0f77e Mon Sep 17 00:00:00 2001 From: Ivan Kravets Date: Fri, 2 Sep 2016 14:35:07 +0300 Subject: [PATCH] Fix INO to CPP converter when #define is used --- platformio/builder/tools/piomisc.py | 13 ++++++++++--- tests/ino2cpp/basic/basic.ino | 5 ++++- tests/test_ino2cpp.py | 2 +- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/platformio/builder/tools/piomisc.py b/platformio/builder/tools/piomisc.py index 00d9e386..c3d5dd99 100644 --- a/platformio/builder/tools/piomisc.py +++ b/platformio/builder/tools/piomisc.py @@ -53,6 +53,7 @@ class InoToCPPConverter(object): return self.process(contents) def merge(self, nodes): + assert nodes lines = [] for node in nodes: contents = node.get_text_contents() @@ -65,6 +66,9 @@ class InoToCPPConverter(object): else: lines.extend(_lines) + if not self._main_ino: + self._main_ino = nodes[0].get_path() + return "\n".join(["#include "] + lines) if lines else None def process(self, contents): @@ -104,17 +108,20 @@ class InoToCPPConverter(object): if line.endswith("\\"): if line.startswith('"'): - newlines.append(line[:-1]) stropen = True + newlines.append(line[:-1]) + continue elif stropen: newlines[len(newlines) - 1] += line[:-1] + continue elif stropen and line.endswith('";'): newlines[len(newlines) - 1] += line stropen = False newlines.append('#line %d "%s"' % (linenum, self._main_ino.replace("\\", "/"))) - else: - newlines.append(line) + continue + + newlines.append(line) return "\n".join(newlines) diff --git a/tests/ino2cpp/basic/basic.ino b/tests/ino2cpp/basic/basic.ino index 80b3be86..6f764fed 100644 --- a/tests/ino2cpp/basic/basic.ino +++ b/tests/ino2cpp/basic/basic.ino @@ -1,3 +1,6 @@ +#define SQR(a) \ +( a * a ) + typedef struct Item item; struct Item { byte foo[50]; @@ -10,7 +13,7 @@ class Foo { public: Foo(void (*function)()) { - #warning "Line number is 13" + #warning "Line number is 16" } bool childFunc() { diff --git a/tests/test_ino2cpp.py b/tests/test_ino2cpp.py index d4008628..c8f411c0 100644 --- a/tests/test_ino2cpp.py +++ b/tests/test_ino2cpp.py @@ -40,7 +40,7 @@ def test_warning_line(clirunner, validate_cliresult): result = clirunner.invoke(cmd_ci, [join(INOTEST_DIR, "basic"), "-b", "uno"]) validate_cliresult(result) - assert ('basic.ino:13:14: warning: #warning "Line number is 13"' in + assert ('basic.ino:16:14: warning: #warning "Line number is 16"' in result.output) result = clirunner.invoke( cmd_ci, [join(INOTEST_DIR, "strmultilines"), "-b", "uno"])