int asCRestore::Save() { unsigned long i, count; // Store everything in the same order that the builder parses scripts // Store enums count = (asUINT)module->enumTypes.GetLength(); WRITE_NUM(count); for( i = 0; i < count; i++ ) { WriteObjectTypeDeclaration(module->enumTypes[i], false); WriteObjectTypeDeclaration(module->enumTypes[i], true); } // Store type declarations first count = (asUINT)module->classTypes.GetLength(); WRITE_NUM(count); for( i = 0; i < count; i++ ) { // Store only the name of the class/interface types WriteObjectTypeDeclaration(module->classTypes[i], false); } // Now store all interface methods for( i = 0; i < count; i++ ) { if( module->classTypes[i]->IsInterface() ) WriteObjectTypeDeclaration(module->classTypes[i], true); } // Then store the class methods, properties, and behaviours for( i = 0; i < count; ++i ) { if( !module->classTypes[i]->IsInterface() ) WriteObjectTypeDeclaration(module->classTypes[i], true); } // Store typedefs count = (asUINT)module->typeDefs.GetLength(); WRITE_NUM(count); for( i = 0; i < count; i++ ) { WriteObjectTypeDeclaration(module->typeDefs[i], false); WriteObjectTypeDeclaration(module->typeDefs[i], true); } // scriptGlobals[] count = (asUINT)module->scriptGlobals.GetLength(); WRITE_NUM(count); for( i = 0; i < count; ++i ) WriteGlobalProperty(module->scriptGlobals[i]); // scriptFunctions[] count = 0; for( i = 0; i < module->scriptFunctions.GetLength(); i++ ) if( module->scriptFunctions[i]->objectType == 0 ) count++; WRITE_NUM(count); for( i = 0; i < module->scriptFunctions.GetLength(); ++i ) if( module->scriptFunctions[i]->objectType == 0 ) WriteFunction(module->scriptFunctions[i]); // globalFunctions[] count = (int)module->globalFunctions.GetLength(); WRITE_NUM(count); for( i = 0; i < count; i++ ) { WriteFunction(module->globalFunctions[i]); } // bindInformations[] count = (asUINT)module->bindInformations.GetLength(); WRITE_NUM(count); for( i = 0; i < count; ++i ) { WriteFunction(module->bindInformations[i]->importedFunctionSignature); WriteString(&module->bindInformations[i]->importFromModule); } // usedTypes[] count = (asUINT)usedTypes.GetLength(); WRITE_NUM(count); for( i = 0; i < count; ++i ) { WriteObjectType(usedTypes[i]); } // usedTypeIds[] WriteUsedTypeIds(); // usedFunctions[] WriteUsedFunctions(); // usedGlobalProperties[] WriteUsedGlobalProps(); // usedStringConstants[] WriteUsedStringConstants(); // TODO: Store script section names return asSUCCESS; }
int asCRestore::Save() { unsigned long i, count; // structTypes[] count = module->structTypes.GetLength(); WRITE_NUM(count); for( i = 0; i < count; ++i ) { WriteObjectTypeDeclaration(module->structTypes[i]); } // usedTypeIndices[] count = module->usedTypes.GetLength(); WRITE_NUM(count); for( i = 0; i < count; ++i ) { WriteObjectType(module->usedTypes[i]); } // scriptGlobals[] count = module->scriptGlobals.GetLength(); WRITE_NUM(count); for( i = 0; i < count; ++i ) WriteProperty(module->scriptGlobals[i]); // globalMem size (can restore data using @init()) count = module->globalMem.GetLength(); WRITE_NUM(count); // globalVarPointers[] WriteGlobalVarPointers(); // initFunction WriteFunction(&module->initFunction); // scriptFunctions[] count = module->scriptFunctions.GetLength(); WRITE_NUM(count); for( i = 0; i < count; ++i ) WriteFunction(module->scriptFunctions[i]); // stringConstants[] count = module->stringConstants.GetLength(); WRITE_NUM(count); for( i = 0; i < count; ++i ) WriteString(module->stringConstants[i]); // importedFunctions[] and bindInformations[] count = module->importedFunctions.GetLength(); WRITE_NUM(count); for( i = 0; i < count; ++i ) { WriteFunction(module->importedFunctions[i]); WRITE_NUM(module->bindInformations[i].importFrom); } // usedTypeIds[] WriteUsedTypeIds(); return asSUCCESS; }