Skip to content

Commit 67a198f

Browse files
committed
Moved Source and SourceGccMinusE into Context
Some helper "Command" now accepts directly the address of the target string to work on instead of the key of the context map that contains the string. Those "arguments" are, I guess, legacy from old preprocessing and library discovery and IMHO they can be removed with a bit of refactoring. Anyway, I've intentionally limited the scope of this commit and left further optimization for the future. Signed-off-by: Cristian Maglie <[email protected]>
1 parent 7520e66 commit 67a198f

20 files changed

+63
-74
lines changed

src/arduino.cc/builder/constants/constants.go

-2
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,6 @@ const CTAGS = "ctags"
7676
const CTX_ARCHIVE_FILE_PATH_CORE = "archiveFileCore"
7777
const CTX_BUILD_CORE = "buildCore"
7878
const CTX_FILE_PATH_TO_READ = "filePathToRead"
79-
const CTX_GCC_MINUS_E_SOURCE = "gccMinusESource"
8079
const CTX_GCC_MINUS_M_OUTPUT = "gccMinusMOutput"
8180
const CTX_HARDWARE = "hardware"
8281
const CTX_HARDWARE_REWRITE_RESULTS = "hardwareRewriteResults"
@@ -87,7 +86,6 @@ const CTX_OBJECT_FILES_CORE = "objectFilesCore"
8786
const CTX_OBJECT_FILES_LIBRARIES = "objectFilesLibraries"
8887
const CTX_OBJECT_FILES_SKETCH = "objectFilesSketch"
8988
const CTX_PLATFORM_KEYS_REWRITE = "platformKeysRewrite"
90-
const CTX_SOURCE = "source"
9189
const CTX_TOOLS = "tools"
9290
const CTX_VIDPID = "VIDPID"
9391
const EMPTY_STRING = ""

