]> git.localhorst.tv Git - l2e.git/blobdiff - src/loader/Compiler.h
new object file format in compiler
[l2e.git] / src / loader / Compiler.h
index ab26cea41e5ed955933c4a20e0598b9f1bbfc146..7afe633afd655db4434aaf283abbb32990785084 100644 (file)
@@ -1,14 +1,9 @@
-/*
- * Compiler.h
- *
- *  Created on: Sep 11, 2012
- *      Author: holy
- */
-
 #ifndef LOADER_COMPILER_H_
 #define LOADER_COMPILER_H_
 
+#include "Interpreter.h"
 #include "ObjectFile.h"
+#include "TypeDescription.h"
 
 #include <iosfwd>
 #include <map>
@@ -17,8 +12,6 @@
 
 namespace loader {
 
-class Interpreter;
-
 class Compiler {
 
 public:
@@ -29,36 +22,41 @@ private:
        Compiler &operator =(const Compiler &);
 
 public:
-       void Write(std::ostream &);
+       void Write(std::iostream &);
 
 private:
+       void ReserveHeader(std::ostream &);
+       void WriteObjects(std::ostream &);
+       void WriteOwnStrings(std::ostream &);
+       void WriteArrays(std::ostream &);
        void WriteHeader(std::ostream &);
        void WriteExports(std::ostream &);
        void WriteExternals(std::ostream &);
-       void WriteExportStrings(std::ostream &);
-       void WriteExternalStrings(std::ostream &);
-       void WriteImages(std::ostream &);
-       void WriteObjects(std::ostream &);
 
-       void Write(std::ostream &, const char *data, int amount);
+       void Relocate(std::iostream &);
+       void RelocateArray(char *, int size);
+       void Relocate(char *, const TypeDescription &);
+
+       void PrepareExport(Export &, const std::string &);
+       void PrepareExternal(External &, const Interpreter::PostponedDefinition &);
+       void PrepareObject(Object &, const TypeDescription &, void *);
+
+       void Write(std::ostream &, const void *data, int amount);
        void Pad(std::ostream &, int to);
+       void Fill(std::ostream &, int count, char c = '\0');
        static int Remaining(int value, int alignment);
 
-       int ReferenceOffset(int typeId, int objectId, std::ptrdiff_t fieldOffset) const;
-       int ObjectOffset(int typeId, int objectId) const;
-       int GetTypeOffset(int typeId) const;
-
 private:
        const Interpreter &intp;
 
-       int cursor;
+       unsigned int cursor;
 
        ObjectFileHeader fileHeader;
 
-       std::map<int, int> objectOffsets;
+       std::map<const void *, unsigned int> addressMap;
 
 };
 
 }
 
-#endif /* LOADER_COMPILER_H_ */
+#endif