[LLVMdev] ExecutionEngine/Interpreter/ExternalFunctions.cpp

Reid Spencer reid at x10sys.com
Tue May 11 20:29:02 PDT 2004


I mis-stated what I think should be deleted. 

The block of code from "GlobalVariable *IOB = 0;" to the end of the loop
should be delted because the only effect the loop has is on the IOB
variable and that variable is never used after the loop.

Reid.

On Tue, 2004-05-11 at 18:14, Reid Spencer wrote:
> Hi,
> 
> I'm working on bug 122, consolidating the interface to the SymbolTable
> class. In doing so, I found the function below which traverses the
> symbol table but apparently unnecessarily. Before I remove the
> traversal, I thought I better check with you guys. Posted this to the
> list because it looks like _everyone_ has edited this file :)
> 
> In the code below, the IOB variable is the only thing in the loop that
> seems to get modified. However, it is never used in the subsequent code.
> Perhaps there's some subtle usage here I'm missing.  I'd like to delete
> all the code from the start of the function to the end of the loop.
> 
> Could someone who knows check this, please?
> 
> Thanks,
> 
> Reid.
> 
> 
> static FILE *getFILE(void *Ptr) {
>   static Module *LastMod = 0;
>   static PointerTy IOBBase = 0;
>   static unsigned FILESize;
>                                                                                                                                             
>   if (LastMod != &TheInterpreter->getModule()) { // Module change or initialize?
>     Module *M = LastMod = &TheInterpreter->getModule();
>                                                                                                                                             
>     // Check to see if the currently loaded module contains an __iob symbol...
>     GlobalVariable *IOB = 0;
>     SymbolTable &ST = M->getSymbolTable();
>     for (SymbolTable::iterator I = ST.begin(), E = ST.end(); I != E; ++I) {
>       SymbolTable::VarMap &M = I->second;
>       for (SymbolTable::VarMap::iterator J = M.begin(), E = M.end();
>            J != E; ++J)
>         if (J->first == "__iob")
>           if ((IOB = dyn_cast<GlobalVariable>(J->second)))
>             break;
>       if (IOB) break;
>     }
>   }
>                                                                                                                                             
>   // Check to see if this is a reference to __iob...
>   if (IOBBase) {
>     unsigned FDNum = ((unsigned long)Ptr-IOBBase)/FILESize;
>     if (FDNum == 0)
>       return stdin;
>     else if (FDNum == 1)
>       return stdout;
>     else if (FDNum == 2)
>       return stderr;
>   }
>                                                                                                                                             
>   return (FILE*)Ptr;
> }


_______________________
Reid Spencer
President & CTO
eXtensible Systems, Inc.
rspencer at x10sys.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20040511/35056102/attachment.sig>


More information about the llvm-dev mailing list