help-3dldf
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [help-3dldf] installation problem with 3DLDF


From: Laurence Finston
Subject: Re: [help-3dldf] installation problem with 3DLDF
Date: Mon, 18 Feb 2008 14:07:11 +0100 (CET)

On Mon, 18 Feb 2008, address@hidden wrote:

> My mistake.  I forgot to insert the appropriate code at the beginning of
> `~Complex'.  It's in `prelims.web', but there are a few lines that need to
> be deleted.  I'll fix it and upload new versions in a few minutes.

I've fixed it.  It works on my system, but it shouldn't.  You're probably 
using a newer version of GCC which catches the error.  If you get it 
again, it can probably be fixed by inserting the code found in 
`prelims.web', which should be more-or-less self-explanatory, at the 
beginning of the function that fails to compile.  

There is some conditionally compiled code in `prelims.web' that should be 
deleted or commented-out, depending on the arguments of the function.  
There are comments indicating this code.

Many functions in 3DLDF take a `Scanner_Node scanner_node' argument.  The 
`Scanner_Node' is the parameter passed to `yyparse' and `yylex', the 
parser and scanner functions, respectively.  A single run of 3DLDF can
have multiple "parses", i.e., calls to `yyparse', in different
threads.  `yyparse' and `yylex' must therefore be reentrant and cannot
contain static local variables.  That is one reason for
`Scanner_Nodes'.  In addition, a `Scanner_Node' stores the state of a 
single parse.  That is, it stores the information about what variables
have been declared by the user and the values they contain, etc.

Some functions, such as `yyparse' and `yylex' themselves, take a
`void*' argument which points to a `Scanner_Type' object.
`Scanner_Node' is just a typedef for `Scanner_Type*'.

Other functions don't take either kind of argument, but the
`Scanner_Type' object for that thread can be recovered from "thread
specific data".  You can look up how this works in `pspglb.web'.
Search for `struct Thread_Info_Type'.  It wraps the data type
`pthread_key_t' and several functions from the `pthread' (Posix
thread) library.  If you don't know about this, there are man pages
for `pthread_getspecific', `pthread_key_create', etc.

Laurence




reply via email to

[Prev in Thread] Current Thread [Next in Thread]