Re: getting dependency graph of SML source files from CM
Joe Wells <[email protected]> Wed, 05 Aug 2009 14:34:21 +0100
| Newsgroups | gmane.comp.lang.sml.smlnj |
|---|---|
| Message-ID | <[email protected]> |
Vesa A Norrman <[email protected]> writes: > If you need the order of source files you can do like this > > o remove all .cm directories > o run CM.make > o look at [compiling code.sml] type of messages. that is the order. A good idea! Does this work when there are type errors? I think it aborts in the middle in this case. I expect to be analyzing files that are likely to contain type errors, and I would like to not have to abort at the first error detected. Any other suggestions? -- Thanks, Joe > I don't know if the dependency graph can be printed in any way. > > - Vesa > > On Mon, 3 Aug 2009, Joe Wells wrote: > >> I'm using SML/NJ 110.54. >> >> I want to get output like this for all the files referenced by a >> particular CM file: >> >> file1.sml depends on file2.sml and file2.sig >> file2.sml depends on file3.sml and file3.sig >> >> Is there any way to get CM to give me this information? I need it for >> a program analysis tool. It is important to do things in the same way >> as CM does them. >> >> I can use CM.sources like this to get the list of SML source files CM >> will use: >> >> CM.sources NONE "sources.cm" >> ? SOME >> [{class="sml",derived=false,file="file1.sml"}, >> {class="cm",derived=false,file="sources.cm"}, >> {class="sml",derived=false,file="file2.sml"}, >> {class="sml",derived=false,file="file2.sig"}, >> {class="sml",derived=false,file="file3.sml"}, >> {class="sml",derived=false,file="file3.sig"},...] >> >> I do not know if I can depend on the order of the items in the list >> output by CM.sources. >> >> I can use CM.Graph like this to get the dependency graph CM uses to >> decide which order the SML files must be compiled in: >> >> CM.Graph.graph "sources.cm" >> ? SOME >> {graph=GRAPH >> {defs=[DEF {lhs="str2",rhs=SYM (STR,"TextIO")}, >> DEF {lhs="ss1",rhs=SYMS ["str2"]}, >> DEF {lhs="e3",rhs=IMPORT {lib="l4",syms="ss1"}}, >> DEF {lhs="str6",rhs=SYM (STR,"String")}, >> DEF {lhs="ss5",rhs=SYMS ["str6"]}, >> ..., >> DEF {lhs="e21",rhs=IMPORT {lib="l22",syms="ss19"}}, >> DEF {lhs="str24",rhs=SYM (STR,"Option")}, >> DEF {lhs="ss23",rhs=SYMS ["str24"]}, >> ..., >> DEF >> {lhs="e26", >> rhs=COMPILE >> {env="e21",src=("file4.sig",false),syms="ss27"}}, >> ...], >> export="e0", >> imports=["l4","l22","l214","l147"]}, >> imports=[-,-,-,-], >> nativesrc=fn} >> >> This looks like it probably contains the information I want. >> >> Unfortunately, the type of the graph record component is reported as >> ?.PortableGraph.graph, and there seem to be no accessors provided for >> this type. >> >> I can get output like the above from CM.Graph.graph by setting >> Control.Print.printDepth and Control.Print.printLength and using the >> top-level REPL's pretty printer. If needed, I could then use the >> compiler together with my own definition of the graph datatype to >> parse and load the data, but then I would need to understand the data >> structure to figure out how to extract the inter-file dependencies. >> Also, I'm a bit worried about the value of ?[-,-,-,-]? for the imports >> field and what might be hidden behind the hyphens. >> >> Thanks for any time you can spend on answering my question! >> >> -- >> Joe -- Heriot-Watt University is a Scottish charity registered under charity number SC000278. ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july