- Write(out, reinterpret_cast<const char *>(&fileHeader), sizeof(ObjectFileHeader));
- for(map<int, vector<void *> >::const_iterator i(intp.Values().begin()), end(intp.Values().end()); i != end; ++i) {
- TypeOffset to;
- to.typeId = i->first;
- to.begin = GetTypeOffset(i->first);
- to.end = to.begin + (i->second.size() * TypeDescription::Get(i->first).Size());
- Write(out, reinterpret_cast<const char *>(&to), sizeof(TypeOffset));
+ Write(out, &fileHeader, sizeof(ObjectFileHeader));
+}
+
+void Compiler::WriteOwnStrings(ostream &out) {
+ for (set<string>::const_iterator
+ i(intp.ExportedIdentifiers().begin()),
+ end(intp.ExportedIdentifiers().end());
+ i != end; ++i) {
+ Object object;
+ object.typeId = Interpreter::STRING_ID;
+ object.size = i->size() + 1;
+ Write(out, &object, sizeof(Object));
+ addressMap.insert(make_pair(i->c_str(), cursor));
+ Write(out, i->c_str(), object.size);
+ }
+ for(vector<Interpreter::PostponedDefinition>::const_iterator
+ i(intp.PostponedDefinitions().begin()),
+ end(intp.PostponedDefinitions().end());
+ i != end; ++i) {
+ addressMap.insert(make_pair(
+ i->identifier.c_str(), cursor));
+ Object object;
+ object.typeId = Interpreter::STRING_ID;
+ object.size = i->identifier.size() + 1;
+ Write(out, &object, sizeof(Object));
+ Write(out, i->identifier.c_str(), object.size);