src/arduino.cc/builder/container_add_prototypes.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ type ContainerAddPrototypes struct{}
4141
func (s *ContainerAddPrototypes) Run(context map[string]interface{}, ctx *types.Context) error {
4242
commands := []types.Command{
4343
&GCCPreprocRunner{TargetFileName: constants.FILE_CTAGS_TARGET_FOR_GCC_MINUS_E},
44-
&ReadFileAndStoreInContext{TargetField: constants.CTX_GCC_MINUS_E_SOURCE},
45-
&CTagsTargetFileSaver{SourceField: constants.CTX_GCC_MINUS_E_SOURCE, TargetFileName: constants.FILE_CTAGS_TARGET_FOR_GCC_MINUS_E},
44+
&ReadFileAndStoreInContext{Target: &ctx.SourceGccMinusE},
45+
&CTagsTargetFileSaver{Source: &ctx.SourceGccMinusE, TargetFileName: constants.FILE_CTAGS_TARGET_FOR_GCC_MINUS_E},
4646
&ctags.CTagsRunner{},
4747
&ctags.CTagsParser{},
4848
&CollectCTagsFromSketchFiles{},

src/arduino.cc/builder/container_find_includes.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ func findIncludesUntilDone(context map[string]interface{}, ctx *types.Context, s
105105
for !done {
106106
commands := []types.Command{
107107
&GCCPreprocRunnerForDiscoveringIncludes{SourceFilePath: sourceFilePath, TargetFilePath: targetFilePath},
108-
&IncludesFinderWithRegExp{ContextField: constants.CTX_GCC_MINUS_E_SOURCE},
108+
&IncludesFinderWithRegExp{Source: &ctx.SourceGccMinusE},
109109
&IncludesToIncludeFolders{},
110110
}
111111
for _, command := range commands {

src/arduino.cc/builder/ctags_target_file_saver.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,12 @@ import (
3737
)
3838

3939
type CTagsTargetFileSaver struct {
40-
SourceField string
40+
Source *string
4141
TargetFileName string
4242
}
4343

4444
func (s *CTagsTargetFileSaver) Run(context map[string]interface{}, ctx *types.Context) error {
45-
source := context[s.SourceField].(string)
45+
source := *s.Source
4646

4747
preprocPath := ctx.PreprocPath
4848
err := utils.EnsureFolderExists(preprocPath)

src/arduino.cc/builder/external_include_replacer.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -36,22 +36,22 @@ import (
3636
)
3737

3838
type ExternalIncludeReplacer struct {
39-
SourceKey string
40-
TargetKey string
41-
From string
42-
To string
39+
Source *string
40+
Target *string
41+
From string
42+
To string
4343
}
4444

4545
func (s *ExternalIncludeReplacer) Run(context map[string]interface{}, ctx *types.Context) error {
46-
source := context[s.SourceKey].(string)
46+
source := *s.Source
4747
nonAbsoluteIncludes := findNonAbsoluteIncludes(ctx.Includes)
4848

4949
for _, include := range nonAbsoluteIncludes {
5050
source = strings.Replace(source, s.From+"<"+include+">", s.To+"<"+include+">", -1)
5151
source = strings.Replace(source, s.From+"\""+include+"\"", s.To+"\""+include+"\"", -1)
5252
}
5353

54-
context[s.TargetKey] = source
54+
*s.Target = source
5555

5656
return nil
5757
}

src/arduino.cc/builder/gcc_preproc_runner.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ func (s *GCCPreprocRunnerForDiscoveringIncludes) Run(context map[string]interfac
9393
return i18n.WrapError(err)
9494
}
9595

96-
context[constants.CTX_GCC_MINUS_E_SOURCE] = string(stderr)
96+
ctx.SourceGccMinusE = string(stderr)
9797

9898
return nil
9999
}

src/arduino.cc/builder/gcc_preproc_source_saver.go

+1-3
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,6 @@ func (s *GCCPreprocSourceSaver) Run(context map[string]interface{}, ctx *types.C
4646
return i18n.WrapError(err)
4747
}
4848

49-
source := context[constants.CTX_SOURCE].(string)
50-
51-
err = utils.WriteFile(filepath.Join(preprocPath, constants.FILE_GCC_PREPROC_TARGET), source)
49+
err = utils.WriteFile(filepath.Join(preprocPath, constants.FILE_GCC_PREPROC_TARGET), ctx.Source)
5250
return i18n.WrapError(err)
5351
}

src/arduino.cc/builder/includes_finder_with_regexp.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,11 @@ import (
4040
var INCLUDE_REGEXP = regexp.MustCompile("(?ms)^\\s*#[ \t]*include\\s*[<\"](\\S+)[\">]")
4141

4242
type IncludesFinderWithRegExp struct {
43-
ContextField string
43+
Source *string
4444
}
4545

4646
func (s *IncludesFinderWithRegExp) Run(context map[string]interface{}, ctx *types.Context) error {
47-
source := context[s.ContextField].(string)
47+
source := *s.Source
4848

4949
matches := INCLUDE_REGEXP.FindAllStringSubmatch(source, -1)
5050
includes := []string{}

src/arduino.cc/builder/print_preprocessed_source.go

+1-5
Original file line numberDiff line numberDiff line change
@@ -30,17 +30,13 @@
3030
package builder
3131

3232
import (
33-
"arduino.cc/builder/constants"
3433
"arduino.cc/builder/types"
3534
"fmt"
3635
)
3736

3837
type PrintPreprocessedSource struct{}
3938

4039
func (s *PrintPreprocessedSource) Run(context map[string]interface{}, ctx *types.Context) error {
41-
source := context[constants.CTX_GCC_MINUS_E_SOURCE].(string)
42-
43-
fmt.Println(source)
44-
40+
fmt.Println(ctx.SourceGccMinusE)
4541
return nil
4642
}

src/arduino.cc/builder/prototypes_adder.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ type PrototypesAdder struct{}
4141

4242
func (s *PrototypesAdder) Run(context map[string]interface{}, ctx *types.Context) error {
4343
debugOutput := ctx.DebugPreprocessor
44-
source := context[constants.CTX_SOURCE].(string)
44+
source := ctx.Source
4545

4646
source = strings.Replace(source, "\r\n", "\n", -1)
4747
source = strings.Replace(source, "\r", "\n", -1)
@@ -74,7 +74,7 @@ func (s *PrototypesAdder) Run(context map[string]interface{}, ctx *types.Context
7474
}
7575
fmt.Println("#END OF PREPROCESSED SOURCE")
7676
}
77-
context[constants.CTX_SOURCE] = source
77+
ctx.Source = source
7878

7979
return nil
8080
}

src/arduino.cc/builder/read_file_and_store_in_context.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ import (
3737
)
3838

3939
type ReadFileAndStoreInContext struct {
40-
TargetField string
40+
Target *string
4141
}
4242

4343
func (s *ReadFileAndStoreInContext) Run(context map[string]interface{}, ctx *types.Context) error {
@@ -46,7 +46,7 @@ func (s *ReadFileAndStoreInContext) Run(context map[string]interface{}, ctx *typ
4646
return i18n.WrapError(err)
4747
}
4848

49-
context[s.TargetField] = string(bytes)
49+
*s.Target = string(bytes)
5050

5151
return nil
5252
}

src/arduino.cc/builder/sketch_saver.go

+1-3
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
package builder
3131

3232
import (
33-
"arduino.cc/builder/constants"
3433
"arduino.cc/builder/i18n"
3534
"arduino.cc/builder/types"
3635
"arduino.cc/builder/utils"
@@ -42,13 +41,12 @@ type SketchSaver struct{}
4241
func (s *SketchSaver) Run(context map[string]interface{}, ctx *types.Context) error {
4342
sketch := ctx.Sketch
4443
sketchBuildPath := ctx.SketchBuildPath
45-
source := context[constants.CTX_SOURCE].(string)
4644

4745
err := utils.EnsureFolderExists(sketchBuildPath)
4846
if err != nil {
4947
return i18n.WrapError(err)
5048
}
5149

52-
err = utils.WriteFile(filepath.Join(sketchBuildPath, filepath.Base(sketch.MainFile.Name)+".cpp"), source)
50+
err = utils.WriteFile(filepath.Join(sketchBuildPath, filepath.Base(sketch.MainFile.Name)+".cpp"), ctx.Source)
5351
return i18n.WrapError(err)
5452
}

src/arduino.cc/builder/sketch_source_merger.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ func (s *SketchSourceMerger) Run(context map[string]interface{}, ctx *types.Cont
6060
}
6161

6262
context[constants.CTX_LINE_OFFSET] = lineOffset
63-
context[constants.CTX_SOURCE] = source
63+
ctx.Source = source
6464

6565
return nil
6666
}

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

+5-5
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ func TestCTagsRunner(t *testing.T) {
7171

7272
&builder.PrintUsedLibrariesIfVerbose{},
7373
&builder.WarnAboutArchIncompatibleLibraries{},
74-
&builder.CTagsTargetFileSaver{SourceField: constants.CTX_SOURCE, TargetFileName: constants.FILE_CTAGS_TARGET},
74+
&builder.CTagsTargetFileSaver{Source: &ctx.Source, TargetFileName: constants.FILE_CTAGS_TARGET},
7575
&ctags.CTagsRunner{},
7676
}
7777

@@ -122,7 +122,7 @@ func TestCTagsRunnerSketchWithClass(t *testing.T) {
122122

123123
&builder.PrintUsedLibrariesIfVerbose{},
124124
&builder.WarnAboutArchIncompatibleLibraries{},
125-
&builder.CTagsTargetFileSaver{SourceField: constants.CTX_SOURCE, TargetFileName: constants.FILE_CTAGS_TARGET},
125+
&builder.CTagsTargetFileSaver{Source: &ctx.Source, TargetFileName: constants.FILE_CTAGS_TARGET},
126126
&ctags.CTagsRunner{},
127127
}
128128

@@ -171,7 +171,7 @@ func TestCTagsRunnerSketchWithTypename(t *testing.T) {
171171

172172
&builder.PrintUsedLibrariesIfVerbose{},
173173
&builder.WarnAboutArchIncompatibleLibraries{},
174-
&builder.CTagsTargetFileSaver{SourceField: constants.CTX_SOURCE, TargetFileName: constants.FILE_CTAGS_TARGET},
174+
&builder.CTagsTargetFileSaver{Source: &ctx.Source, TargetFileName: constants.FILE_CTAGS_TARGET},
175175
&ctags.CTagsRunner{},
176176
}
177177

@@ -219,7 +219,7 @@ func TestCTagsRunnerSketchWithNamespace(t *testing.T) {
219219

220220
&builder.PrintUsedLibrariesIfVerbose{},
221221
&builder.WarnAboutArchIncompatibleLibraries{},
222-
&builder.CTagsTargetFileSaver{SourceField: constants.CTX_SOURCE, TargetFileName: constants.FILE_CTAGS_TARGET},
222+
&builder.CTagsTargetFileSaver{Source: &ctx.Source, TargetFileName: constants.FILE_CTAGS_TARGET},
223223
&ctags.CTagsRunner{},
224224
}
225225

@@ -266,7 +266,7 @@ func TestCTagsRunnerSketchWithTemplates(t *testing.T) {
266266

267267
&builder.PrintUsedLibrariesIfVerbose{},
268268
&builder.WarnAboutArchIncompatibleLibraries{},
269-
&builder.CTagsTargetFileSaver{SourceField: constants.CTX_SOURCE, TargetFileName: constants.FILE_CTAGS_TARGET},
269+
&builder.CTagsTargetFileSaver{Source: &ctx.Source, TargetFileName: constants.FILE_CTAGS_TARGET},
270270
&ctags.CTagsRunner{},
271271
}
272272

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

+8-9
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ package test
3131

3232
import (
3333
"arduino.cc/builder"
34-
"arduino.cc/builder/constants"
3534
"arduino.cc/builder/types"
3635
"github.com/stretchr/testify/require"
3736
"testing"
@@ -74,27 +73,27 @@ var sourceWithPragmas = "#line 1 \"sketch_with_config.ino\"\n" +
7473
func TestExternalIncludeReplacerIncludeToPragma(t *testing.T) {
7574
context := make(map[string]interface{})
7675
ctx := &types.Context{}
77-
context[constants.CTX_SOURCE] = sourceWithIncludes
76+
ctx.Source = sourceWithIncludes
7877
ctx.Includes = []string{"/tmp/test184599776/sketch/config.h", "/tmp/test184599776/sketch/includes/de bug.h", "Bridge.h"}
7978

80-
replacer := builder.ExternalIncludeReplacer{SourceKey: constants.CTX_SOURCE, TargetKey: constants.CTX_GCC_MINUS_E_SOURCE, From: "#include ", To: "#pragma ___MY_INCLUDE___ "}
79+
replacer := builder.ExternalIncludeReplacer{Source: &ctx.Source, Target: &ctx.SourceGccMinusE, From: "#include ", To: "#pragma ___MY_INCLUDE___ "}
8180
err := replacer.Run(context, ctx)
8281
NoError(t, err)
8382

84-
require.Equal(t, sourceWithIncludes, context[constants.CTX_SOURCE].(string))
85-
require.Equal(t, sourceWithPragmas, context[constants.CTX_GCC_MINUS_E_SOURCE].(string))
83+
require.Equal(t, sourceWithIncludes, ctx.Source)
84+
require.Equal(t, sourceWithPragmas, ctx.SourceGccMinusE)
8685
}
8786

8887
func TestExternalIncludeReplacerPragmaToInclude(t *testing.T) {
8988
context := make(map[string]interface{})
9089
ctx := &types.Context{}
91-
context[constants.CTX_GCC_MINUS_E_SOURCE] = sourceWithPragmas
90+
ctx.SourceGccMinusE = sourceWithPragmas
9291
ctx.Includes = []string{"/tmp/test184599776/sketch/config.h", "/tmp/test184599776/sketch/includes/de bug.h", "Bridge.h"}
9392

94-
replacer := builder.ExternalIncludeReplacer{SourceKey: constants.CTX_GCC_MINUS_E_SOURCE, TargetKey: constants.CTX_GCC_MINUS_E_SOURCE, From: "#pragma ___MY_INCLUDE___ ", To: "#include "}
93+
replacer := builder.ExternalIncludeReplacer{Source: &ctx.SourceGccMinusE, Target: &ctx.SourceGccMinusE, From: "#pragma ___MY_INCLUDE___ ", To: "#include "}
9594
err := replacer.Run(context, ctx)
9695
NoError(t, err)
9796

98-
require.Nil(t, context[constants.CTX_SOURCE])
99-
require.Equal(t, sourceWithIncludes, context[constants.CTX_GCC_MINUS_E_SOURCE].(string))
97+
require.Empty(t, ctx.Source)
98+
require.Equal(t, sourceWithIncludes, ctx.SourceGccMinusE)
10099
}

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

+12-13
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ package test
3131

3232
import (
3333
"arduino.cc/builder"
34-
"arduino.cc/builder/constants"
3534
"arduino.cc/builder/types"
3635
"github.com/stretchr/testify/require"
3736
"sort"
@@ -46,9 +45,9 @@ func TestIncludesFinderWithRegExp(t *testing.T) {
4645
"#include <SPI.h>\n" +
4746
"^\n" +
4847
"compilation terminated."
49-
context[constants.CTX_SOURCE] = output
48+
ctx.Source = output
5049

51-
parser := builder.IncludesFinderWithRegExp{ContextField: constants.CTX_SOURCE}
50+
parser := builder.IncludesFinderWithRegExp{Source: &ctx.Source}
5251
err := parser.Run(context, ctx)
5352
NoError(t, err)
5453

@@ -63,9 +62,9 @@ func TestIncludesFinderWithRegExpEmptyOutput(t *testing.T) {
6362

6463
output := ""
6564

66-
context[constants.CTX_SOURCE] = output
65+
ctx.Source = output
6766

68-
parser := builder.IncludesFinderWithRegExp{ContextField: constants.CTX_SOURCE}
67+
parser := builder.IncludesFinderWithRegExp{Source: &ctx.Source}
6968
err := parser.Run(context, ctx)
7069
NoError(t, err)
7170

@@ -84,9 +83,9 @@ func TestIncludesFinderWithRegExpPreviousIncludes(t *testing.T) {
8483
"^\n" +
8584
"compilation terminated."
8685

87-
context[constants.CTX_SOURCE] = output
86+
ctx.Source = output
8887

89-
parser := builder.IncludesFinderWithRegExp{ContextField: constants.CTX_SOURCE}
88+
parser := builder.IncludesFinderWithRegExp{Source: &ctx.Source}
9089
err := parser.Run(context, ctx)
9190
NoError(t, err)
9291

@@ -105,9 +104,9 @@ func TestIncludesFinderWithRegExpPaddedIncludes(t *testing.T) {
105104
" # include <Wire.h>\n" +
106105
" ^\n" +
107106
"compilation terminated.\n"
108-
context[constants.CTX_SOURCE] = output
107+
ctx.Source = output
109108

110-
parser := builder.IncludesFinderWithRegExp{ContextField: constants.CTX_SOURCE}
109+
parser := builder.IncludesFinderWithRegExp{Source: &ctx.Source}
111110
err := parser.Run(context, ctx)
112111
NoError(t, err)
113112

@@ -125,9 +124,9 @@ func TestIncludesFinderWithRegExpPaddedIncludes2(t *testing.T) {
125124
" #\t\t\tinclude <Wire.h>\n" +
126125
" ^\n" +
127126
"compilation terminated.\n"
128-
context[constants.CTX_SOURCE] = output
127+
ctx.Source = output
129128

130-
parser := builder.IncludesFinderWithRegExp{ContextField: constants.CTX_SOURCE}
129+
parser := builder.IncludesFinderWithRegExp{Source: &ctx.Source}
131130
err := parser.Run(context, ctx)
132131
NoError(t, err)
133132

@@ -144,9 +143,9 @@ func TestIncludesFinderWithRegExpPaddedIncludes3(t *testing.T) {
144143
output := "/some/path/sketch.ino:1:33: fatal error: SPI.h: No such file or directory\n" +
145144
"compilation terminated.\n"
146145

147-
context[constants.CTX_SOURCE] = output
146+
ctx.Source = output
148147

149-
parser := builder.IncludesFinderWithRegExp{ContextField: constants.CTX_SOURCE}
148+
parser := builder.IncludesFinderWithRegExp{Source: &ctx.Source}
150149
err := parser.Run(context, ctx)
151150
NoError(t, err)
152151

0 commit comments

Comments
 (0)