This is the mail archive of the
mailing list for the guile project.
Re: implementing data tags via object properties -- help with debugging?
- To: email@example.com (Robert Brown)
- Subject: Re: implementing data tags via object properties -- help with debugging?
- From: Russ McManus <firstname.lastname@example.org>
- Date: 07 May 1999 14:15:25 -0400
- Cc: email@example.com
- References: <firstname.lastname@example.org>
email@example.com (Robert Brown) writes:
> [Note: I'm resending this because I got no response. Perhaps my change in
> subject will attract people's attention...]
OK, I'll bite.
> I cannot get this tag stuff to work (see my message "global variables &
> data tags") and was hoping someone could help me debug it. For some
> reason, every time I call gh_get_tag_data() (see below), I receive a
> different (and seemingly random) value. And I assume that that's because
> gh_eval_str() is returning a different SCM object each time I call it,
> even if I call it with the same string.
Have you checked that you get a different value each time from
gh_eval_str()? If not, I suggest adding a printf of the SCM value,
which will determine whether this is true. From examining the code, I
think that you would get the same value each time.
One thing that I wonder about, is whether scm_intern() and
gh_eval_str() are both working in the same module. If they are, then
you should have no problem. I know that scm_intern() does it's work
in 'the-root-module'. I suspect that gh_eval_str() might do it's work
in '(guile-user)'. If so, then this could be the source of the
problem. Given my limited time at the moment, I don't want to write a
test program right now, but I suggest you give it a spin.
> I tried stepping through the code, but what the SCM/Guile
> interpreter is doing is mystifying. So, I don't understand its
> return values.
You should not need to step through the interpreter. If I understand
your question, you are trying to associate a void* with a SCM object,
and then given the SCM object, you want to be able to retreive the
I could be wrong about what you are trying to achieve, if so, please
But anyway, this can be done with a smob that wraps the void*, much as
you have done, but without the name field, which should be
unnecessary, and a weak hash table. Remember to call scm_protect_obj
on the weak hash table.
After reading some code, it appears that this is what the object
properties stuff is doing, anyway.
"Whenever you find yourself on the side of the majority, it is time to
pause and reflect."
-- Mark Twain