2026-08-03 17:02:20 +10:00
|
|
|
#ifndef __GRAVITY__CORE_H
|
|
|
|
|
#define __GRAVITY__CORE_H
|
2026-08-02 15:52:44 +10:00
|
|
|
|
2026-08-03 17:02:20 +10:00
|
|
|
#include <stdint.h>
|
|
|
|
|
#include <stdbool.h>
|
|
|
|
|
|
|
|
|
|
// === TYPE DEFINITIONS === //
|
2026-08-02 15:52:44 +10:00
|
|
|
typedef struct GravityOpaqueModule* GravityModule;
|
2026-08-03 17:02:20 +10:00
|
|
|
typedef struct GravityOpaqueValue* GravityValue;
|
|
|
|
|
typedef struct GravityOpaqueBuilder* GravityBuilder;
|
|
|
|
|
typedef struct GravityOpaqueFunction* GravityFunction;
|
2026-08-03 21:01:34 +10:00
|
|
|
typedef struct GravityOpaqueBlock* GravityBlock;
|
2026-08-03 17:02:20 +10:00
|
|
|
|
|
|
|
|
typedef struct GravityOpaqueType* GravityType;
|
|
|
|
|
typedef enum {
|
|
|
|
|
GravityIntTypeKind = 0,
|
|
|
|
|
GravityFloatTypeKind,
|
|
|
|
|
GravityPointerTypeKind,
|
|
|
|
|
GravityFunctionTypeKind,
|
|
|
|
|
} GravityTypeKind;
|
2026-08-02 15:52:44 +10:00
|
|
|
// ========================== //
|
|
|
|
|
|
|
|
|
|
// === FUNCTION DEFINITIONS === //
|
2026-08-03 17:02:20 +10:00
|
|
|
GravityModule gravityCreateModule(void);
|
|
|
|
|
GravityBuilder gravityCreateBuilder(void);
|
|
|
|
|
|
|
|
|
|
GravityFunction gravityNewFunction(GravityModule module, const char* name, GravityType functionType);
|
2026-08-04 09:50:48 +10:00
|
|
|
GravityBlock gravityStartBlock(const char* name, GravityFunction function);
|
2026-08-03 21:01:34 +10:00
|
|
|
|
|
|
|
|
GravityValue newIntConstant(GravityType intType, int64_t value);
|
2026-08-03 17:02:20 +10:00
|
|
|
|
|
|
|
|
GravityType gravityCreateFunctionType(int numArgs, GravityType* argTypes, GravityType returnType);
|
|
|
|
|
GravityType gravityCreateIntegerType(uint8_t width, bool isSigned);
|
2026-08-04 09:50:48 +10:00
|
|
|
GravityType gravityCreatePointerType(void);
|
2026-08-03 21:01:34 +10:00
|
|
|
|
|
|
|
|
char* gravityModuleToCStr(GravityModule module);
|
|
|
|
|
char* gravityTypeToCStr(GravityType type);
|
|
|
|
|
char* gravityFunctionToCStr(GravityFunction function);
|
|
|
|
|
char* gravityValueToCStr(GravityValue value);
|
|
|
|
|
|
2026-08-04 09:50:48 +10:00
|
|
|
void gravityBuilderSwitchToBlock(GravityBuilder builder, GravityBlock block);
|
|
|
|
|
void gravityAppendBlockArgument(GravityBlock block, GravityType type);
|
|
|
|
|
GravityValue gravityGetBlockArg(GravityBlock block, unsigned int index);
|
2026-08-03 21:24:29 +10:00
|
|
|
|
|
|
|
|
GravityValue gravityNewIntConstant(GravityType intType, int64_t value);
|
|
|
|
|
|
|
|
|
|
// instructions
|
2026-08-03 21:01:34 +10:00
|
|
|
GravityValue gravityBuildAlloc(GravityBuilder builder, GravityType type, const char* name);
|
2026-08-03 21:24:29 +10:00
|
|
|
void gravityBuildStore(GravityBuilder builder, GravityValue pointer, GravityValue value);
|
|
|
|
|
GravityValue gravityBuildLoad(GravityBuilder builder, GravityValue pointer, const char* name);
|
|
|
|
|
void gravityBuildRet(GravityBuilder builder, GravityValue returnValue);
|
2026-08-04 09:50:48 +10:00
|
|
|
void gravityBuildBr(GravityBuilder builder, GravityValue condition, GravityBlock thenBranch, GravityValue* thenParams, GravityBlock elseBranch, GravityValue* elseParams);
|
|
|
|
|
void gravityBuildJump(GravityBuilder builder, GravityBlock block, GravityValue* params);
|
2026-08-03 21:24:29 +10:00
|
|
|
|
2026-08-02 15:52:44 +10:00
|
|
|
// ============================ //
|
|
|
|
|
|
|
|
|
|
#endif
|