1 module as.def;
2 
3 enum ANGELSCRIPT_VERSION = 23400;
4 
5 extern(C) {
6 	struct asIScriptEngine;
7 	struct asIScriptModule;
8 	struct asIScriptContext;
9 	struct asIScriptGeneric;
10 	struct asIScriptObject;
11 	struct asITypeInfo;
12 	struct asIScriptFunction;
13 	struct asIBinaryStream;
14 	struct asIJITCompiler;
15 	struct asIThreadManager;
16 	struct asILockableSharedBool;
17 }
18 
19 enum asERetCodes {
20 	asSUCCESS                              =  0,
21 	asERROR                                = -1,
22 	asCONTEXT_ACTIVE                       = -2,
23 	asCONTEXT_NOT_FINISHED                 = -3,
24 	asCONTEXT_NOT_PREPARED                 = -4,
25 	asINVALID_ARG                          = -5,
26 	asNO_FUNCTION                          = -6,
27 	asNOT_SUPPORTED                        = -7,
28 	asINVALID_NAME                         = -8,
29 	asNAME_TAKEN                           = -9,
30 	asINVALID_DECLARATION                  = -10,
31 	asINVALID_OBJECT                       = -11,
32 	asINVALID_TYPE                         = -12,
33 	asALREADY_REGISTERED                   = -13,
34 	asMULTIPLE_FUNCTIONS                   = -14,
35 	asNO_MODULE                            = -15,
36 	asNO_GLOBAL_VAR                        = -16,
37 	asINVALID_CONFIGURATION                = -17,
38 	asINVALID_INTERFACE                    = -18,
39 	asCANT_BIND_ALL_FUNCTIONS              = -19,
40 	asLOWER_ARRAY_DIMENSION_NOT_REGISTERED = -20,
41 	asWRONG_CONFIG_GROUP                   = -21,
42 	asCONFIG_GROUP_IS_IN_USE               = -22,
43 	asILLEGAL_BEHAVIOUR_FOR_TYPE           = -23,
44 	asWRONG_CALLING_CONV                   = -24,
45 	asBUILD_IN_PROGRESS                    = -25,
46 	asINIT_GLOBAL_VARS_FAILED              = -26,
47 	asOUT_OF_MEMORY                        = -27,
48 	asMODULE_IS_IN_USE                     = -28
49 }
50 
51 enum asEEngineProp
52 {
53 	asEP_ALLOW_UNSAFE_REFERENCES            = 1,
54 	asEP_OPTIMIZE_BYTECODE                  = 2,
55 	asEP_COPY_SCRIPT_SECTIONS               = 3,
56 	asEP_MAX_STACK_SIZE                     = 4,
57 	asEP_USE_CHARACTER_LITERALS             = 5,
58 	asEP_ALLOW_MULTILINE_STRINGS            = 6,
59 	asEP_ALLOW_IMPLICIT_HANDLE_TYPES        = 7,
60 	asEP_BUILD_WITHOUT_LINE_CUES            = 8,
61 	asEP_INIT_GLOBAL_VARS_AFTER_BUILD       = 9,
62 	asEP_REQUIRE_ENUM_SCOPE                 = 10,
63 	asEP_SCRIPT_SCANNER                     = 11,
64 	asEP_INCLUDE_JIT_INSTRUCTIONS           = 12,
65 	asEP_STRING_ENCODING                    = 13,
66 	asEP_PROPERTY_ACCESSOR_MODE             = 14,
67 	asEP_EXPAND_DEF_ARRAY_TO_TMPL           = 15,
68 	asEP_AUTO_GARBAGE_COLLECT               = 16,
69 	asEP_DISALLOW_GLOBAL_VARS               = 17,
70 	asEP_ALWAYS_IMPL_DEFAULT_CONSTRUCT      = 18,
71 	asEP_COMPILER_WARNINGS                  = 19,
72 	asEP_DISALLOW_VALUE_ASSIGN_FOR_REF_TYPE = 20,
73 	asEP_ALTER_SYNTAX_NAMED_ARGS            = 21,
74 	asEP_DISABLE_INTEGER_DIVISION           = 22,
75 	asEP_DISALLOW_EMPTY_LIST_ELEMENTS       = 23,
76 	asEP_PRIVATE_PROP_AS_PROTECTED          = 24,
77 	asEP_ALLOW_UNICODE_IDENTIFIERS          = 25,
78 	asEP_HEREDOC_TRIM_MODE                  = 26,
79 
80 	asEP_LAST_PROPERTY
81 }
82 
83 enum DCallConv = asECallConvTypes.asCALL_CDECL;
84 enum DCallConvClass = asECallConvTypes.asCALL_CDECL_OBJLAST;
85 enum DCallConvClassR = asECallConvTypes.asCALL_CDECL_OBJFIRST;
86 
87 enum asECallConvTypes
88 {
89 	asCALL_CDECL             = 0,
90 	asCALL_STDCALL           = 1,
91 	asCALL_THISCALL_ASGLOBAL = 2,
92 	asCALL_THISCALL          = 3,
93 	asCALL_CDECL_OBJLAST     = 4,
94 	asCALL_CDECL_OBJFIRST    = 5,
95 	asCALL_GENERIC           = 6,
96 	asCALL_THISCALL_OBJLAST  = 7,
97 	asCALL_THISCALL_OBJFIRST = 8
98 }
99 
100 enum asEObjTypeFlags
101 {
102 	asOBJ_REF                        = (1<<0),
103 	asOBJ_VALUE                      = (1<<1),
104 	asOBJ_GC                         = (1<<2),
105 	asOBJ_POD                        = (1<<3),
106 	asOBJ_NOHANDLE                   = (1<<4),
107 	asOBJ_SCOPED                     = (1<<5),
108 	asOBJ_TEMPLATE                   = (1<<6),
109 	asOBJ_ASHANDLE                   = (1<<7),
110 	asOBJ_APP_CLASS                  = (1<<8),
111 	asOBJ_APP_CLASS_CONSTRUCTOR      = (1<<9),
112 	asOBJ_APP_CLASS_DESTRUCTOR       = (1<<10),
113 	asOBJ_APP_CLASS_ASSIGNMENT       = (1<<11),
114 	asOBJ_APP_CLASS_COPY_CONSTRUCTOR = (1<<12),
115 	asOBJ_APP_CLASS_C                = (asOBJ_APP_CLASS + asOBJ_APP_CLASS_CONSTRUCTOR),
116 	asOBJ_APP_CLASS_CD               = (asOBJ_APP_CLASS + asOBJ_APP_CLASS_CONSTRUCTOR + asOBJ_APP_CLASS_DESTRUCTOR),
117 	asOBJ_APP_CLASS_CA               = (asOBJ_APP_CLASS + asOBJ_APP_CLASS_CONSTRUCTOR + asOBJ_APP_CLASS_ASSIGNMENT),
118 	asOBJ_APP_CLASS_CK               = (asOBJ_APP_CLASS + asOBJ_APP_CLASS_CONSTRUCTOR + asOBJ_APP_CLASS_COPY_CONSTRUCTOR),
119 	asOBJ_APP_CLASS_CDA              = (asOBJ_APP_CLASS + asOBJ_APP_CLASS_CONSTRUCTOR + asOBJ_APP_CLASS_DESTRUCTOR + asOBJ_APP_CLASS_ASSIGNMENT),
120 	asOBJ_APP_CLASS_CDK              = (asOBJ_APP_CLASS + asOBJ_APP_CLASS_CONSTRUCTOR + asOBJ_APP_CLASS_DESTRUCTOR + asOBJ_APP_CLASS_COPY_CONSTRUCTOR),
121 	asOBJ_APP_CLASS_CAK              = (asOBJ_APP_CLASS + asOBJ_APP_CLASS_CONSTRUCTOR + asOBJ_APP_CLASS_ASSIGNMENT + asOBJ_APP_CLASS_COPY_CONSTRUCTOR),
122 	asOBJ_APP_CLASS_CDAK             = (asOBJ_APP_CLASS + asOBJ_APP_CLASS_CONSTRUCTOR + asOBJ_APP_CLASS_DESTRUCTOR + asOBJ_APP_CLASS_ASSIGNMENT + asOBJ_APP_CLASS_COPY_CONSTRUCTOR),
123 	asOBJ_APP_CLASS_D                = (asOBJ_APP_CLASS + asOBJ_APP_CLASS_DESTRUCTOR),
124 	asOBJ_APP_CLASS_DA               = (asOBJ_APP_CLASS + asOBJ_APP_CLASS_DESTRUCTOR + asOBJ_APP_CLASS_ASSIGNMENT),
125 	asOBJ_APP_CLASS_DK               = (asOBJ_APP_CLASS + asOBJ_APP_CLASS_DESTRUCTOR + asOBJ_APP_CLASS_COPY_CONSTRUCTOR),
126 	asOBJ_APP_CLASS_DAK              = (asOBJ_APP_CLASS + asOBJ_APP_CLASS_DESTRUCTOR + asOBJ_APP_CLASS_ASSIGNMENT + asOBJ_APP_CLASS_COPY_CONSTRUCTOR),
127 	asOBJ_APP_CLASS_A                = (asOBJ_APP_CLASS + asOBJ_APP_CLASS_ASSIGNMENT),
128 	asOBJ_APP_CLASS_AK               = (asOBJ_APP_CLASS + asOBJ_APP_CLASS_ASSIGNMENT + asOBJ_APP_CLASS_COPY_CONSTRUCTOR),
129 	asOBJ_APP_CLASS_K                = (asOBJ_APP_CLASS + asOBJ_APP_CLASS_COPY_CONSTRUCTOR),
130 	asOBJ_APP_PRIMITIVE              = (1<<13),
131 	asOBJ_APP_FLOAT                  = (1<<14),
132 	asOBJ_APP_ARRAY                  = (1<<15),
133 	asOBJ_APP_CLASS_ALLINTS          = (1<<16),
134 	asOBJ_APP_CLASS_ALLFLOATS        = (1<<17),
135 	asOBJ_NOCOUNT                    = (1<<18),
136 	asOBJ_APP_CLASS_ALIGN8           = (1<<19),
137 	asOBJ_IMPLICIT_HANDLE            = (1<<20),
138 	asOBJ_MASK_VALID_FLAGS           = 0x1FFFFF,
139 	// Internal flags
140 	asOBJ_SCRIPT_OBJECT              = (1<<21),
141 	asOBJ_SHARED                     = (1<<22),
142 	asOBJ_NOINHERIT                  = (1<<23),
143 	asOBJ_FUNCDEF                    = (1<<24),
144 	asOBJ_LIST_PATTERN               = (1<<25),
145 	asOBJ_ENUM                       = (1<<26),
146 	asOBJ_TEMPLATE_SUBTYPE           = (1<<27),
147 	asOBJ_TYPEDEF                    = (1<<28),
148 	asOBJ_ABSTRACT                   = (1<<29),
149 	asOBJ_APP_ALIGN16                = (1<<30)
150 }
151 
152 enum asEBehaviours
153 {
154 	// Value object memory management
155 	asBEHAVE_CONSTRUCT,
156 	asBEHAVE_LIST_CONSTRUCT,
157 	asBEHAVE_DESTRUCT,
158 
159 	// Reference object memory management
160 	asBEHAVE_FACTORY,
161 	asBEHAVE_LIST_FACTORY,
162 	asBEHAVE_ADDREF,
163 	asBEHAVE_RELEASE,
164 	asBEHAVE_GET_WEAKREF_FLAG,
165 
166 	// Object operators
167 	asBEHAVE_TEMPLATE_CALLBACK,
168 
169 	// Garbage collection behaviours
170 	asBEHAVE_FIRST_GC,
171 	 asBEHAVE_GETREFCOUNT = asBEHAVE_FIRST_GC,
172 	 asBEHAVE_SETGCFLAG,
173 	 asBEHAVE_GETGCFLAG,
174 	 asBEHAVE_ENUMREFS,
175 	 asBEHAVE_RELEASEREFS,
176 	asBEHAVE_LAST_GC = asBEHAVE_RELEASEREFS,
177 
178 	asBEHAVE_MAX
179 }
180 
181 enum asEContextState
182 {
183 	asEXECUTION_FINISHED      = 0,
184 	asEXECUTION_SUSPENDED     = 1,
185 	asEXECUTION_ABORTED       = 2,
186 	asEXECUTION_EXCEPTION     = 3,
187 	asEXECUTION_PREPARED      = 4,
188 	asEXECUTION_UNINITIALIZED = 5,
189 	asEXECUTION_ACTIVE        = 6,
190 	asEXECUTION_ERROR         = 7
191 }
192 
193 enum asEMsgType
194 {
195 	asMSGTYPE_ERROR       = 0,
196 	asMSGTYPE_WARNING     = 1,
197 	asMSGTYPE_INFORMATION = 2
198 }
199 
200 enum asEGCFlags
201 {
202 	asGC_FULL_CYCLE      = 1,
203 	asGC_ONE_STEP        = 2,
204 	asGC_DESTROY_GARBAGE = 4,
205 	asGC_DETECT_GARBAGE  = 8
206 }
207 
208 enum asETokenClass
209 {
210 	asTC_UNKNOWN    = 0,
211 	asTC_KEYWORD    = 1,
212 	asTC_VALUE      = 2,
213 	asTC_IDENTIFIER = 3,
214 	asTC_COMMENT    = 4,
215 	asTC_WHITESPACE = 5
216 }
217 
218 enum asETypeIdFlags
219 {
220 	asTYPEID_VOID           = 0,
221 	asTYPEID_BOOL           = 1,
222 	asTYPEID_INT8           = 2,
223 	asTYPEID_INT16          = 3,
224 	asTYPEID_INT32          = 4,
225 	asTYPEID_INT64          = 5,
226 	asTYPEID_UINT8          = 6,
227 	asTYPEID_UINT16         = 7,
228 	asTYPEID_UINT32         = 8,
229 	asTYPEID_UINT64         = 9,
230 	asTYPEID_FLOAT          = 10,
231 	asTYPEID_DOUBLE         = 11,
232 	asTYPEID_OBJHANDLE      = 0x40000000,
233 	asTYPEID_HANDLETOCONST  = 0x20000000,
234 	asTYPEID_MASK_OBJECT    = 0x1C000000,
235 	asTYPEID_APPOBJECT      = 0x04000000,
236 	asTYPEID_SCRIPTOBJECT   = 0x08000000,
237 	asTYPEID_TEMPLATE       = 0x10000000,
238 	asTYPEID_MASK_SEQNBR    = 0x03FFFFFF
239 }
240 
241 enum asETypeModifiers
242 {
243 	asTM_NONE     = 0,
244 	asTM_INREF    = 1,
245 	asTM_OUTREF   = 2,
246 	asTM_INOUTREF = 3,
247 	asTM_CONST    = 4
248 }
249 
250 enum asEGMFlags
251 {
252 	asGM_ONLY_IF_EXISTS       = 0,
253 	asGM_CREATE_IF_NOT_EXISTS = 1,
254 	asGM_ALWAYS_CREATE        = 2
255 }
256 
257 enum
258 {
259 	asCOMP_ADD_TO_MODULE = 1
260 }
261 
262 enum asEFuncType
263 {
264 	asFUNC_DUMMY     =-1,
265 	asFUNC_SYSTEM    = 0,
266 	asFUNC_SCRIPT    = 1,
267 	asFUNC_INTERFACE = 2,
268 	asFUNC_VIRTUAL   = 3,
269 	asFUNC_FUNCDEF   = 4,
270 	asFUNC_IMPORTED  = 5,
271 	asFUNC_DELEGATE  = 6
272 }
273 
274 alias asBYTE = ubyte;
275 alias asWORD = ushort;
276 alias asDWORD = uint;
277 alias asQWORD = ulong;
278 alias asPWORD = size_t;
279 alias asINT64 = long;
280 alias asBOOL = bool;
281 alias asUINT = uint;
282 
283 @system extern(C) {
284 	alias asFUNCTION_t 					= void function();
285 	alias asBINARYREADFUNC_t 			= void function(void* ptr, asUINT size, void* param);
286 	alias asBINARYWRITEFUNC_t 			= void function(const(void)* ptr, asUINT size, void* param);
287 	alias asGENFUNC_t 					= void function(asIScriptGeneric*);
288 	alias asALLOCFUNC_t 				= void* function(size_t);
289 	alias asFREEFUNC_t 					= void function(void*);
290 	alias asCLEANENGINEFUNC_t 			= void function(asIScriptEngine*);
291 	alias asCLEANMODULEFUNC_t 			= void function(asIScriptModule*);
292 	alias asCLEANCONTEXTFUNC_t 			= void function(asIScriptContext*);
293 	alias asCLEANFUNCTIONFUNC_t 		= void function(asIScriptFunction*);
294 	alias asCLEANTYPEINFOFUNC_t 		= void function(asITypeInfo*);
295 	alias asCLEANSCRIPTOBJECTFUNC_t 	= void function(asIScriptObject*);
296 	alias asREQUESTCONTEXTFUNC_t 		= asIScriptContext* function(asIScriptEngine*, void*);
297 	alias asRETURNCONTEXTFUNC_t 		= void function(asIScriptEngine*, asIScriptContext*, void*);
298 	alias asMESSAGECALLBACKFUNC_t 		= void function(asSMessageInfo* msg, void*);
299 
300 	alias asGETSTRINGCONSTFUNC_t		= void* function(const(char)* data, asUINT length);
301 	alias asRELEASESTRINGCONSTFUNC_t 	= int function(const(void)* str);
302 	alias asGETRAWSTRINGDATAFUNC_t		= int function(const(void)* str, char* data, asUINT* length);
303 }
304 
305 struct asSMessageInfo {
306 	const(char)* 	section;
307 	int				row;
308 	int				col;
309 	asEMsgType		type;
310 	const(char)*	message;
311 }
312 
313 @trusted extern(C) {
314 	// Engine
315 	asIScriptEngine *asCreateScriptEngine(asDWORD version_);
316 	const(char)      *asGetLibraryVersion();
317 	const(char)      *asGetLibraryOptions();
318 
319 	// Context
320 	asIScriptContext *asGetActiveContext();
321 
322 	// Thread support
323 	int               asPrepareMultithread(asIThreadManager *externalMgr);
324 	void              asUnprepareMultithread();
325 	asIThreadManager* asGetThreadManager();
326 	void              asAcquireExclusiveLock();
327 	void              asReleaseExclusiveLock();
328 	void              asAcquireSharedLock();
329 	void              asReleaseSharedLock();
330 	int               asAtomicInc(ref int value);
331 	int               asAtomicDec(ref int value);
332 	int               asThreadCleanup();
333 
334 	// Memory management
335 	int   asSetGlobalMemoryFunctions(asALLOCFUNC_t allocFunc, asFREEFUNC_t freeFunc);
336 	int   asResetGlobalMemoryFunctions();
337 	void *asAllocMem(size_t size);
338 	void  asFreeMem(void *mem);
339 
340 	// Auxiliary
341 	asILockableSharedBool *asCreateLockableSharedBool();
342 
343 	///////////////////////////////////////////
344 	// asIScriptEngine
345 	
346 	// Memory management
347 	int                asEngine_AddRef(asIScriptEngine *e);
348 	int                asEngine_Release(asIScriptEngine *e);
349 	int                asEngine_ShutDownAndRelease(asIScriptEngine *e);
350 
351 	// Engine properties
352 	int                asEngine_SetEngineProperty(asIScriptEngine *e, asEEngineProp property, asPWORD value);
353 	asPWORD            asEngine_GetEngineProperty(asIScriptEngine *e, asEEngineProp property);
354 
355 	// Compiler messages
356 	int                asEngine_SetMessageCallback(asIScriptEngine *e, asFUNCTION_t callback, void *obj, asDWORD callConv);
357 	int                asEngine_ClearMessageCallback(asIScriptEngine *e);
358 	int                asEngine_WriteMessage(asIScriptEngine *e, const(char) *section, int row, int col, asEMsgType type, const(char) *message);
359 
360 	// JIT Compiler
361 	int                asEngine_SetJITCompiler(asIScriptEngine *e, asIJITCompiler *compiler);
362 	asIJITCompiler *   asEngine_GetJITCompiler(asIScriptEngine *e);
363 
364 	// Global functions
365 	int                asEngine_RegisterGlobalFunction(asIScriptEngine *e, const(char) *declaration, asFUNCTION_t funcPointer, asDWORD callConv, void *auxiliary);
366 	asUINT             asEngine_GetGlobalFunctionCount(asIScriptEngine *e);
367 	asIScriptFunction* asEngine_GetGlobalFunctionByIndex(asIScriptEngine *e, asUINT index);
368 	asIScriptFunction* asEngine_GetGlobalFunctionByDecl(asIScriptEngine *e, const(char) *declaration);
369 
370 	// Global properties
371 	int                asEngine_RegisterGlobalProperty(asIScriptEngine *e, const(char) *declaration, void *pointer);
372 	asUINT             asEngine_GetGlobalPropertyCount(asIScriptEngine *e);
373 	int                asEngine_GetGlobalPropertyByIndex(asIScriptEngine *e, asUINT index, const(char) **name, const(char) **nameSpace, int *typeId, asBOOL *isConst, const(char) **configGroup, void **pointer, asDWORD *accessMask);
374 	int                asEngine_GetGlobalPropertyIndexByName(asIScriptEngine *e, const(char) *name);
375 	int                asEngine_GetGlobalPropertyIndexByDecl(asIScriptEngine *e, const(char) *decl);
376 
377 	// Object types
378 	int                asEngine_RegisterObjectType(asIScriptEngine *e, const(char) *name, int byteSize, asDWORD flags);
379 	int                asEngine_RegisterObjectProperty(asIScriptEngine *e, const(char) *obj, const(char) *declaration, int byteOffset);
380 	int                asEngine_RegisterObjectMethod(asIScriptEngine *e, const(char) *obj, const(char) *declaration, asFUNCTION_t funcPointer, asDWORD callConv, void *auxiliary);
381 	int                asEngine_RegisterObjectBehaviour(asIScriptEngine *e, const(char) *datatype, asEBehaviours behaviour, const(char) *declaration, asFUNCTION_t funcPointer, asDWORD callConv, void *auxiliary);
382 	int                asEngine_RegisterInterface(asIScriptEngine *e, const(char) *name);
383 	int                asEngine_RegisterInterfaceMethod(asIScriptEngine *e, const(char) *intf, const(char) *declaration);
384 	asUINT             asEngine_GetObjectTypeCount(asIScriptEngine *e);
385 	asITypeInfo *      asEngine_GetObjectTypeByIndex(asIScriptEngine *e, asUINT index);
386 
387 	// String factory
388 	int                asEngine_RegisterStringFactory(asIScriptEngine *e, const(char) *datatype, asGETSTRINGCONSTFUNC_t getStr, asRELEASESTRINGCONSTFUNC_t releaseStr, asGETRAWSTRINGDATAFUNC_t getRawStr);
389 	int                asEngine_GetStringFactoryReturnTypeId(asIScriptEngine *e, asDWORD *flags);
390 
391 	// Default array type
392 	int                asEngine_RegisterDefaultArrayType(asIScriptEngine *e, const(char) *type);
393 	int                asEngine_GetDefaultArrayTypeId(asIScriptEngine *e);
394 
395 	// Enums
396 	int                asEngine_RegisterEnum(asIScriptEngine *e, const(char) *type);
397 	int                asEngine_RegisterEnumValue(asIScriptEngine *e, const(char) *type, const(char) *name, int value);
398 	asUINT             asEngine_GetEnumCount(asIScriptEngine *e);
399 	asITypeInfo *      asEngine_GetEnumByIndex(asIScriptEngine *e, asUINT index);
400 
401 	// Funcdefs
402 	int                asEngine_RegisterFuncdef(asIScriptEngine *e, const(char) *decl);
403 	asUINT             asEngine_GetFuncdefCount(asIScriptEngine *e);
404 	asITypeInfo *      asEngine_GetFuncdefByIndex(asIScriptEngine *e, asUINT index);
405 
406 	// Typedefs
407 	int                asEngine_RegisterTypedef(asIScriptEngine *e, const(char) *type, const(char) *decl);
408 	asUINT             asEngine_GetTypedefCount(asIScriptEngine *e);
409 	asITypeInfo *      asEngine_GetTypedefByIndex(asIScriptEngine *e, asUINT index);
410 
411 	// Configuration groups
412 	int                asEngine_BeginConfigGroup(asIScriptEngine *e, const(char) *groupName);
413 	int                asEngine_EndConfigGroup(asIScriptEngine *e);
414 	int                asEngine_RemoveConfigGroup(asIScriptEngine *e, const(char) *groupName);
415 	asDWORD            asEngine_SetDefaultAccessMask(asIScriptEngine *e, asDWORD defaultMask);
416 	int                asEngine_SetDefaultNamespace(asIScriptEngine *e, const(char) *nameSpace);
417 	const(char) *       asEngine_GetDefaultNamespace(asIScriptEngine *e);
418 
419 	// Script modules
420 	asIScriptModule *  asEngine_GetModule(asIScriptEngine *e, const(char)* module_, asEGMFlags flag);
421 	int                asEngine_DiscardModule(asIScriptEngine *e, const(char)* module_);
422 	asUINT             asEngine_GetModuleCount(asIScriptEngine *e);
423 	asIScriptModule *  asEngine_GetModuleByIndex(asIScriptEngine *e, asUINT index);
424 
425 	// Script functions
426 	asIScriptFunction *asEngine_GetFunctionById(asIScriptEngine *e, int funcId);
427 
428 	// Type identification
429 	int                asEngine_GetTypeIdByDecl(asIScriptEngine *e, const(char) *decl);
430 	const(char) *       asEngine_GetTypeDeclaration(asIScriptEngine *e, int typeId, asBOOL includeNamespace);
431 	int                asEngine_GetSizeOfPrimitiveType(asIScriptEngine *e, int typeId);
432 	asITypeInfo   *asEngine_GetTypeInfoById(asIScriptEngine *e, int typeId);
433 	asITypeInfo   *asEngine_GetTypeInfoByName(asIScriptEngine *e, const(char) *name);
434 	asITypeInfo   *asEngine_GetTypeInfoByDecl(asIScriptEngine *e, const(char) *decl);
435 
436 	// Script execution
437 	asIScriptContext *     asEngine_CreateContext(asIScriptEngine *e);
438 	void *                 asEngine_CreateScriptObject(asIScriptEngine *e, asITypeInfo *type);
439 	void *                 asEngine_CreateScriptObjectCopy(asIScriptEngine *e, void *obj, asITypeInfo *type);
440 	void *                 asEngine_CreateUninitializedScriptObject(asIScriptEngine *e, asITypeInfo *type);
441 	asIScriptFunction *    asEngine_CreateDelegate(asIScriptEngine *e, asIScriptFunction *func, void *obj);
442 	int                    asEngine_AssignScriptObject(asIScriptEngine *e, void *dstObj, void *srcObj, asITypeInfo *type);
443 	void                   asEngine_ReleaseScriptObject(asIScriptEngine *e, void *obj, asITypeInfo *type);
444 	void                   asEngine_AddRefScriptObject(asIScriptEngine *e, void *obj, asITypeInfo *type);
445 	int                    asEngine_RefCastObject(asIScriptEngine *e, void *obj, asITypeInfo *fromType, asITypeInfo *toType, void **newPtr, bool useOnlyImplicitCast);
446 	asILockableSharedBool *asEngine_GetWeakRefFlagOfScriptObject(asIScriptEngine *e, void *obj, asITypeInfo *type);
447 
448 	// Context pooling
449 	asIScriptContext      *asEngine_RequestContext(asIScriptEngine *e);
450 	void                   asEngine_ReturnContext(asIScriptEngine *e, asIScriptContext *ctx);
451 	int                    asEngine_SetContextCallbacks(asIScriptEngine *e, asREQUESTCONTEXTFUNC_t requestCtx, asRETURNCONTEXTFUNC_t returnCtx, void *param);
452 
453 	// String interpretation
454 	asETokenClass      asEngine_ParseToken(asIScriptEngine *e, const(char) *string, size_t stringLength, asUINT *tokenLength);
455 
456 	// Garbage collection
457 	int                asEngine_GarbageCollect(asIScriptEngine *e, asDWORD flags);
458 	void               asEngine_GetGCStatistics(asIScriptEngine *e, asUINT *currentSize, asUINT *totalDestroyed, asUINT *totalDetected, asUINT *newObjects, asUINT *totalNewDestroyed);
459 	int                asEngine_NotifyGarbageCollectorOfNewObject(asIScriptEngine *e, void *obj, asITypeInfo *type);
460 	int                asEngine_GetObjectInGC(asIScriptEngine *e, asUINT idx, asUINT *seqNbr, void **obj, asITypeInfo **type);
461 	void               asEngine_GCEnumCallback(asIScriptEngine *e, void *obj);
462 
463 	// User data
464 	void *             asEngine_SetUserData(asIScriptEngine *e, void *data, asPWORD type);
465 	void *             asEngine_GetUserData(asIScriptEngine *e, asPWORD type);
466 	void               asEngine_SetEngineUserDataCleanupCallback(asIScriptEngine *e, asCLEANENGINEFUNC_t callback, asPWORD type);
467 	void               asEngine_SetModuleUserDataCleanupCallback(asIScriptEngine *e, asCLEANMODULEFUNC_t callback);
468 	void               asEngine_SetContextUserDataCleanupCallback(asIScriptEngine *e, asCLEANCONTEXTFUNC_t callback);
469 	void               asEngine_SetFunctionUserDataCleanupCallback(asIScriptEngine *e, asCLEANFUNCTIONFUNC_t callback);
470 	void               asEngine_SetTypeInfoUserDataCleanupCallback(asIScriptEngine *e, asCLEANTYPEINFOFUNC_t callback, asPWORD type);
471 	void               asEngine_SetScriptObjectUserDataCleanupCallback(asIScriptEngine *e, asCLEANSCRIPTOBJECTFUNC_t callback, asPWORD type);
472 
473 	///////////////////////////////////////////
474 	// asIScriptModule
475 
476 	asIScriptEngine   *asModule_GetEngine(asIScriptModule *m);
477 	void               asModule_SetName(asIScriptModule *m, const(char) *name);
478 	const(char)        *asModule_GetName(asIScriptModule *m); 
479 	void               asModule_Discard(asIScriptModule *m);
480 
481 	// Compilation
482 	int                asModule_AddScriptSection(asIScriptModule *m, const(char) *name, const(char) *code, size_t codeLength, int lineOffset);
483 	int                asModule_Build(asIScriptModule *m);
484 	int                asModule_CompileFunction(asIScriptModule *m, const(char) *sectionName, const(char) *code, int lineOffset, asDWORD compileFlags, asIScriptFunction **outFunc);
485 	int                asModule_CompileGlobalVar(asIScriptModule *m, const(char) *sectionName, const(char) *code, int lineOffset);
486 	asDWORD            asModule_SetAccessMask(asIScriptModule *m, asDWORD accessMask);
487 	int                asModule_SetDefaultNamespace(asIScriptModule *m,const(char) *nameSpace);
488 	const(char)        *asModule_GetDefaultNamespace(asIScriptModule *m);
489 
490 	// Functions
491 	asUINT             asModule_GetFunctionCount(asIScriptModule *m);
492 	asIScriptFunction *asModule_GetFunctionByIndex(asIScriptModule *m, asUINT index);
493 	asIScriptFunction *asModule_GetFunctionByDecl(asIScriptModule *m, const(char) *decl);
494 	asIScriptFunction *asModule_GetFunctionByName(asIScriptModule *m, const(char) *name); 
495 	int                asModule_RemoveFunction(asIScriptModule *m, asIScriptFunction *func);
496 
497 	// Global variables
498 	int                asModule_ResetGlobalVars(asIScriptModule *m, asIScriptContext *ctx);
499 	asUINT             asModule_GetGlobalVarCount(asIScriptModule *m);
500 	int                asModule_GetGlobalVarIndexByName(asIScriptModule *m, const(char) *name);
501 	int                asModule_GetGlobalVarIndexByDecl(asIScriptModule *m, const(char) *decl);
502 	const(char)        *asModule_GetGlobalVarDeclaration(asIScriptModule *m, asUINT index, asBOOL includeNamespace);
503 	int                asModule_GetGlobalVar(asIScriptModule *m, asUINT index, const(char) **name, const(char) **nameSpace, int *typeId, asBOOL *isConst);
504 	void              *asModule_GetAddressOfGlobalVar(asIScriptModule *m, asUINT index);
505 	int                asModule_RemoveGlobalVar(asIScriptModule *m, asUINT index);
506 
507 	// Type identification
508 	asUINT             asModule_GetObjectTypeCount(asIScriptModule *m);
509 	asITypeInfo       *asModule_GetObjectTypeByIndex(asIScriptModule *m, asUINT index);
510 	int                asModule_GetTypeIdByDecl(asIScriptModule *m, const(char) *decl);
511 	asITypeInfo       *asModule_GetTypeInfoByName(asIScriptModule *m, const(char) *name);
512 	asITypeInfo       *asModule_GetTypeInfoByDecl(asIScriptModule *m, const(char) *decl);
513 
514 	// Enums
515 	asUINT             asModule_GetEnumCount(asIScriptModule *m);
516 	asITypeInfo *      asModule_GetEnumByIndex(asIScriptModule *m, asUINT index);
517 
518 	// Typedefs
519 	asUINT             asModule_GetTypedefCount(asIScriptModule *m);
520 	asITypeInfo *      asModule_GetTypedefByIndex(asIScriptModule *m, asUINT index);
521 
522 	// Dynamic binding between modules
523 	asUINT             asModule_GetImportedFunctionCount(asIScriptModule *m);
524 	int                asModule_GetImportedFunctionIndexByDecl(asIScriptModule *m, const(char) *decl);
525 	const(char)        *asModule_GetImportedFunctionDeclaration(asIScriptModule *m, asUINT importIndex);
526 	const(char)        *asModule_GetImportedFunctionSourceModule(asIScriptModule *m, asUINT importIndex);
527 	int                asModule_BindImportedFunction(asIScriptModule *m, asUINT importIndex, asIScriptFunction *func);
528 	int                asModule_UnbindImportedFunction(asIScriptModule *m, asUINT importIndex);
529 	int                asModule_BindAllImportedFunctions(asIScriptModule *m);
530 	int                asModule_UnbindAllImportedFunctions(asIScriptModule *m);
531 
532 	// Bytecode saving and loading
533 	int                asModule_SaveByteCode(asIScriptModule *m, asIBinaryStream* out_, asBOOL stripDebugInfo);
534 	int                asModule_LoadByteCode(asIScriptModule *m, asIBinaryStream* in_, asBOOL *wasDebugInfoStripped);
535 
536 	// User data
537 	void              *asModule_SetUserData(asIScriptModule *m, void *data);
538 	void              *asModule_GetUserData(asIScriptModule *m);
539 
540 	///////////////////////////////////////////
541 	// asIScriptContext
542 
543 	// Memory management
544 	int              asContext_AddRef(asIScriptContext *c);
545 	int              asContext_Release(asIScriptContext *c);
546 
547 	// Miscellaneous
548 	asIScriptEngine *asContext_GetEngine(asIScriptContext *c);
549 
550 	// Execution
551 	int              asContext_Prepare(asIScriptContext *c, asIScriptFunction *func);
552 	int              asContext_Unprepare(asIScriptContext *c);
553 	int              asContext_Execute(asIScriptContext *c);
554 	int              asContext_Abort(asIScriptContext *c);
555 	int              asContext_Suspend(asIScriptContext *c);
556 	asEContextState  asContext_GetState(asIScriptContext *c);
557 	int              asContext_PushState(asIScriptContext *c);
558 	int              asContext_PopState(asIScriptContext *c);
559 	asBOOL           asContext_IsNested(asIScriptContext *c, asUINT *nestCount);
560 
561 	// Object pointer for calling class methods
562 	int              asContext_SetObject(asIScriptContext *c, void *obj);
563 
564 	// Arguments
565 	int              asContext_SetArgByte(asIScriptContext *c, asUINT arg, asBYTE value);
566 	int              asContext_SetArgWord(asIScriptContext *c, asUINT arg, asWORD value);
567 	int              asContext_SetArgDWord(asIScriptContext *c, asUINT arg, asDWORD value);
568 	int              asContext_SetArgQWord(asIScriptContext *c, asUINT arg, asQWORD value);
569 	int              asContext_SetArgFloat(asIScriptContext *c, asUINT arg, float value);
570 	int              asContext_SetArgDouble(asIScriptContext *c, asUINT arg, double value);
571 	int              asContext_SetArgAddress(asIScriptContext *c, asUINT arg, void *addr);
572 	int              asContext_SetArgObject(asIScriptContext *c, asUINT arg, void *obj);
573 	int              asContext_SetArgVarType(asIScriptContext *c, asUINT arg, void *ptr, int typeId);
574 	void *           asContext_GetAddressOfArg(asIScriptContext *c, asUINT arg);
575 
576 	// Return value
577 	asBYTE           asContext_GetReturnByte(asIScriptContext *c);
578 	asWORD           asContext_GetReturnWord(asIScriptContext *c);
579 	asDWORD          asContext_GetReturnDWord(asIScriptContext *c);
580 	asQWORD          asContext_GetReturnQWord(asIScriptContext *c);
581 	float            asContext_GetReturnFloat(asIScriptContext *c);
582 	double           asContext_GetReturnDouble(asIScriptContext *c);
583 	void *           asContext_GetReturnAddress(asIScriptContext *c);
584 	void *           asContext_GetReturnObject(asIScriptContext *c);
585 	void *           asContext_GetAddressOfReturnValue(asIScriptContext *c);
586 
587 	// Exception handling
588 	int                asContext_SetException(asIScriptContext *c, const(char) *string);
589 	int                asContext_GetExceptionLineNumber(asIScriptContext *c, int *column, const(char) **sectionName);
590 	asIScriptFunction *asContext_GetExceptionFunction(asIScriptContext *c);
591 	const(char) *       asContext_GetExceptionString(asIScriptContext *c);
592 	int                asContext_SetExceptionCallback(asIScriptContext *c, asFUNCTION_t callback, void *obj, int callConv);
593 	void               asContext_ClearExceptionCallback(asIScriptContext *c);
594 
595 	// Debugging
596 	int                asContext_SetLineCallback(asIScriptContext *c, asFUNCTION_t callback, void *obj, int callConv);
597 	void               asContext_ClearLineCallback(asIScriptContext *c);
598 	asUINT             asContext_GetCallstackSize(asIScriptContext *c);
599 	asIScriptFunction *asContext_GetFunction(asIScriptContext *c, asUINT stackLevel);
600 	int                asContext_GetLineNumber(asIScriptContext *c, asUINT stackLevel, int *column, const(char) **sectionName);
601 	int                asContext_GetVarCount(asIScriptContext *c, asUINT stackLevel);
602 	const(char) *       asContext_GetVarName(asIScriptContext *c, asUINT varIndex, asUINT stackLevel);
603 	const(char) *       asContext_GetVarDeclaration(asIScriptContext *c, asUINT varIndex, asUINT stackLevel, asBOOL includeNamespace);
604 	int                asContext_GetVarTypeId(asIScriptContext *c, asUINT varIndex, asUINT stackLevel);
605 	void *             asContext_GetAddressOfVar(asIScriptContext *c, asUINT varIndex, asUINT stackLevel);
606 	asBOOL             asContext_IsVarInScope(asIScriptContext *c, asUINT varIndex, asUINT stackLevel);
607 	int                asContext_GetThisTypeId(asIScriptContext *c, asUINT stackLevel);
608 	void *             asContext_GetThisPointer(asIScriptContext *c, asUINT stackLevel);
609 	asIScriptFunction *asContext_GetSystemFunction(asIScriptContext *c);
610 
611 	// User data
612 	void *           asContext_SetUserData(asIScriptContext *c, void *data);
613 	void *           asContext_GetUserData(asIScriptContext *c);
614 
615 	///////////////////////////////////////////
616 	// asIScriptGeneric
617 
618 	// Miscellaneous
619 	asIScriptEngine   *asGeneric_GetEngine(asIScriptGeneric *g);
620 	asIScriptFunction *asGeneric_GetFunction(asIScriptGeneric *g);
621 	void              *asGeneric_GetAuxiliary(asIScriptGeneric *g);
622 
623 	// Object
624 	void *           asGeneric_GetObject(asIScriptGeneric *g);
625 	int              asGeneric_GetObjectTypeId(asIScriptGeneric *g);
626 
627 	// Arguments
628 	int              asGeneric_GetArgCount(asIScriptGeneric *g);
629 	int              asGeneric_GetArgTypeId(asIScriptGeneric *g, asUINT arg, asDWORD *flags);
630 	asBYTE           asGeneric_GetArgByte(asIScriptGeneric *g, asUINT arg);
631 	asWORD           asGeneric_GetArgWord(asIScriptGeneric *g, asUINT arg);
632 	asDWORD          asGeneric_GetArgDWord(asIScriptGeneric *g, asUINT arg);
633 	asQWORD          asGeneric_GetArgQWord(asIScriptGeneric *g, asUINT arg);
634 	float            asGeneric_GetArgFloat(asIScriptGeneric *g, asUINT arg);
635 	double           asGeneric_GetArgDouble(asIScriptGeneric *g, asUINT arg);
636 	void *           asGeneric_GetArgAddress(asIScriptGeneric *g, asUINT arg);
637 	void *           asGeneric_GetArgObject(asIScriptGeneric *g, asUINT arg);
638 	void *           asGeneric_GetAddressOfArg(asIScriptGeneric *g, asUINT arg);
639 
640 	// Return value
641 	int              asGeneric_GetReturnTypeId(asIScriptGeneric *g, asDWORD *flags);
642 	int              asGeneric_SetReturnByte(asIScriptGeneric *g, asBYTE val);
643 	int              asGeneric_SetReturnWord(asIScriptGeneric *g, asWORD val);
644 	int              asGeneric_SetReturnDWord(asIScriptGeneric *g, asDWORD val);
645 	int              asGeneric_SetReturnQWord(asIScriptGeneric *g, asQWORD val);
646 	int              asGeneric_SetReturnFloat(asIScriptGeneric *g, float val);
647 	int              asGeneric_SetReturnDouble(asIScriptGeneric *g, double val);
648 	int              asGeneric_SetReturnAddress(asIScriptGeneric *g, void *addr);
649 	int              asGeneric_SetReturnObject(asIScriptGeneric *g, void *obj);
650 	void *           asGeneric_GetAddressOfReturnLocation(asIScriptGeneric *g);
651 
652 	///////////////////////////////////////////
653 	// asIScriptObject
654 
655 	// Memory management
656 	int                    asObject_AddRef(asIScriptObject *s);
657 	int                    asObject_Release(asIScriptObject *s);
658 	asILockableSharedBool *asObject_GetWeakRefFlag(asIScriptObject *s);
659 
660 	// Type info
661 	int            asObject_GetTypeId(asIScriptObject *s);
662 	asITypeInfo *  asObject_GetObjectType(asIScriptObject *s);
663 
664 	// Class properties
665 	asUINT           asObject_GetPropertyCount(asIScriptObject *s);
666 	int              asObject_GetPropertyTypeId(asIScriptObject *s, asUINT prop);
667 	const(char) *     asObject_GetPropertyName(asIScriptObject *s, asUINT prop);
668 	void *           asObject_GetAddressOfProperty(asIScriptObject *s, asUINT prop);
669 
670 	// Miscellaneous
671 	asIScriptEngine *asObject_GetEngine(asIScriptObject *s);
672 	int              asObject_CopyFrom(asIScriptObject *s, asIScriptObject *other);
673 
674 	// User data
675 	void *asObject_SetUserData(asIScriptObject *s, void *data, asPWORD type);
676 	void *asObject_GetUserData(asIScriptObject *s, asPWORD type);
677 
678 	///////////////////////////////////////////
679 	// asITypeInfo
680 
681 	// Miscellaneous
682 	asIScriptEngine *asTypeInfo_GetEngine(asITypeInfo *o);
683 	const(char)      *asTypeInfo_GetConfigGroup(asITypeInfo *o);
684 	asDWORD          asTypeInfo_GetAccessMask(asITypeInfo *o);
685 	asIScriptModule *asTypeInfo_GetModule(asITypeInfo *o);
686 
687 	// Memory management
688 	int              asTypeInfo_AddRef(const asITypeInfo *o);
689 	int              asTypeInfo_Release(const asITypeInfo *o);
690 
691 	// Type info
692 	const(char)      *asTypeInfo_GetName(const asITypeInfo *o);
693 	const(char)      *asTypeInfo_GetNamespace(const asITypeInfo *o);
694 	asITypeInfo     *asTypeInfo_GetBaseType(const asITypeInfo *o);
695 	asBOOL           asTypeInfo_DerivesFrom(const asITypeInfo *o, const asITypeInfo *objType);
696 	asDWORD          asTypeInfo_GetFlags(const asITypeInfo *o);
697 	asUINT           asTypeInfo_GetSize(const asITypeInfo *o);
698 	int              asTypeInfo_GetTypeId(const asITypeInfo *o);
699 	int              asTypeInfo_GetSubTypeId(const asITypeInfo *o, asUINT subTypeIndex);
700 	asITypeInfo     *asTypeInfo_GetSubType(const asITypeInfo *o, asUINT subTypeIndex);
701 	asUINT           asTypeInfo_GetSubTypeCount(const asITypeInfo *o);
702 
703 	// Interfaces
704 	asUINT           asTypeInfo_GetInterfaceCount(const asITypeInfo *o);
705 	asITypeInfo     *asTypeInfo_GetInterface(const asITypeInfo *o, asUINT index);
706 	asBOOL           asTypeInfo_Implements(const asITypeInfo *o, const asITypeInfo *objType); 
707 
708 	// Factories
709 	asUINT             asTypeInfo_GetFactoryCount(const asITypeInfo *o);
710 	asIScriptFunction *asTypeInfo_GetFactoryByIndex(const asITypeInfo *o, asUINT index);
711 	asIScriptFunction *asTypeInfo_GetFactoryByDecl(const asITypeInfo *o, const(char) *decl);
712 
713 	// Methods
714 	asUINT             asTypeInfo_GetMethodCount(const asITypeInfo *o);
715 	asIScriptFunction *asTypeInfo_GetMethodByIndex(const asITypeInfo *o, asUINT index, asBOOL getVirtual);
716 	asIScriptFunction *asTypeInfo_GetMethodByName(const asITypeInfo *o, const(char) *name, asBOOL getVirtual);
717 	asIScriptFunction *asTypeInfo_GetMethodByDecl(const asITypeInfo *o, const(char) *decl, asBOOL getVirtual);
718 
719 	// Properties
720 	asUINT      asTypeInfo_GetPropertyCount(const asITypeInfo *o);
721 	int         asTypeInfo_GetProperty(const asITypeInfo *o, asUINT index, const(char) **name, int *typeId, asBOOL *isPrivate, asBOOL *isProtected, int *offset, asBOOL *isReference, asDWORD *accessMask);
722 	const(char) *asTypeInfo_GetPropertyDeclaration(const asITypeInfo *o, asUINT index);
723 
724 	// Behaviours
725 	asUINT             asTypeInfo_GetBehaviourCount(const asITypeInfo *o);
726 	asIScriptFunction *asTypeInfo_GetBehaviourByIndex(const asITypeInfo *o, asUINT index, asEBehaviours *outBehaviour);
727 
728 	// Child types
729 	asUINT       asTypeInfo_GetChildFuncdefCount(asITypeInfo *o);
730 	asITypeInfo *asTypeInfo_GetChildFuncdef(asITypeInfo *o, asUINT index);
731 	asITypeInfo *asTypeInfo_GetParentType(asITypeInfo *o);
732 
733 	// Enums
734 	asUINT      asTypeInfo_GetEnumValueCount(asITypeInfo *o);
735 	const(char) *asTypeInfo_GetEnumValueByIndex(asITypeInfo *o, asUINT index, int *outValue);
736 
737 	// Typedef
738 	int asTypeInfo_GetTypedefTypeId(asITypeInfo *o);
739 
740 	// Funcdef
741 	asIScriptFunction *asTypeInfo_GetFuncdefSignature(asITypeInfo *o);
742 
743 	// User data
744 	void            *asTypeInfo_SetUserData(asITypeInfo *o, void *data, asPWORD type);
745 	void            *asTypeInfo_GetUserData(asITypeInfo *o, asPWORD type);
746 
747 
748 	///////////////////////////////////////////
749 	// asIScriptFunction
750 
751 	asIScriptEngine *asFunction_GetEngine(const asIScriptFunction *f);
752 
753 	// Memory management
754 	int              asFunction_AddRef(const asIScriptFunction *f);
755 	int              asFunction_Release(const asIScriptFunction *f);
756 
757 	// Miscellaneous
758 	int              asFunction_GetId(const asIScriptFunction *f);
759 	asEFuncType      asFunction_GetFuncType(const asIScriptFunction *f);
760 	const(char)      *asFunction_GetModuleName(const asIScriptFunction *f);
761 	asIScriptModule *asFunction_GetModule(const asIScriptFunction *f);
762 	const(char)      *asFunction_GetScriptSectionName(const asIScriptFunction *f);
763 	const(char)      *asFunction_GetConfigGroup(const asIScriptFunction *f);
764 	asDWORD          asFunction_GetAccessMask(const asIScriptFunction *f);
765 	void            *asFunction_GetAuxiliary(const asIScriptFunction *f);
766 
767 	// Function signature
768 	asITypeInfo     *asFunction_GetObjectType(const asIScriptFunction *f);
769 	const(char)      *asFunction_GetObjectName(const asIScriptFunction *f);
770 	const(char)      *asFunction_GetName(const asIScriptFunction *f);
771 	const(char)      *asFunction_GetNamespace(const asIScriptFunction *f);
772 	const(char)      *asFunction_GetDeclaration(const asIScriptFunction *f, asBOOL includeObjectName, asBOOL includeNamespace);
773 	asBOOL           asFunction_IsReadOnly(const asIScriptFunction *f);
774 	asBOOL           asFunction_IsPrivate(const asIScriptFunction *f);
775 	asBOOL           asFunction_IsProtected(const asIScriptFunction *f);
776 	asBOOL           asFunction_IsFinal(const asIScriptFunction *f);
777 	asBOOL           asFunction_IsOverride(const asIScriptFunction *f);
778 	asBOOL           asFunction_IsShared(const asIScriptFunction *f);
779 	asUINT           asFunction_GetParamCount(const asIScriptFunction *f);
780 	int              asFunction_GetParam(const asIScriptFunction *f, asUINT index, int *typeId, asDWORD *flags, const(char) **name, const(char) **defaultArg);
781 	int              asFunction_GetReturnTypeId(const asIScriptFunction *f);
782 
783 	// Type id for function pointers
784 	int              asFunction_GetTypeId(const asIScriptFunction *f);
785 	asBOOL           asFunction_IsCompatibleWithTypeId(const asIScriptFunction *f, int typeId);
786 
787 	// Delegates
788 	void              *asFunction_GetDelegateObject(const asIScriptFunction *f);
789 	asITypeInfo       *asFunction_GetDelegateObjectType(const asIScriptFunction *f);
790 	asIScriptFunction *asFunction_GetDelegateFunction(const asIScriptFunction *f);
791 
792 	// Debug information
793 	asUINT           asFunction_GetVarCount(const asIScriptFunction *f);
794 	int              asFunction_GetVar(const asIScriptFunction *f, asUINT index, const(char) **name, int *typeId);
795 	const(char) *     asFunction_GetVarDecl(const asIScriptFunction *f, asUINT index, asBOOL includeNamespace);
796 	int              asFunction_FindNextLineWithCode(const asIScriptFunction *f, int line);
797 
798 	// For JIT compilation
799 	asDWORD         *asFunction_GetByteCode(asIScriptFunction *f, asUINT *length);
800 
801 	// User data
802 	void            *asFunction_SetUserData(asIScriptFunction *f, void *userData);
803 	void            *asFunction_GetUserData(const asIScriptFunction *f);
804 }