Skip to content

Commit 07f8c69

Browse files
author
Federico Fissore
committed
PdePreprocessor.scubComments result used before looking for libraries. Fixes #1293
1 parent 22dfa98 commit 07f8c69

File tree

3 files changed

+38
-10
lines changed

3 files changed

+38
-10
lines changed

app/src/processing/app/preproc/PdePreprocessor.java

+12-9
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ public int writePrefix(String program)
8787
// an OutOfMemoryError or NullPointerException will happen.
8888
// again, not gonna bother tracking this down, but here's a hack.
8989
// http://dev.processing.org/bugs/show_bug.cgi?id=16
90-
scrubComments(program);
90+
program = scrubComments(program);
9191
// If there are errors, an exception is thrown and this fxn exits.
9292

9393
if (Preferences.getBoolean("preproc.substitute_unicode")) {
@@ -242,14 +242,17 @@ public int firstStatement(String in) {
242242
*/
243243
public String strip(String in) {
244244
// XXX: doesn't properly handle special single-quoted characters
245+
List<Pattern> patterns = new ArrayList<Pattern>();
245246
// single-quoted character
246-
Pattern[] patterns = new Pattern[6];
247-
patterns[5] = Pattern.compile("(\"(?:[^\"\\\\]|\\\\.)*\")", Pattern.MULTILINE);
248-
patterns[4] = Pattern.compile("(^\\s*#.*?$)", Pattern.MULTILINE);
249-
patterns[3] = Pattern.compile("(/\\*[^*]*(?:\\*(?!/)[^*]*)*\\*/)", Pattern.MULTILINE);
250-
patterns[2] = Pattern.compile("(//.*?$)", Pattern.MULTILINE);
251-
patterns[1] = Pattern.compile("('\\\\\"')", Pattern.MULTILINE);
252-
patterns[0] = Pattern.compile("('.')", Pattern.MULTILINE);
247+
patterns.add(Pattern.compile("('.')", Pattern.MULTILINE));
248+
// single and multi-line comment
249+
patterns.add(Pattern.compile("('\\\\\"')", Pattern.MULTILINE));
250+
patterns.add(Pattern.compile("(//.*?$)", Pattern.MULTILINE));
251+
patterns.add(Pattern.compile("(/\\*[^*]*(?:\\*(?!/)[^*]*)*\\*/)", Pattern.MULTILINE));
252+
// pre-processor directive
253+
patterns.add(Pattern.compile("(^\\s*#.*?$)", Pattern.MULTILINE));
254+
// double-quoted string
255+
patterns.add(Pattern.compile("(\"(?:[^\"\\\\]|\\\\.)*\")", Pattern.MULTILINE));
253256

254257
String code = in;
255258
for (Pattern p : patterns) {
@@ -259,7 +262,7 @@ public String strip(String in) {
259262

260263
return code;
261264
}
262-
265+
263266
/**
264267
* Removes the contents of all top-level curly brace pairs {}.
265268
* @param in the String to collapse
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#include <CapacitiveSensorDue.h>
2+
/*
3+
#include <WiFi.h>
4+
*/
5+
CapacitiveSensorDue cs_13_8 = CapacitiveSensorDue(13,8);
6+
void setup()
7+
{
8+
Serial.begin(9600);
9+
}
10+
void loop()
11+
{
12+
long total1 = cs_13_8.read(30);
13+
Serial.println(total1);
14+
delay(100);
15+
}

app/test/processing/app/preproc/PdePreprocessorTest.java

+11-1
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,14 @@ public void testSourceWithQuoteAndDoubleQuotesEscapedAndFinalQuoteShouldNotRaise
1818

1919
assertEquals(actualOutput, expectedOutput);
2020
}
21-
}
21+
22+
@Test
23+
public void testIncludeInsideMultilineComment() throws Exception {
24+
String s = FileUtils.readFileToString(new File(PdePreprocessorTest.class.getResource("IncludeBetweenMultilineComment.ino").getFile()));
25+
26+
PdePreprocessor pdePreprocessor = new PdePreprocessor();
27+
pdePreprocessor.writePrefix(s);
28+
assertEquals(1, pdePreprocessor.getExtraImports().size());
29+
assertEquals("CapacitiveSensorDue.h", pdePreprocessor.getExtraImports().get(0));
30+
}
31+
}

0 commit comments

Comments
 (0)