mirror of
https://github.com/open-goal/jak-project.git
synced 2024-10-20 11:26:18 -04:00
d5d0d7f924
* add some type stuff for gkernel * more tweaks * blah * more little tweaks and more of gkernel * add static structures with integer fields but not basics * static structures * update gkernel
79 lines
1.9 KiB
C++
79 lines
1.9 KiB
C++
#pragma once
|
|
|
|
#ifndef JAK_STATICOBJECT_H
|
|
#define JAK_STATICOBJECT_H
|
|
|
|
#include <string>
|
|
#include <vector>
|
|
#include "goalc/emitter/ObjectGenerator.h"
|
|
|
|
class StaticObject {
|
|
public:
|
|
virtual std::string print() const = 0;
|
|
|
|
struct LoadInfo {
|
|
bool requires_load = false;
|
|
int load_size = -1;
|
|
bool load_signed = false;
|
|
bool prefer_xmm = false;
|
|
};
|
|
|
|
virtual LoadInfo get_load_info() const = 0;
|
|
virtual void generate(emitter::ObjectGenerator* gen) = 0;
|
|
virtual int get_addr_offset() const = 0;
|
|
|
|
emitter::StaticRecord rec;
|
|
};
|
|
|
|
class StaticString : public StaticObject {
|
|
public:
|
|
explicit StaticString(std::string data, int _seg);
|
|
std::string text;
|
|
int seg = -1;
|
|
std::string print() const override;
|
|
LoadInfo get_load_info() const override;
|
|
void generate(emitter::ObjectGenerator* gen) override;
|
|
int get_addr_offset() const override;
|
|
};
|
|
|
|
class StaticFloat : public StaticObject {
|
|
public:
|
|
explicit StaticFloat(float _value, int _seg);
|
|
float value = 0;
|
|
int seg = -1;
|
|
std::string print() const override;
|
|
LoadInfo get_load_info() const override;
|
|
void generate(emitter::ObjectGenerator* gen) override;
|
|
int get_addr_offset() const override;
|
|
};
|
|
|
|
class StaticStructure : public StaticObject {
|
|
public:
|
|
StaticStructure(int _seg);
|
|
std::vector<u8> data;
|
|
int seg = -1;
|
|
std::string print() const override;
|
|
LoadInfo get_load_info() const override;
|
|
void generate_structure(emitter::ObjectGenerator* gen);
|
|
void generate(emitter::ObjectGenerator* gen) override;
|
|
int get_addr_offset() const override;
|
|
|
|
struct SymbolRecord {
|
|
int offset = -1;
|
|
std::string name;
|
|
};
|
|
std::vector<SymbolRecord> symbols;
|
|
|
|
void add_symbol_record(std::string name, int offset);
|
|
};
|
|
|
|
class StaticBasic : public StaticStructure {
|
|
public:
|
|
std::string type_name;
|
|
StaticBasic(int _seg, std::string _type_name);
|
|
int get_addr_offset() const override;
|
|
void generate(emitter::ObjectGenerator* gen) override;
|
|
};
|
|
|
|
#endif // JAK_STATICOBJECT_H
|