Skip to content

Commit edbf386

Browse files
committed
Signed-off-by: Cristian Maglie <[email protected]>
2 parents baa901e + e418963 commit edbf386

20 files changed

+233
-133
lines changed

src/arduino.cc/builder/collect_ctags_from_sketch_files.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ package builder
3232
import (
3333
"arduino.cc/builder/types"
3434
"arduino.cc/builder/utils"
35-
"strings"
3635
)
3736

3837
type CollectCTagsFromSketchFiles struct{}
@@ -43,7 +42,7 @@ func (s *CollectCTagsFromSketchFiles) Run(ctx *types.Context) error {
4342
allCtags := ctx.CTagsOfPreprocessedSource
4443
ctagsOfSketch := []*types.CTag{}
4544
for _, ctag := range allCtags {
46-
if utils.SliceContains(sketchFileNames, strings.Replace(ctag.Filename, "\\\\", "\\", -1)) {
45+
if utils.SliceContains(sketchFileNames, ctag.Filename) {
4746
ctagsOfSketch = append(ctagsOfSketch, ctag)
4847
}
4948
}

src/arduino.cc/builder/ctags/ctags_parser.go

+8-1
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,14 @@ func parseTag(row string) *types.CTag {
229229
parts := strings.Split(row, "\t")
230230

231231
tag.FunctionName = parts[0]
232-
tag.Filename = parts[1]
232+
// This unescapes any backslashes in the filename. These
233+
// filenames that ctags outputs originate from the line markers
234+
// in the source, as generated by gcc. gcc escapes both
235+
// backslashes and double quotes, but ctags ignores any escaping
236+
// and just cuts off the filename at the first double quote it
237+
// sees. This means any backslashes are still escaped, and need
238+
// to be unescape, and any quotes will just break the build.
239+
tag.Filename = strings.Replace(parts[1], "\\\\", "\\", -1)
233240

234241
parts = parts[2:]
235242

src/arduino.cc/builder/prototypes_adder.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ package builder
3232
import (
3333
"arduino.cc/builder/constants"
3434
"arduino.cc/builder/types"
35+
"arduino.cc/builder/utils"
3536
"fmt"
3637
"strconv"
3738
"strings"
@@ -87,7 +88,7 @@ func composePrototypeSection(line int, prototypes []*types.Prototype) string {
8788
str := joinPrototypes(prototypes)
8889
str += "\n#line "
8990
str += strconv.Itoa(line)
90-
str += " \"" + prototypes[0].File + "\""
91+
str += " " + utils.QuoteCppString(prototypes[0].File)
9192
str += "\n"
9293

9394
return str
@@ -99,7 +100,7 @@ func joinPrototypes(prototypes []*types.Prototype) string {
99100
if signatureContainsaDefaultArg(proto) {
100101
continue
101102
}
102-
prototypesSlice = append(prototypesSlice, "#line "+strconv.Itoa(proto.Line)+" \""+proto.File+"\"")
103+
prototypesSlice = append(prototypesSlice, "#line "+strconv.Itoa(proto.Line)+" "+utils.QuoteCppString(proto.File))
103104
prototypeParts := []string{}
104105
if proto.Modifiers != "" {
105106
prototypeParts = append(prototypeParts, proto.Modifiers)

src/arduino.cc/builder/sketch_source_merger.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ package builder
3232

3333
import (
3434
"arduino.cc/builder/types"
35+
"arduino.cc/builder/utils"
3536
"regexp"
36-
"strings"
3737
)
3838

3939
type SketchSourceMerger struct{}
@@ -47,7 +47,7 @@ func (s *SketchSourceMerger) Run(ctx *types.Context) error {
4747
includeSection += "#include <Arduino.h>\n"
4848
lineOffset++
4949
}
50-
includeSection += "#line 1 \"" + strings.Replace((&sketch.MainFile).Name, "\\", "\\\\", -1) + "\"\n"
50+
includeSection += "#line 1 " + utils.QuoteCppString(sketch.MainFile.Name) + "\n"
5151
lineOffset++
5252
ctx.IncludeSection = includeSection
5353

@@ -73,7 +73,7 @@ func sketchIncludesArduinoH(sketch *types.SketchFile) bool {
7373
}
7474

7575
func addSourceWrappedWithLineDirective(sketch *types.SketchFile) string {
76-
source := "#line 1 \"" + strings.Replace(sketch.Name, "\\", "\\\\", -1) + "\"\n"
76+
source := "#line 1 " + utils.QuoteCppString(sketch.Name) + "\n"
7777
source += sketch.Source
7878
source += "\n"
7979

src/arduino.cc/builder/test/helper.go

+2-4
Original file line numberDiff line numberDiff line change
@@ -33,22 +33,20 @@ package test
3333
import (
3434
"arduino.cc/builder/constants"
3535
"arduino.cc/builder/types"
36+
"arduino.cc/builder/utils"
3637
"bytes"
3738
"fmt"
3839
"github.com/go-errors/errors"
3940
"github.com/stretchr/testify/assert"
4041
"io/ioutil"
4142
"path/filepath"
42-
"strings"
4343
"testing"
4444
"text/template"
4545
)
4646

4747
func LoadAndInterpolate(t *testing.T, filename string, ctx *types.Context) string {
4848
funcsMap := template.FuncMap{
49-
"EscapeBackSlashes": func(s string) string {
50-
return strings.Replace(s, "\\", "\\\\", -1)
51-
},
49+
"QuoteCppString": utils.QuoteCppString,
5250
}
5351

5452
tpl, err := template.New(filepath.Base(filename)).Funcs(funcsMap).ParseFiles(filename)

src/arduino.cc/builder/test/prototypes_adder_test.go

+37-36
Large diffs are not rendered by default.
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
#include <Arduino.h>
2-
#line 1 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
3-
#line 1 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
2+
#line 1 {{QuoteCppString .sketch.MainFile.Name}}
3+
#line 1 {{QuoteCppString .sketch.MainFile.Name}}
44
void setup() {
55

66
}
77

88
void loop() {
99

1010
}
11-
#line 1 "{{EscapeBackSlashes (index .sketch.OtherSketchFiles 0).Name}}"
11+
#line 1 {{QuoteCppString (index .sketch.OtherSketchFiles 0).Name}}
1212

13-
#line 1 "{{EscapeBackSlashes (index .sketch.OtherSketchFiles 1).Name}}"
13+
#line 1 {{QuoteCppString (index .sketch.OtherSketchFiles 1).Name}}
1414
String hello() {
1515
return "world";
1616
}

src/arduino.cc/builder/test/sketch2/SketchWithIfDef.preprocessed.txt

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#include <Arduino.h>
2-
#line 1 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
3-
#line 1 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
2+
#line 1 {{QuoteCppString .sketch.MainFile.Name}}
3+
#line 1 {{QuoteCppString .sketch.MainFile.Name}}
44
#define DEBUG 1
55
#define DISABLED 0
66

@@ -16,17 +16,17 @@ typedef int MyType;
1616

1717
#include "empty_2.h"
1818

19-
#line 16 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
19+
#line 16 {{QuoteCppString .sketch.MainFile.Name}}
2020
void setup();
21-
#line 21 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
21+
#line 21 {{QuoteCppString .sketch.MainFile.Name}}
2222
void loop();
23-
#line 33 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
23+
#line 33 {{QuoteCppString .sketch.MainFile.Name}}
2424
void debug();
25-
#line 44 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
25+
#line 44 {{QuoteCppString .sketch.MainFile.Name}}
2626
void disabledIsDefined();
27-
#line 48 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
27+
#line 48 {{QuoteCppString .sketch.MainFile.Name}}
2828
int useMyType(MyType type);
29-
#line 16 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
29+
#line 16 {{QuoteCppString .sketch.MainFile.Name}}
3030
void setup() {
3131
// put your setup code here, to run once:
3232

src/arduino.cc/builder/test/sketch2/SketchWithIfDef.resolved.directives.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#include <Arduino.h>
2-
#line 1 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
3-
#line 1 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
2+
#line 1 {{QuoteCppString .sketch.MainFile.Name}}
3+
#line 1 {{QuoteCppString .sketch.MainFile.Name}}
44
#define DEBUG 1
55
#define DISABLED 0
66

src/arduino.cc/builder/test/sketch3/Baladuino.preprocessed.txt

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#include <Arduino.h>
2-
#line 1 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
3-
#line 1 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
2+
#line 1 {{QuoteCppString .sketch.MainFile.Name}}
3+
#line 1 {{QuoteCppString .sketch.MainFile.Name}}
44
/*
55
* The code is released under the GNU General Public License.
66
* Developed by Kristian Lauszus, TKJ Electronics 2013
@@ -88,11 +88,11 @@ WII Wii(&Btd); // The Wii library can communicate with Wiimotes and the Nunchuck
8888
// This can also be done using the Android or Processing application
8989
#endif
9090

91-
#line 88 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
91+
#line 88 {{QuoteCppString .sketch.MainFile.Name}}
9292
void setup();
93-
#line 204 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
93+
#line 204 {{QuoteCppString .sketch.MainFile.Name}}
9494
void loop();
95-
#line 88 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
95+
#line 88 {{QuoteCppString .sketch.MainFile.Name}}
9696
void setup() {
9797
/* Initialize UART */
9898
Serial.begin(115200);

src/arduino.cc/builder/test/sketch4/CharWithEscapedDoubleQuote.preprocessed.txt

+24-24
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#include <Arduino.h>
2-
#line 1 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
3-
#line 1 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
2+
#line 1 {{QuoteCppString .sketch.MainFile.Name}}
3+
#line 1 {{QuoteCppString .sketch.MainFile.Name}}
44
#include <SoftwareSerial.h> // required to send and receive AT commands from the GPRS Shield
55
#include <Wire.h> // required for I2C communication with the RTC
66

@@ -39,49 +39,49 @@ Code Exclusively for GPRS shield:
3939
// Default set of instructions for GPRS Shield power control
4040
//
4141

42-
#line 39 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
42+
#line 39 {{QuoteCppString .sketch.MainFile.Name}}
4343
void setPowerStateTo( int newState );
44-
#line 64 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
44+
#line 64 {{QuoteCppString .sketch.MainFile.Name}}
4545
int getPowerState();
46-
#line 75 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
46+
#line 75 {{QuoteCppString .sketch.MainFile.Name}}
4747
void powerUpOrDown();
48-
#line 90 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
48+
#line 90 {{QuoteCppString .sketch.MainFile.Name}}
4949
void clearBufferArray();
50-
#line 96 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
50+
#line 96 {{QuoteCppString .sketch.MainFile.Name}}
5151
void makeMissedCall( char num[] );
52-
#line 111 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
52+
#line 111 {{QuoteCppString .sketch.MainFile.Name}}
5353
void sendTextMessage( char number[], char messg[] );
54-
#line 129 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
54+
#line 129 {{QuoteCppString .sketch.MainFile.Name}}
5555
void analise(byte incoming[], int length);
56-
#line 179 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
56+
#line 179 {{QuoteCppString .sketch.MainFile.Name}}
5757
byte decToBcd( byte b );
58-
#line 184 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
58+
#line 184 {{QuoteCppString .sketch.MainFile.Name}}
5959
boolean getBit( byte addr, int pos );
60-
#line 190 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
60+
#line 190 {{QuoteCppString .sketch.MainFile.Name}}
6161
void setBit( byte addr, int pos, boolean newBit );
62-
#line 204 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
62+
#line 204 {{QuoteCppString .sketch.MainFile.Name}}
6363
byte getByte( byte addr );
64-
#line 213 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
64+
#line 213 {{QuoteCppString .sketch.MainFile.Name}}
6565
boolean getBytes( byte addr, int amount );
66-
#line 230 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
66+
#line 230 {{QuoteCppString .sketch.MainFile.Name}}
6767
void setByte( byte addr, byte newByte );
68-
#line 235 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
68+
#line 235 {{QuoteCppString .sketch.MainFile.Name}}
6969
void setBytes( byte addr, byte newBytes[], int amount );
70-
#line 244 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
70+
#line 244 {{QuoteCppString .sketch.MainFile.Name}}
7171
void getTime();
72-
#line 260 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
72+
#line 260 {{QuoteCppString .sketch.MainFile.Name}}
7373
void setTime( byte newTime[ 7 ] );
74-
#line 267 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
74+
#line 267 {{QuoteCppString .sketch.MainFile.Name}}
7575
void getRTCTemperature();
76-
#line 277 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
76+
#line 277 {{QuoteCppString .sketch.MainFile.Name}}
7777
void gprsListen();
78-
#line 294 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
78+
#line 294 {{QuoteCppString .sketch.MainFile.Name}}
7979
void printTime();
80-
#line 317 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
80+
#line 317 {{QuoteCppString .sketch.MainFile.Name}}
8181
void setup();
82-
#line 334 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
82+
#line 334 {{QuoteCppString .sketch.MainFile.Name}}
8383
void loop();
84-
#line 39 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
84+
#line 39 {{QuoteCppString .sketch.MainFile.Name}}
8585
void setPowerStateTo( int newState )
8686
{
8787
if( newState != 1 && newState != 0 ) { // tests for an invalid state. In this case no change is made to powerstate

src/arduino.cc/builder/test/sketch5/IncludeBetweenMultilineComment.preprocessed.txt

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
#include <Arduino.h>
2-
#line 1 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
3-
#line 1 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
2+
#line 1 {{QuoteCppString .sketch.MainFile.Name}}
3+
#line 1 {{QuoteCppString .sketch.MainFile.Name}}
44
#include <CapacitiveSensor.h>
55
/*
66
#include <WiFi.h>
77
*/
88
CapacitiveSensor cs_13_8 = CapacitiveSensor(13,8);
9-
#line 6 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
9+
#line 6 {{QuoteCppString .sketch.MainFile.Name}}
1010
void setup();
11-
#line 10 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
11+
#line 10 {{QuoteCppString .sketch.MainFile.Name}}
1212
void loop();
13-
#line 6 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
13+
#line 6 {{QuoteCppString .sketch.MainFile.Name}}
1414
void setup()
1515
{
1616
Serial.begin(9600);

src/arduino.cc/builder/test/sketch6/LineContinuations.preprocessed.txt

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
#include <Arduino.h>
2-
#line 1 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
3-
#line 1 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
2+
#line 1 {{QuoteCppString .sketch.MainFile.Name}}
3+
#line 1 {{QuoteCppString .sketch.MainFile.Name}}
44
const char *foo = "\
55
hello \
66
world\n";
77

88
//" delete this comment line and the IDE parser will crash
99

10-
#line 7 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
10+
#line 7 {{QuoteCppString .sketch.MainFile.Name}}
1111
void setup();
12-
#line 11 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
12+
#line 11 {{QuoteCppString .sketch.MainFile.Name}}
1313
void loop();
14-
#line 7 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
14+
#line 7 {{QuoteCppString .sketch.MainFile.Name}}
1515
void setup()
1616
{
1717
}

src/arduino.cc/builder/test/sketch7/StringWithComment.preprocessed.txt

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
#include <Arduino.h>
2-
#line 1 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
3-
#line 1 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
4-
#line 1 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
2+
#line 1 {{QuoteCppString .sketch.MainFile.Name}}
3+
#line 1 {{QuoteCppString .sketch.MainFile.Name}}
4+
#line 1 {{QuoteCppString .sketch.MainFile.Name}}
55
void setup();
6-
#line 10 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
6+
#line 10 {{QuoteCppString .sketch.MainFile.Name}}
77
void loop();
8-
#line 1 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
8+
#line 1 {{QuoteCppString .sketch.MainFile.Name}}
99
void setup() {
1010
// put your setup code here, to run once:
1111
// "comment with a double quote

src/arduino.cc/builder/test/sketch8/SketchWithStruct.preprocessed.txt

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#include <Arduino.h>
2-
#line 1 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
3-
#line 1 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
2+
#line 1 {{QuoteCppString .sketch.MainFile.Name}}
3+
#line 1 {{QuoteCppString .sketch.MainFile.Name}}
44
/* START CODE */
55

66
struct A_NEW_TYPE {
@@ -9,13 +9,13 @@ struct A_NEW_TYPE {
99
int c;
1010
} foo;
1111

12-
#line 9 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
12+
#line 9 {{QuoteCppString .sketch.MainFile.Name}}
1313
void setup();
14-
#line 13 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
14+
#line 13 {{QuoteCppString .sketch.MainFile.Name}}
1515
void loop();
16-
#line 17 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
16+
#line 17 {{QuoteCppString .sketch.MainFile.Name}}
1717
void dostuff (A_NEW_TYPE * bar);
18-
#line 9 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
18+
#line 9 {{QuoteCppString .sketch.MainFile.Name}}
1919
void setup() {
2020

2121
}

src/arduino.cc/builder/test/sketch_with_config/sketch_with_config.preprocessed.txt

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#include <Arduino.h>
2-
#line 1 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
3-
#line 1 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
2+
#line 1 {{QuoteCppString .sketch.MainFile.Name}}
3+
#line 1 {{QuoteCppString .sketch.MainFile.Name}}
44
#include "config.h"
55

66
#ifdef DEBUG
@@ -13,11 +13,11 @@
1313

1414
#include <Bridge.h>
1515

16-
#line 13 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
16+
#line 13 {{QuoteCppString .sketch.MainFile.Name}}
1717
void setup();
18-
#line 17 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
18+
#line 17 {{QuoteCppString .sketch.MainFile.Name}}
1919
void loop();
20-
#line 13 "{{EscapeBackSlashes .sketch.MainFile.Name}}"
20+
#line 13 {{QuoteCppString .sketch.MainFile.Name}}
2121
void setup() {
2222

2323
}

0 commit comments

Comments
 (0)