It looks like you can only do it with errors:
(new Error()).stack
Taking require() as an example (if you were in control of it) you would
make require() add the stack trace to the module before any code in the
module executes. Now within the context of the B load you find out that it
is a cycle back to A, so your require() method would do something like:
function require(arg) {
var stackInfo = getStackInfo(arg);
if (stackInfo) {
// We can do this because the 'prologue' of "A" would have populated the
stack trace in our internal modules set.
throw new CycleError(getStackInfo(arg) + " [" + arg + "] has a cyclic
dependency with [" + currentModule + "] " + (new Error()).stack;
}
}
Alternatively you could require that your components advertise their
dependencies up-front (similar to package.json). You could then discover
cycles (and load order, by the way) before running anything using Tarjan's
Strong Connected Components
Algorithm:
http://en.wikipedia.org/wiki/Tarjan's_strongly_connected_components_algorithm.
At the end of the day though getting source information for a function
could be an amazing addition for so many development cases, especially
providing useful debugging info.
On Friday, 14 December 2012 06:23:16 UTC+2, Martin Heidegger wrote:
>
> Hello everybody,
>
> I am writing on a system that should detect and resolve dependencies of
> code before executing it. So method A references method B so method B needs
> to be called before A. So far that works fine, however when I throw a
> circular dependency error message all the error message says is "[function]
> has a circular dependency to [function]"... thats very few information for
> debugging. I want to improve on that by at least displaying the line-number
> of the methods. So far I haven't found a way to do that. It should be
> possible because the VM should know where a method has been written (else
> it could not tell me the location on a stacktrace).
>
> Have I missed something? Is this worth a feature request?
>
> yours
> Martin.
>
--
Job Board: http://jobs.nodejs.org/
Posting guidelines:
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
You received this message because you are subscribed to the Google
Groups "nodejs" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en