[M3devel] source paths to generics?
Jay K
jay.krell at cornell.edu
Wed Jun 29 17:22:14 CEST 2016
mfront/src/misc/M3Header.m3 has this:
(* build a synthetic file name & start reading *)
filename := old_filename & " => " & filename;
Scanner.Push (filename, s.generic, is_main := Scanner.in_main);
and instantiated generics aren't what I thought.
I thought the build system or compiler did a textual
substitution of the generic parameters into the entire implementation,
and saved that to the file system,
and had the assert/debug paths point to it.
So could step through what looks exactly like an .m3 file.
But it doesn't. The instantiated file is a little stub, like:
jair:libm3 jay$ more I386_DARWIN/TextAtomTbl.m3
(*generated by m3build*)
MODULE TextAtomTbl = Table (Text, Atom) END TextAtomTbl.
so I have one or two proposals.
1) old_filename above contains the target, it looks like:
"../I386_DARWIN/TextAtomTbl.m3 => ../src/table/Table.mg"
or
"../I386_DARWIN/TextAtomTbl.m3 => ../src/table"
These both occur.
I'm not sure what the second is, seems like a mistake.
I suggest the first string in both pairs be changed to be the leaf element, like:
"TextAtomTbl.m3 => ../src/table/Table.mg"
or
"TextAtomTbl.m3 => ../src/table"
and maybe the second string in both cases should be as it is in the second pair.
2) Possibly it should reall just be:
../src/table/Table.mg
and developer can step through that, knowing that it is a somewhat abstracted
form of what is running
I'm willing to do this under like:
CONST TemporaryForTargetConvergence = TRUE
or
VAR TemporaryForTargetConvergence: BOOLEAN;
and a command line switch, but I suspect it isn't really useful to anyone asis,
so might as well remove target unconditionally.
?
- Jay
----------------------------------------
> From: jay.krell at cornell.edu
> To: m3devel at elegosoft.com
> Date: Wed, 29 Jun 2016 09:44:51 +0000
> Subject: [M3devel] source paths to generics?
>
> I haven't fully verified this, but it appears for example if I debug a generic, or fail an assert in a generic,
> the source file I am told about is the instantiated i3/m3 file.
>
> This isn't particularly useful for the programmer or convenient for the compiler, right?
>
> The programmer would rather see the .ig/.mg files, and this is easy to provide in the compiler?
> I guess it is slightly easier in the compiler, but easy to do better?
>
> I should look into make it so?
>
> My real agenda is I want to see:
> ../src/foo.mg
>
> instead of
> I386_DARWIN/foo.m3
>
> I don't want the target variation, but other points seem true also, right?
>
> 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?
>
> I'll try to poke around more.
>
> - Jay
>
>
> _______________________________________________
> M3devel mailing list
> M3devel at elegosoft.com
> https://m3lists.elegosoft.com/mailman/listinfo/m3devel
More information about the M3devel
mailing list