void asCRestore::WriteGlobalProperty(asCGlobalProperty* prop) { // TODO: We might be able to avoid storing the name and type of the global // properties twice if we merge this with the WriteUsedGlobalProperties. WriteString(&prop->name); WriteDataType(&prop->type); }
void asCRestore::WriteUsedTypeIds() { int count = usedTypeIds.GetLength(); WRITE_NUM(count); for( int n = 0; n < count; n++ ) WriteDataType(engine->GetDataTypeFromTypeId(usedTypeIds[n])); }
void asCRestore::WriteFunctionSignature(asCScriptFunction *func) { asUINT i, count; WriteString(&func->name); WriteDataType(&func->returnType); count = (asUINT)func->parameterTypes.GetLength(); WRITE_NUM(count); for( i = 0; i < count; ++i ) WriteDataType(&func->parameterTypes[i]); count = (asUINT)func->inOutFlags.GetLength(); WRITE_NUM(count); for( i = 0; i < count; ++i ) WRITE_NUM(func->inOutFlags[i]); WRITE_NUM(func->funcType); WriteObjectType(func->objectType); WRITE_NUM(func->isReadOnly); }
void asCRestore::WriteFunction(asCScriptFunction* func) { int i, count; WriteString(&func->name); WriteDataType(&func->returnType); count = func->parameterTypes.GetLength(); WRITE_NUM(count); for( i = 0; i < count; ++i ) WriteDataType(&func->parameterTypes[i]); WRITE_NUM(func->id); count = func->byteCode.GetLength(); WRITE_NUM(count); WriteByteCode(func->byteCode.AddressOf(), count); count = func->objVariablePos.GetLength(); WRITE_NUM(count); for( i = 0; i < count; ++i ) { WriteObjectType(func->objVariableTypes[i]); WRITE_NUM(func->objVariablePos[i]); } WRITE_NUM(func->stackNeeded); WriteObjectType(func->objectType); int length = func->lineNumbers.GetLength(); WRITE_NUM(length); for( i = 0; i < length; ++i ) WRITE_NUM(func->lineNumbers[i]); }
void asCRestore::WriteUsedGlobalProps() { int c = (int)usedGlobalProperties.GetLength(); WRITE_NUM(c); for( int n = 0; n < c; n++ ) { size_t *p = (size_t*)usedGlobalProperties[n]; // First search for the global in the module char moduleProp = 0; asCGlobalProperty *prop = 0; for( int i = 0; i < (signed)module->scriptGlobals.GetLength(); i++ ) { if( p == module->scriptGlobals[i]->GetAddressOfValue() ) { prop = module->scriptGlobals[i]; moduleProp = 1; break; } } // If it is not in the module, it must be an application registered property if( !prop ) { for( int i = 0; i < (signed)engine->registeredGlobalProps.GetLength(); i++ ) { if( engine->registeredGlobalProps[i]->GetAddressOfValue() == p ) { prop = engine->registeredGlobalProps[i]; break; } } } asASSERT(prop); // Store the name and type of the property so we can find it again on loading WriteString(&prop->name); WriteDataType(&prop->type); // Also store whether the property is a module property or a registered property WRITE_NUM(moduleProp); } }
void asCRestore::WriteDataType(const asCDataType *dt) { if( dt->IsScriptArray() ) { bool b = true; WRITE_NUM(b); b = dt->IsObjectHandle(); WRITE_NUM(b); b = dt->IsReadOnly(); WRITE_NUM(b); b = dt->IsHandleToConst(); WRITE_NUM(b); b = dt->IsReference(); WRITE_NUM(b); asCDataType sub = dt->GetSubType(); WriteDataType(&sub); } else { bool b = false; WRITE_NUM(b); int t = dt->GetTokenType(); WRITE_NUM(t); WriteObjectType(dt->GetObjectType()); b = dt->IsObjectHandle(); WRITE_NUM(b); b = dt->IsReadOnly(); WRITE_NUM(b); b = dt->IsHandleToConst(); WRITE_NUM(b); b = dt->IsReference(); WRITE_NUM(b); } }
void asCRestore::WriteProperty(asCProperty* prop) { WriteString(&prop->name); WriteDataType(&prop->type); WRITE_NUM(prop->index); }
void asCRestore::WriteObjectProperty(asCObjectProperty* prop) { WriteString(&prop->name); WriteDataType(&prop->type); WRITE_NUM(prop->byteOffset); }