Main Page   Class Hierarchy   Compound List   File List   Compound Members   File Members  

nci/suif/suif2b/j2s/j2s_runtime/rt_RT.h

Go to the documentation of this file.
00001 /* -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
00002 // rt_RT.h
00003 
00004 #ifndef RT_RT_H
00005 #define RT_RT_H
00006 
00007 #include <stdlib.h>
00008 
00009 
00010 typedef void      (*ITERCLASSproc)(ClassMetadata *);
00011 typedef boolean_t (*COND_ITERCLASSproc)(ClassMetadata *);
00012 
00013 /*
00014   RT holds global methods and fields, as well as is heavily
00015   used during initialization of the language implementation.
00016 
00017   */
00018 class RT {
00019 public:
00020 
00021   // Initialize the Runtime
00022   static void init(int *argc, char **argv);
00023   // Execute main() method w/ specified arguments
00024   static void run(ClassMetadata *c, int argc, char **argv);
00025 
00026   static void      showUsage();
00027   static boolean_t isVerbose();
00028   
00029   /*
00030     Accessors that return location of java.lang.Class
00031     metadata that is built by Compiler.
00032   */
00033   static int             classMetadataNum();   // number
00034   static ClassMetadata **classMetadataAddr();  // starting addr
00035   
00036   // return a UBFSearch instance of the correct size
00037   static class UBFSearch  *newUBF();
00038 
00039   static void            dumpAllClasses();
00040 
00041   // entry point that handles a process exit
00042   static void exit(int);
00043 
00044 
00045   // Data
00046   //
00047 
00048   // total number of java.lang.Class's mananged by RTS
00049   static int classNum;
00050 
00051   
00052   // Class that manages the allocation of heap memory
00053   class Heap {
00054   public:
00055     static void *alloc(size_t byteNum);
00056     static void *alloc_atomic(size_t byteNum);
00057     static void  free(void *);
00058   private:
00059     //HIDE_NICE_CLASS(Heap)
00060       };
00061 
00062   enum {
00063     // used in Assertions
00064     RTS_FIRST_TIME = 0,
00065     RTS_NOT_IMPLEMENTED,
00066 
00067     // well-known offsets into j2s_AllClasses[]
00068     iArray = 0    //  Array metadata
00069   };
00070   
00071 private:
00072   //HIDE_NICE_CLASS(RT)
00073   
00074   static void init2();
00075   static void init1();
00076   static void initSignalHandlers();
00077   static void initSEGV();
00078   static void initClassIDs();
00079   static void initRelativeNumbering();
00080   static void init3();
00081         
00082   static void makeAllClasses();
00083   static void adjustAllClasses();
00084   static void hashAllClasses();
00085   
00086   static void internMetadataStrings();
00087   static void registerAtExitHandlers();
00088   static int  filterCargs(int argc, char **argv);
00089   static struct JArray *CargsToJavaArgs(int argc, int argStart,
00090                                         char **argv);
00091         
00092   static void assertPreInit();
00093   static void assertPostInit();
00094   static void assertGlobals();
00095 
00096   static void traverseAllClasses(ITERCLASSproc proc);
00097   static void traverseSomeClasses (COND_ITERCLASSproc proc);
00098 
00099   // 'true' if rt_Init() completed successfully
00100   static int  isSuccessfulInit;
00101   // argv[] index of target executable's args
00102   static int  argStart;
00103   // how wordy should we be ?? :)
00104   static boolean_t _isVerbose;
00105 };
00106 
00107 // value written by a successful RT::init() method
00108 #define RT_INIT_FLAG   0xcafe
00109 
00110 // ITERCLASSproc's
00111 void icClassID(ClassMetadata *);
00112 void icBuildClass(ClassMetadata *);
00113 void icInternMetadata(ClassMetadata *);
00114 void icDumpMetadata(ClassMetadata *);
00115 void icHashClass(ClassMetadata *md);
00116 void icAdjustMetaClass(ClassMetadata *md);
00117 void icRelativeNumbering(ClassMetadata *md);
00118 
00119 // COND_ITERCLASSproc's
00120 boolean_t cicFindJLClass(ClassMetadata *);
00121 boolean_t cicFindJLString(ClassMetadata *);
00122 
00123 #endif  // RT_RT_H

Generated at Mon Jul 31 13:42:09 2000 for NCI SUIF by doxygen 1.1.2 written by Dimitri van Heesch, © 1997-2000