[LLVMdev] ExecutionEngine/Interpreter/ExternalFunctions.cpp

Chris Lattner sabre at nondot.org
Tue May 11 20:59:01 PDT 2004


On Tue, 11 May 2004, Reid Spencer wrote:

> 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.

Yeah, that code can be deleted.  The "__iob" emulation code has been
removed and that must have been missed.

Thanks Reid!

-Chris

> 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
>

-Chris

-- 
http://llvm.cs.uiuc.edu/
http://www.nondot.org/~sabre/Projects/




More information about the llvm-dev mailing list