added add_file_infos function
This commit is contained in:
parent
e968058249
commit
759db1ea7a
|
@ -38,4 +38,14 @@ typedef enum {
|
||||||
SYNC_RESULT,
|
SYNC_RESULT,
|
||||||
} SyncResultType;
|
} SyncResultType;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
SyncResultType type;
|
||||||
|
union {
|
||||||
|
FileInfo result;
|
||||||
|
GeneralError error;
|
||||||
|
};
|
||||||
|
} FileInfoResult;
|
||||||
|
|
||||||
|
FileInfoResult add_file_infos(FileInfo a, FileInfo b, const char* start);
|
||||||
|
|
||||||
#endif // SYNC_TYPES_H
|
#endif // SYNC_TYPES_H
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
// Kyler Olsen
|
||||||
|
// ZINC Bootstrap compiler
|
||||||
|
// Type helper functions
|
||||||
|
// June 2025
|
||||||
|
|
||||||
|
#include "sync/types.h"
|
||||||
|
|
||||||
|
FileInfoResult add_file_infos(FileInfo a, FileInfo b, const char* start) {
|
||||||
|
if (a.filename != b.filename)
|
||||||
|
return (FileInfoResult){SYNC_ERROR, .error = (GeneralError){"Cannot add two FileInfo structs from different files.", 1}};
|
||||||
|
size_t line = a.line;
|
||||||
|
size_t column = a.column;
|
||||||
|
size_t length = a.length;
|
||||||
|
size_t lines = a.lines;
|
||||||
|
for (int i = a.length; ; i++) {
|
||||||
|
if (start[i] == '\0')
|
||||||
|
return (FileInfoResult){SYNC_ERROR, .error = (GeneralError){"Encountered end of string.", 1}};
|
||||||
|
if (start[i] == '\n') {
|
||||||
|
column = 1;
|
||||||
|
line++;
|
||||||
|
lines++;
|
||||||
|
} else column++;
|
||||||
|
length++;
|
||||||
|
if (line == b.line && column == b.column) {
|
||||||
|
length += b.length;
|
||||||
|
lines += b.lines;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FileInfo file_info = {
|
||||||
|
.filename = a.filename,
|
||||||
|
.line = a.line,
|
||||||
|
.column = a.column,
|
||||||
|
.length = length,
|
||||||
|
.lines = lines
|
||||||
|
};
|
||||||
|
return (FileInfoResult){SYNC_RESULT, .result = file_info};
|
||||||
|
}
|
Loading…
Reference in New Issue