@@ -74,7 +74,7 @@ func PreprocessSketchWithCtags(
7474 }
7575
7676 if src , err := ctagsTarget .ReadFile (); err == nil {
77- filteredSource := filterSketchSource (sketch , bytes .NewReader (src ), false )
77+ filteredSource := filterSketchSource (sketch , bytes .NewReader (src ), false , stderr )
7878 if err := ctagsTarget .WriteFile ([]byte (filteredSource )); err != nil {
7979 return & Result {args : result .Args (), stdout : stdout .Bytes (), stderr : stderr .Bytes ()}, err
8080 }
@@ -208,7 +208,7 @@ func RunCTags(ctx context.Context, sourceFile *paths.Path, buildProperties *prop
208208 return stdout , stderr , args , err
209209}
210210
211- func filterSketchSource (sketch * sketch.Sketch , source io.Reader , removeLineMarkers bool ) string {
211+ func filterSketchSource (sketch * sketch.Sketch , source io.Reader , removeLineMarkers bool , stderr * bytes. Buffer ) string {
212212 fileNames := paths .NewPathList ()
213213 fileNames .Add (sketch .MainFile )
214214 fileNames .AddAll (sketch .OtherSketchFiles )
@@ -217,6 +217,11 @@ func filterSketchSource(sketch *sketch.Sketch, source io.Reader, removeLineMarke
217217 filtered := ""
218218
219219 scanner := bufio .NewScanner (source )
220+
221+ var buf []byte
222+ const maxTokenSize = 1024 * 1024 // 1 MB
223+ scanner .Buffer (buf , maxTokenSize )
224+
220225 for scanner .Scan () {
221226 line := scanner .Text ()
222227 if filename := cpp .ParseLineMarker (line ); filename != nil {
@@ -230,6 +235,11 @@ func filterSketchSource(sketch *sketch.Sketch, source io.Reader, removeLineMarke
230235 filtered += line + "\n "
231236 }
232237 }
238+ if errors .Is (scanner .Err (), bufio .ErrTooLong ) {
239+ fmt .Fprintf (stderr , "%s: %s" ,
240+ i18n .Tr ("An error occurred adding prototypes" ),
241+ i18n .Tr ("line too long\n " ))
242+ }
233243
234244 return filtered
235245}
0 commit comments