Re: Further C++ operators for position
Hans Åberg <[email protected]>
| Newsgroups | gmane.comp.parsers.bison.general |
|---|---|
| Message-ID | <[email protected]> |
> On 4 Nov 2019, at 18:12, Akim Demaille <[email protected]> wrote: > >> Le 4 nov. 2019 à 17:03, Matthew Fernandez <[email protected]> a écrit : >> >> The std::less implementation you suggest is to also lexicographically compare the filenames themselves? I’m not sure this makes sense, because source positions from two different files aren’t really orderable at all. > > The point of defining std::less is to have an easy means to insert positions in a sorted container, say std::map. Now, the order in itself is well defined, but my not reflect the order the user would like to see. > > To be clear: I don't have a problem with std::less which I see as an implementation detail, but operators such as <= and the like are different: they express a total order that we can't implement easily. The total order is expressed via std::less in containers such as std::map, with undefined results if not fulfilling the specs for that. > In addition, think of C where you also have main.c that #include "foo.h" somewhere, which results in main.c:1 (i.e., line 1) < foo.h:1 < ... < foo.h:42 < ... < main.c:3. Here the files are stacked, and if the nested files are closed after being read, the location pointers are dead. > If we want a total order here, it's actually easy: positions should have a counter somewhere which is the *total* "offset" since the first byte of the first file. Or something like that.