mirror of
https://github.com/gbdev/rgbds.git
synced 2025-11-20 18:22:07 +00:00
The old error stack was fairly obtuse and hard to use for debugging. This improves it notably by ensuring all line numbers are relative to the file, and not, say, the macro definition. This is a breaking change if you were parsing the old stack, but the change should be painless, and the new stack only brings more info. The syntax is unchanged for files, macros see their name prefixed with the file they're defined in and a pair of colors, REPT blocks simply append a '::REPT~n' to the context they're in, where 'n' is the number of iterations the REPT has done. This is especially helpful in macro-heavy code such as rgbds-structs.
53 lines
1.1 KiB
C
53 lines
1.1 KiB
C
/*
|
|
* This file is part of RGBDS.
|
|
*
|
|
* Copyright (c) 1997-2018, Carsten Sorensen and RGBDS contributors.
|
|
*
|
|
* SPDX-License-Identifier: MIT
|
|
*/
|
|
|
|
/*
|
|
* Contains some assembler-wide defines and externs
|
|
*/
|
|
|
|
#ifndef RGBDS_ASM_FSTACK_H
|
|
#define RGBDS_ASM_FSTACK_H
|
|
|
|
#include <stdint.h>
|
|
#include <stdio.h>
|
|
|
|
#include "asm/asm.h"
|
|
#include "asm/lexer.h"
|
|
|
|
#include "types.h"
|
|
|
|
struct sContext {
|
|
YY_BUFFER_STATE FlexHandle;
|
|
struct sSymbol *pMacro;
|
|
struct sContext *pNext;
|
|
char tzFileName[_MAX_PATH + 1];
|
|
char *tzMacroArgs[MAXMACROARGS + 1];
|
|
int32_t nLine;
|
|
uint32_t nStatus;
|
|
FILE *pFile;
|
|
char *pREPTBlock;
|
|
uint32_t nREPTBlockCount;
|
|
uint32_t nREPTBlockSize;
|
|
int32_t nREPTBodyFirstLine;
|
|
int32_t nREPTBodyLastLine;
|
|
};
|
|
|
|
extern unsigned int nMaxRecursionDepth;
|
|
|
|
void fstk_RunInclude(char *tzFileName);
|
|
void fstk_RunMacroArg(int32_t s);
|
|
void fstk_Init(char *s);
|
|
void fstk_Dump(void);
|
|
void fstk_AddIncludePath(char *s);
|
|
uint32_t fstk_RunMacro(char *s);
|
|
void fstk_RunRept(uint32_t count, int32_t nReptLineNo);
|
|
FILE *fstk_FindFile(char *fname, char **incPathUsed);
|
|
int32_t fstk_GetLine(void);
|
|
|
|
#endif /* RGBDS_ASM_FSTACK_H */
|