00001 /* 00002 Copyright (C) 1997-2001 Shigeru Chiba, Tokyo Institute of Technology. 00003 00004 Permission to use, copy, distribute and modify this software and 00005 its documentation for any purpose is hereby granted without fee, 00006 provided that the above copyright notice appear in all copies and that 00007 both that copyright notice and this permission notice appear in 00008 supporting documentation. 00009 00010 Shigeru Chiba makes no representations about the suitability of this 00011 software for any purpose. It is provided "as is" without express or 00012 implied warranty. 00013 */ 00014 00015 /* 00016 Copyright (c) 1995, 1996 Xerox Corporation. 00017 All Rights Reserved. 00018 00019 Use and copying of this software and preparation of derivative works 00020 based upon this software are permitted. Any copy of this software or 00021 of any derivative work must include the above copyright notice of 00022 Xerox Corporation, this paragraph and the one after it. Any 00023 distribution of this software or derivative works must comply with all 00024 applicable United States export control laws. 00025 00026 This software is made available AS IS, and XEROX CORPORATION DISCLAIMS 00027 ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE 00028 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 00029 PURPOSE, AND NOTWITHSTANDING ANY OTHER PROVISION CONTAINED HEREIN, ANY 00030 LIABILITY FOR DAMAGES RESULTING FROM THE SOFTWARE OR ITS USE IS 00031 EXPRESSLY DISCLAIMED, WHETHER ARISING IN CONTRACT, TORT (INCLUDING 00032 NEGLIGENCE) OR STRICT LIABILITY, EVEN IF XEROX CORPORATION IS ADVISED 00033 OF THE POSSIBILITY OF SUCH DAMAGES. 00034 */ 00035 00036 #ifndef _metaclass_h 00037 #define _metaclass_h 00038 00039 #include "mop.h" 00040 00041 class Metaclass : public Class { 00042 public: 00043 Metaclass(); 00044 00045 static bool Initialize(); 00046 char* MetaclassName(); 00047 00048 void TranslateClass(Environment*); 00049 Ptree* GetFinalizer(); 00050 void CheckObsoleteness(); 00051 void ProduceInitFile(Ptree* class_name); 00052 static bool IsBuiltinMetaclass(Ptree*); 00053 void InsertInitialize(); 00054 int FindFirstNotInlinedVirtualFunction(); 00055 void TranslateMemberFunction(Environment* env, Member& m); 00056 void AppendHousekeepingCode(Environment* env, Ptree* class_name, 00057 Ptree* creator_name, Ptree* finalizer); 00058 static void Load(Ptree* metaclass_name); 00059 static void Load(char* metaclass_name, int len); 00060 static void* LoadSoLib(char* file_name); 00061 static void* LookupSymbol(void* handle, char* symbol); 00062 00063 private: 00064 Ptree* new_function_name; 00065 int first_not_inlined_vf; 00066 }; 00067 00068 extern void LoadMetaclass(char*); 00069 00070 #endif /* _metaclass_h */