#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 ); void * CallScriptFunction( ScriptFunc Func, AnyData arg0, AnyData arg1, AnyData arg2, AnyData arg3, AnyData arg4, AnyData arg5, AnyData arg6, AnyData arg7, AnyData arg8, AnyData arg9, AnyData arg10, AnyData arg11, AnyData arg12, AnyData arg13, AnyData arg14, AnyData arg15, AnyData arg16, AnyData arg17, AnyData arg18, AnyData arg19, AnyData arg20, AnyData arg21, AnyData arg22, AnyData arg23, AnyData arg24, AnyData arg25, AnyData arg26, AnyData arg27, AnyData arg28, AnyData arg29, AnyData arg30, AnyData arg31, AnyData arg32, AnyData arg33, AnyData arg34 ) ; // int CallScriptFunction( ScriptFunc, va_list ); // int CallScriptFunction( ScriptFunc, ... ); }; /////////////////////////////////////////////////////////////////////////////////// #endif