#ifndef _VirtualMachine_H_ #define _VirtualMachine_H_ #include "STL.h" #include "BaseDef.h" class CIntermediateCode; class CSymbolTable; struct SFuncType; class CRelocTable; typedef char * va_list; /////////////////////////////////////////////////////////////////////////////////// // void RegisterAllocatedMemory( void * ); void UnregisterAllocatedMemory( void * ); /////////////////////////////////////////////////////////////////////////////////// // class CVirtualMachine { public: typedef pair FUNCINFO; typedef multimap FUNCMAP; typedef set ALLOCATED; protected: void * m_pBuffer; void * m_pGlobalVars; //Àü¿ª º¯¼ö ¹öÆÛ void * m_pStringBuffer; //m_pBuffer¿¡¼­ Const¹öÆÛ°¡ ½ÃÀ۵Ǵ ÁöÁ¡ void * m_pCodeBuffer; //m_pBuffer¿¡¼­ Code¹öÆÛ°¡ ½ÃÀ۵Ǵ ÁöÁ¡ int m_iCodeSize; FUNCMAP * m_pFunctionMap; //Ä¿½ºÅÒ ÇÔ¼öÀÇ À̸§, ÀÎÀÚ¿Í ÇÔ¼ö ¿ÀÇÁ¼Â °£ÀÇ ¸ÅÇÎ Å×À̺í CRelocTable * m_pRelocation; //Relocation Table int m_pSysVarOffset[4]; //½Ã½ºÅÛ º¯¼öµé¿¡ ´ëÇÑ ¿ÀÇÁ¼Â °ªµé. char * m_pSysVarBuffer; bool m_bRelocated; ALLOCATED * m_pAllocatedPtrs; protected: void SetSysVars(); public: CVirtualMachine(); ~CVirtualMachine(); void Create( const char * szFilename ); void Create( const void * pDataBuf, unsigned DataSize ); //¸Þ¸ð¸® ºí·°À¸·ÎºÎÅÍ »ý¼º void Create( CIntermediateCode &, CSymbolTable & ); void Destroy(); bool Save( const char * szFilename ); void Execute(); //ÀÎÀÚÀÇ ³¡¿¡ T_VOID¸¦ ²À ³Ö¾îÁÖ¾î¾ß ÇÔ!!! void RegisterFunction( ANY_FUNCTION, eDataType returnType, const char *, ... ); void RegisterFunction( ANY_FUNCTION, eDataType, const char *, va_list ); ScriptFunc GetScriptFunction( eDataType returnType, const char *, ... ); ScriptFunc GetScriptFunction( eDataType, const char *, va_list ); void * CallScriptFunction( ScriptFunc ); void * CallScriptFunction( ScriptFunc, AnyData ); void * CallScriptFunction( ScriptFunc, AnyData, AnyData ); void * CallScriptFunction( ScriptFunc, AnyData, AnyData, AnyData ); void * CallScriptFunction( ScriptFunc, AnyData, AnyData, AnyData, AnyData ); void * CallScriptFunction( ScriptFunc, AnyData args[], int nArgs ); // int CallScriptFunction( ScriptFunc, va_list ); // int CallScriptFunction( ScriptFunc, ... ); }; /////////////////////////////////////////////////////////////////////////////////// #endif