Permalink
Browse files

Debugger: Refactor lexer to use Vector type

  • Loading branch information...
endrift committed Dec 29, 2017
1 parent a83e76a commit d7900fdf5fdaa9d432a79ac22dbd1bdde6ce2c5d
Showing with 89 additions and 96 deletions.
  1. +3 −4 include/mgba/internal/debugger/parser.h
  2. +5 −2 src/debugger/cli-debugger.c
  3. +81 −90 src/debugger/parser.c
@@ -8,6 +8,8 @@
#include <mgba-util/common.h>
+#include <mgba-util/vector.h>
+
CXX_GUARD_START
enum Operation {
@@ -43,10 +45,7 @@ struct Token {
};
};
-struct LexVector {
- struct LexVector* next;
- struct Token token;
-};
+DECLARE_VECTOR(LexVector, struct Token);
struct ParseTree {
struct Token token;
@@ -545,11 +545,11 @@ struct CLIDebugVector* CLIDVParse(struct CLIDebugger* debugger, const char* stri
struct CLIDebugVector dvTemp = { .type = CLIDV_INT_TYPE, .segmentValue = -1 };
- struct LexVector lv = { .next = 0 };
+ struct LexVector lv;
+ LexVectorInit(&lv, 0);
size_t adjusted = lexExpression(&lv, string, length);
if (adjusted > length) {
dvTemp.type = CLIDV_ERROR_TYPE;
- lexFree(lv.next);
}
struct ParseTree tree;
@@ -565,6 +565,9 @@ struct CLIDebugVector* CLIDVParse(struct CLIDebugger* debugger, const char* stri
parseFree(tree.lhs);
parseFree(tree.rhs);
+ lexFree(&lv);
+ LexVectorDeinit(&lv);
+
struct CLIDebugVector* dv = malloc(sizeof(struct CLIDebugVector));
if (dvTemp.type == CLIDV_ERROR_TYPE) {
dv->type = CLIDV_ERROR_TYPE;
Oops, something went wrong.

0 comments on commit d7900fd

Please sign in to comment.