<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 12pt;
font-family:Calibri
}
--></style></head>
<body class='hmmessage'><div dir='ltr'><div>Good point, and C++ systems do handle this.</div><div>When you step into std::vector<char>::foo, the debugger knows that the source line occurs many places and can prompt you for which you want,</div><div>or it can assume you mean the current one.</div><div><br></div><div>If you haven't yet stepped into it, it can prompt for which.</div><div><br></div><div>Now, 1) this stuff is often inlined and</div><div> 2) std::vector<short> and std::vector<unsigned short>, usually end up being identical code, so you can't break on them separately. The linker does these optimization, and some compilers.</div><div>Even Modula-3 is subject to this optimization -- since the linker does it.</div><div><br></div><div>It is *mostly* good, mostly just makes things smaller, but it also confuses a lot of people.</div><div><br></div><div>The linker I believe has to be a little pessimistic, like if you take the address of a function, that can inhibit optimization, lest someone is comparing function pointers for equality, which is rare and frowned upon, but is sort of in the languages. it also has to get function comparison correct, which is a little tricky, what with functions referencing data and other functions.</div><div><br></div><div>m3gdb is interpreting these strings I guess.</div><div><br></div><div>what is with the strings that have only a directory and not a file name on the right side -- in M3Header.m3.</div><div><br></div><div>If I make the left hand side just a leaf name, foo.m3, w/o ../AMD64_LINUX, that'll be nearly equivalent?</div><div>i.e. it is assuming current directory is already AMD64_LINUX, or it is assuming src?</div><div><br></div><div>See, funny thing is, the current paths resolve the same either way, but if I remove "../AMD64_LINUX", they don't.</div><div><br></div><div> - Jay<br><br><br><br></div><div>> Date: Wed, 29 Jun 2016 12:01:08 -0500<br>> From: rodney_bates@lcwb.coop<br>> To: m3devel@elegosoft.com<br>> Subject: Re: [M3devel] source paths to generics?<br>> <br>> <br>> <br>> On 06/29/2016 04:44 AM, Jay K wrote:<br>> > I haven't fully verified this, but it appears for example if I debug a generic, or fail an assert in a generic,<br>> > the source file I am told about is the instantiated i3/m3 file.<br>> ><br>> > This isn't particularly useful for the programmer or convenient for the compiler, right?<br>> ><br>> > The programmer would rather see the .ig/.mg files, and this is easy to provide in the compiler?<br>> > I guess it is slightly easier in the compiler, but easy to do better?<br>> <br>> Yes.  m3gdb does this, in many cases:<br>> ------------------------------------------------------------------------------------------------------------<br>> (m3gdb) b VarArray.mg:136<br>> Breakpoint 2 at 0x4073c3: file ../AMD64_LINUX/IntIntVarArray.m3 => ../src/VarArray.mg, line 136.<br>> (m3gdb) c<br>> Continuing.<br>> <br>> Breakpoint 2, New (InitElemValue=-9223372036854775808, InitialAlloc=<br>>      RECORD Lo = 9223372036854775807; Hi = -9223372036854775808;  END, ExpansionFactor=1.10000002)<br>>      at ../AMD64_LINUX/IntIntVarArray.m3 => ../src/VarArray.mg:136<br>> 136          LExpansionFactorR := MAX ( ExpansionFactor , MinExpansionFactorR )<br>> (m3gdb)<br>> <br>> ------------------------------------------------------------------------------------------------------------<br>> <br>> It has a bug though.  Setting a breakpoint to a .mg file before any execution has<br>> started appears to work, but the breakpoint won't trigger.<br>> <br>> I have not looked at cases like runtime errors without m3gdb.<br>> <br>> This does raise the question, however, that you might very well want to distinguish<br>> different instantiations of the same generic when setting a breakpoint.<br>> <br>> This is a good example of where a debugger needs to have awareness of your language.<br>> Modula-3 instantiations, being separate compilation units and having separate<br>> generic and instantiation files is a model that, AFAIK, does not occur in other<br>> languages.<br>> <br>> ><br>> > I should look into make it so?<br>> ><br>> > My real agenda is I want to see:<br>> >    ../src/foo.mg<br>> ><br>> > instead of<br>> >   I386_DARWIN/foo.m3<br>> ><br>> > I don't want the target variation, but other points seem true also, right?<br>> ><br>> > Right? The line numbers match between them, and the generic syntax is so close to "normal" that a programmer not used to it won't be confused, right?<br>> ><br>> > I'll try to poke around more.<br>> ><br>> >   - Jay<br>> ><br>> >                                          <br>> > _______________________________________________<br>> > M3devel mailing list<br>> > M3devel@elegosoft.com<br>> > https://m3lists.elegosoft.com/mailman/listinfo/m3devel<br>> ><br>> <br>> -- <br>> Rodney Bates<br>> rodney.m.bates@acm.org<br>> _______________________________________________<br>> M3devel mailing list<br>> M3devel@elegosoft.com<br>> https://m3lists.elegosoft.com/mailman/listinfo/m3devel<br></div>                                        </div></body>
</html>