summaryrefslogtreecommitdiff
path: root/CError.c
diff options
context:
space:
mode:
authorAsh Wolf <ninji@wuffs.org>2022-10-07 20:02:27 +0100
committerAsh Wolf <ninji@wuffs.org>2022-10-07 20:02:27 +0100
commit97f6a2438df1eaeb4128ce36f29346ea38a3db4a (patch)
tree78260f8f0f2b84fc70fadb1e50e7fc104390eee4 /CError.c
downloadMWCC-97f6a2438df1eaeb4128ce36f29346ea38a3db4a.tar.gz
MWCC-97f6a2438df1eaeb4128ce36f29346ea38a3db4a.zip
first very unfinished commit lol
Diffstat (limited to '')
-rw-r--r--CError.c319
1 files changed, 319 insertions, 0 deletions
diff --git a/CError.c b/CError.c
new file mode 100644
index 0000000..5179463
--- /dev/null
+++ b/CError.c
@@ -0,0 +1,319 @@
+#include "CError.h"
+#include "CompilerTools.h"
+
+// TODO MOVE ME
+extern char *CMangler_GetOperator(StringNode *str);
+extern jmp_buf errorreturn;
+extern unsigned char cprep_nomem_exit;
+extern unsigned char anyerrors;
+extern unsigned char fatalerrors;
+extern char string[256];
+// TODO MOVE ME
+
+Token *cerror_locktoken;
+static Token *cerror_token;
+static short cerror_errorcount;
+static int cerror_lasterrorline;
+// cerror_synchdata
+// cerror_synchoffset
+int CError_BreakPointcount;
+
+void CError_Init() {
+ cerror_errorcount = 0;
+ cerror_lasterrorline = -1;
+ cerror_token = 0;
+ cerror_locktoken = 0;
+}
+
+void CError_SetErrorToken(Token *token) {
+ if (token && token->x4)
+ cerror_token = token;
+}
+
+void CError_SetNullErrorToken() {
+ cerror_token = (Token *) -1;
+}
+
+void CError_LockErrorPos(Token *token, Token **saved) {
+ *saved = cerror_locktoken;
+ if (token && token->x4)
+ cerror_locktoken = token;
+}
+
+void CError_UnlockErrorPos(Token **saved) {
+ cerror_locktoken = *saved;
+}
+
+void CError_ResetErrorSkip() {
+ cerror_lasterrorline = -1;
+}
+
+void CError_GetErrorString(char *buf, short code) {
+ // This feels dirty, surely this can't have been the solution...
+ int code_ = code;
+#line 142
+ CError_ASSERT(code_ >= 100 && code_ < 393);
+ COS_GetString(buf, 10000, (short) (code_ - 99));
+}
+
+void CError_BufferInit(CErrorBuffer *eb, char *buf, long bufSize) {
+ eb->start = eb->end = buf;
+ eb->size = eb->remaining = bufSize - 1;
+}
+
+void CError_BufferGrow(CErrorBuffer *eb, long amount) {
+ char *newBuf;
+
+ newBuf = lalloc(eb->size + amount);
+ memcpy(newBuf, eb->start, eb->size);
+ eb->start = newBuf;
+ eb->end = newBuf + eb->size - eb->remaining;
+ eb->size += amount;
+ eb->remaining += amount;
+}
+
+void CError_BufferAppendChar(CErrorBuffer *eb, char ch) {
+ if (eb) {
+ if (!eb->remaining)
+ CError_BufferGrow(eb, 256);
+ *(eb->end++) = ch;
+ eb->remaining--;
+ }
+}
+
+void CError_BufferAppendString(CErrorBuffer *eb, const char *str) {
+ size_t len;
+
+ if (eb) {
+ len = strlen(str);
+ if (eb->remaining < len)
+ CError_BufferGrow(eb, len);
+ memcpy(eb->end, str, len);
+ eb->end += len;
+ eb->remaining -= len;
+ }
+}
+
+void CError_BufferTerminate(CErrorBuffer *eb) {
+ if (eb->remaining == 0)
+ CError_BufferGrow(eb, 1);
+ *eb->end = 0;
+ eb->remaining = 0;
+}
+
+void CError_BufferAppendQualifier(CErrorBuffer *eb, int quals) {
+
+}
+
+void CError_BufferAppendTemplArgExpr(CErrorBuffer *eb, void *targExpr) {
+
+}
+
+void CError_BufferAppendTemplArg(CErrorBuffer *eb, void *targ) {
+
+}
+
+void CError_BufferAppendTemplArgs(CErrorBuffer *eb, void *targs) {
+
+}
+
+void CError_BufferAppendNameSpace(CErrorBuffer *eb, void *ns) {
+
+}
+
+void CError_BufferAppendPType(CErrorBuffer *eb, void *ty) {
+
+}
+
+void CError_BufferAppendTemplDepType(CErrorBuffer *eb, void *ty) {
+
+}
+
+void CError_BufferAppendFuncArgs(CErrorBuffer *eb, void *args, unsigned char flag) {
+
+}
+
+void CError_BufferAppendType(CErrorBuffer *eb, void *ty, int quals) {
+
+}
+
+char *CError_GetTypeName(void *ty, int quals, unsigned char useGlobalHeap) {
+ CErrorBuffer eb;
+ char buf[256];
+ char *ptr;
+
+ CError_BufferInit(&eb, buf, sizeof(buf));
+ CError_BufferAppendType(&eb, ty, quals);
+ CError_BufferTerminate(&eb);
+
+ if (useGlobalHeap)
+ ptr = galloc(eb.size + 1);
+ else
+ ptr = lalloc(eb.size + 1);
+
+ return strcpy(ptr, eb.start);
+}
+
+void CError_AppendUnqualFunctionName(CErrorBuffer *eb, void *unk1, void *unk2, void *unk3) {
+
+}
+
+void CError_AppendFunctionName(CErrorBuffer *eb, void *unk1, void *unk2, void *unk3, void *unk4) {
+
+}
+
+void CError_AppendObjectName(CErrorBuffer *eb, void *obj) {
+
+}
+
+void CError_AppendMethodName(CErrorBuffer *eb, void *obj) {
+
+}
+
+char *CError_GetQualifiedName(void *ns, StringNode *name) {
+ CErrorBuffer eb;
+ char buf[256];
+ char *ptr;
+
+ CError_BufferInit(&eb, buf, sizeof(buf));
+ CError_BufferAppendNameSpace(&eb, ns);
+ CError_BufferAppendString(&eb, name->data);
+ CError_BufferTerminate(&eb);
+
+ ptr = lalloc(eb.size + 1);
+ return strcpy(ptr, eb.start);
+}
+
+char *CError_GetFunctionName(void *a, void *b, void *c) {
+ CErrorBuffer eb;
+ char buf[256];
+ char *ptr;
+
+ CError_BufferInit(&eb, buf, sizeof(buf));
+ CError_AppendFunctionName(&eb, a, b, 0, c);
+ CError_BufferTerminate(&eb);
+
+ ptr = lalloc(eb.size + 1);
+ return strcpy(ptr, eb.start);
+}
+
+char *CError_GetObjectName(void *obj) {
+ CErrorBuffer eb;
+ char buf[256];
+ char *ptr;
+
+ CError_BufferInit(&eb, buf, sizeof(buf));
+ CError_AppendObjectName(&eb, obj);
+ CError_BufferTerminate(&eb);
+
+ ptr = lalloc(eb.size + 1);
+ return strcpy(ptr, eb.start);
+}
+
+char *CError_GetNameString(void *obj, StringNode *operatorName) {
+ CErrorBuffer eb;
+ char buf[256];
+ char *ptr;
+ char *opStr;
+
+ CError_ASSERT(operatorName);
+
+ // TODO lolol
+ CError_BufferInit(&eb, buf, sizeof(buf));
+ CError_AppendObjectName(&eb, obj);
+ CError_BufferTerminate(&eb);
+
+ ptr = lalloc(eb.size + 1);
+ return strcpy(ptr, eb.start);
+}
+
+void CError_ErrorMessage(int errTable, char *buf, unsigned char flag1, unsigned char flag2) {
+
+}
+
+void CError_BufferAppendTemplateStack(CErrorBuffer *eb) {
+
+}
+
+void CError_ErrorMessageVA(short code, char *buf, va_list list, unsigned char flag1, unsigned char flag2) {
+
+}
+
+void CError_VAErrorMessage(short code, va_list list, unsigned char flag1, unsigned char flag2) {
+ char buf[256];
+
+ CError_GetErrorString(buf, code);
+ CError_ErrorMessageVA(code + 10000, buf, list, flag1, flag2);
+}
+
+void CError_Error(short code, ...) {
+
+}
+
+void CError_ErrorTerm(short code) {
+ CError_GetErrorString(string, code);
+ CError_ErrorMessage(code + 10000, string, 0, 0);
+ longjmp(errorreturn, 1);
+}
+
+void CError_ErrorSkip(short code, ...) {
+ // TODO trychain, tk
+}
+
+void CError_ErrorFuncCall(short code, void *aa, void *bb) {
+
+}
+
+void CError_OverloadedFunctionError2(void *aa, void *bb, void *cc) {
+
+}
+
+void CError_OverloadedFunctionError(void *aa, void *bb) {
+
+}
+
+void CError_AbstractClassError() {
+ // TODO CClass
+}
+
+void CError_Warning(short code, ...) {
+ // TODO lol
+}
+
+void CError_BreakPoint(const char *a, const char *b) {
+ if (!a || !strcmp(a, b))
+ CError_BreakPointcount++;
+}
+
+void CError_Internal(char *filename, int line) {
+ char tmp[128];
+ CompilerGetCString(5, tmp);
+ sprintf(string, tmp, filename, line);
+ CError_ErrorMessage(10001, string, 1, 0);
+ longjmp(errorreturn, 1);
+ CError_BreakPoint(0, 0);
+}
+
+void CError_ExpressionTooComplex() {
+ CompilerGetCString(6, string);
+ CError_ErrorMessage(10002, string, 1, 0);
+ longjmp(errorreturn, 1);
+}
+
+void CError_NoMem() {
+ cprep_nomem_exit = 1;
+ longjmp(errorreturn, 1);
+}
+
+void CError_UserBreak() {
+ CompilerGetCString(8, string);
+ longjmp(errorreturn, 1);
+}
+
+void CError_CannotOpen() {
+ // TODO
+}
+
+void CError_QualifierCheck(int quals) {
+
+}