summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkdx <kikoodx@paranoici.org>2023-12-19 04:53:51 +0100
committerkdx <kikoodx@paranoici.org>2023-12-19 04:53:51 +0100
commitcb758dec7115ab4e758871b3cf974f67ae4d69b9 (patch)
tree207430d93a4f0a7b7035c71500b0a87fbbece7b7
parentb8a93201041c8b0013bb4f859188c5cce62e8238 (diff)
downloado7c-cb758dec7115ab4e758871b3cf974f67ae4d69b9.tar.gz
simplify skip usage
-rw-r--r--inc/token.h2
-rw-r--r--src/parser/fncall.c4
-rw-r--r--src/parser/for.c2
-rw-r--r--src/parser/function.c8
-rw-r--r--src/parser/ifelse.c2
-rw-r--r--src/parser/let.c6
-rw-r--r--src/parser/litstruct.c8
-rw-r--r--src/parser/primary.c4
-rw-r--r--src/parser/scope.c4
-rw-r--r--src/parser/structdef.c12
-rw-r--r--src/parser/type_.c4
-rw-r--r--src/parser/typealias.c6
-rw-r--r--src/parser/unegation.c2
-rw-r--r--src/parser/uniondef.c8
-rw-r--r--src/token.c14
15 files changed, 43 insertions, 43 deletions
diff --git a/inc/token.h b/inc/token.h
index e9ad665..be7acf6 100644
--- a/inc/token.h
+++ b/inc/token.h
@@ -22,6 +22,6 @@ const char *toktype_str(TokenType t);
bool is(Token tok, TokenType t);
bool equal(Token tok, const char *op);
void expect(Token tok, TokenType type);
-SliceToken skip(SliceToken s, const char *op);
+void skip(SliceToken *s, const char *op);
void semicolon(SliceToken *s);
void next(SliceToken *s);
diff --git a/src/parser/fncall.c b/src/parser/fncall.c
index 16b4ee9..3ec0eb5 100644
--- a/src/parser/fncall.c
+++ b/src/parser/fncall.c
@@ -9,7 +9,7 @@ fncall(SliceToken *s)
if (equal(s->loc[0], "(")) {
next(s);
node = new_binary(NOD_FNCALL, node, fnargs(s, expr), s->loc[-1]);
- *s = skip(*s, ")");
+ skip(s, ")");
continue;
}
@@ -24,7 +24,7 @@ fncall(SliceToken *s)
node = new_binary(NOD_DEREF, node, nullptr, s->loc[-1]);
if (!equal(s->loc[0], "]"))
node->Rhs = expr(s);
- *s = skip(*s, "]");
+ skip(s, "]");
continue;
}
diff --git a/src/parser/for.c b/src/parser/for.c
index c561918..f0e8c20 100644
--- a/src/parser/for.c
+++ b/src/parser/for.c
@@ -3,7 +3,7 @@
Node *
forloop(SliceToken *s)
{
- *s = skip(*s, "for");
+ skip(s, "for");
auto node = node_new(NOD_FOR, s->loc[-1]);
node->Lhs = expr(s);
diff --git a/src/parser/function.c b/src/parser/function.c
index 5a652bc..62066f3 100644
--- a/src/parser/function.c
+++ b/src/parser/function.c
@@ -3,7 +3,7 @@
Node *
function(SliceToken *s)
{
- *s = skip(*s, "fn");
+ skip(s, "fn");
expect(s->loc[0], TOK_WORD);
auto node = node_new(NOD_FN, s->loc[0]);
@@ -16,14 +16,14 @@ function(SliceToken *s)
next(s);
while (is(s->loc[0], TOK_WORD)) {
cur = cur->next = variable(s);
- *s = skip(*s, ":");
+ skip(s, ":");
cur->type = NOD_ARG;
cur->Lhs = type(s);
if (!equal(s->loc[0], ","))
break;
next(s);
}
- *s = skip(*s, ")");
+ skip(s, ")");
}
if (equal(s->loc[0], "->")) {
@@ -33,7 +33,7 @@ function(SliceToken *s)
node->Lhs = head.next;
node->Rhs = expr(s);
- *s = skip(*s, ";");
+ skip(s, ";");
return node;
}
diff --git a/src/parser/ifelse.c b/src/parser/ifelse.c
index 6e13fba..57df79a 100644
--- a/src/parser/ifelse.c
+++ b/src/parser/ifelse.c
@@ -3,7 +3,7 @@
Node *
ifelse(SliceToken *s)
{
- *s = skip(*s, "if");
+ skip(s, "if");
auto node = node_new(NOD_IFELSE, s->loc[-1]);
node->Lhs = expr(s);
diff --git a/src/parser/let.c b/src/parser/let.c
index 2f165af..7301d28 100644
--- a/src/parser/let.c
+++ b/src/parser/let.c
@@ -3,16 +3,16 @@
Node *
let(SliceToken *s)
{
- *s = skip(*s, "let");
+ skip(s, "let");
auto node = variable(s);
node->type = NOD_LET;
if (equal(s->loc[0], ":")) {
*s = SliceToken_next(*s);
- //*s = skip(*s, ":");
+ //skip(s, ":");
node->Lhs = type(s);
}
- *s = skip(*s, "=");
+ skip(s, "=");
node->Rhs = expr(s);
return node;
diff --git a/src/parser/litstruct.c b/src/parser/litstruct.c
index f739e2a..ef8a937 100644
--- a/src/parser/litstruct.c
+++ b/src/parser/litstruct.c
@@ -6,21 +6,21 @@ litstruct(SliceToken *s)
expect(s->loc[0], TOK_WORD);
auto node = type(s);
node->type = NOD_LITSTRUCT;
- *s = skip(*s, "#");
- *s = skip(*s, "{");
+ skip(s, "#");
+ skip(s, "{");
Node head = {0};
Node *cur = &head;
while (is(s->loc[0], TOK_WORD)) {
cur = cur->next = variable(s);
- *s = skip(*s, ":");
+ skip(s, ":");
cur->type = NOD_ARG;
cur->Lhs = type(s);
if (!equal(s->loc[0], ","))
break;
next(s);
}
- *s = skip(*s, "}");
+ skip(s, "}");
node->Lhs = head.next;
return node;
diff --git a/src/parser/primary.c b/src/parser/primary.c
index a2bf98a..a645c2b 100644
--- a/src/parser/primary.c
+++ b/src/parser/primary.c
@@ -35,9 +35,9 @@ primary(SliceToken *s)
return unegation(s);
if (equal(s->loc[0], "(")) {
- *s = skip(*s, "(");
+ skip(s, "(");
Node *node = expr(s);
- *s = skip(*s, ")");
+ skip(s, ")");
return node;
}
diff --git a/src/parser/scope.c b/src/parser/scope.c
index 5dc6563..7c78a2b 100644
--- a/src/parser/scope.c
+++ b/src/parser/scope.c
@@ -3,7 +3,7 @@
Node *
scope(SliceToken *s)
{
- *s = skip(*s, "{");
+ skip(s, "{");
Node *node = node_new(NOD_SCOP, s->loc[-1]);
Node head = {0};
@@ -36,6 +36,6 @@ scope(SliceToken *s)
}
node->Lhs = head.next;
- *s = skip(*s, "}");
+ skip(s, "}");
return node;
}
diff --git a/src/parser/structdef.c b/src/parser/structdef.c
index 7b9794d..2904110 100644
--- a/src/parser/structdef.c
+++ b/src/parser/structdef.c
@@ -3,7 +3,7 @@
Node *
structdef(SliceToken *s)
{
- *s = skip(*s, "struct");
+ skip(s, "struct");
expect(s->loc[0], TOK_WORD);
auto node = node_new(NOD_UNION, s->loc[0]);
@@ -16,23 +16,23 @@ structdef(SliceToken *s)
next(s);
}
- *s = skip(*s, "{");
+ skip(s, "{");
Node head = {0};
Node *cur = &head;
while (is(s->loc[0], TOK_WORD)) {
cur = cur->next = node_new(NOD_LET, s->loc[0]);
*s = SliceToken_next(*s);
- *s = skip(*s, ":");
+ skip(s, ":");
cur->Lhs = type(s);
- *s = skip(*s, "=");
+ skip(s, "=");
node->Rhs = expr(s);
if (!equal(s->loc[0], ","))
break;
*s = SliceToken_next(*s);
}
- *s = skip(*s, "}");
- *s = skip(*s, ";");
+ skip(s, "}");
+ skip(s, ";");
assert(head.next != nullptr);
node->Rhs = head.next;
diff --git a/src/parser/type_.c b/src/parser/type_.c
index 18098c2..0f410ea 100644
--- a/src/parser/type_.c
+++ b/src/parser/type_.c
@@ -10,9 +10,9 @@ type(SliceToken *s)
if (ptr_depth && equal(s->loc[ptr_depth], "fn")) {
auto node = node_new(NOD_TYPE, s->loc[ptr_depth]);
*s = SliceToken_sub(*s, ptr_depth + 1, -1);
- *s = skip(*s, "(");
+ skip(s, "(");
node->Lhs = fnargs(s, type);
- *s = skip(*s, ")");
+ skip(s, ")");
if (equal(s->loc[0], "->")) {
next(s);
node->Rhs = type(s);
diff --git a/src/parser/typealias.c b/src/parser/typealias.c
index fef4478..3d908f3 100644
--- a/src/parser/typealias.c
+++ b/src/parser/typealias.c
@@ -3,12 +3,12 @@
Node *
typealias(SliceToken *s)
{
- *s = skip(*s, "alias");
+ skip(s, "alias");
expect(s->loc[0], TOK_WORD);
auto node = node_new(NOD_ALIAS, s->loc[0]);
*s = SliceToken_next(*s);
- *s = skip(*s, "=");
+ skip(s, "=");
node->Lhs = type(s);
- *s = skip(*s, ";");
+ skip(s, ";");
return node;
}
diff --git a/src/parser/unegation.c b/src/parser/unegation.c
index 50dc20a..b82ff39 100644
--- a/src/parser/unegation.c
+++ b/src/parser/unegation.c
@@ -5,7 +5,7 @@ unegation(SliceToken *s)
{
const auto rs = *s;
- *s = skip(*s, "-");
+ skip(s, "-");
bool negate = true;
while (s->len && equal(s->loc[0], "-")) {
negate = !negate;
diff --git a/src/parser/uniondef.c b/src/parser/uniondef.c
index 61a7ccd..816b325 100644
--- a/src/parser/uniondef.c
+++ b/src/parser/uniondef.c
@@ -3,19 +3,19 @@
Node *
uniondef(SliceToken *s)
{
- *s = skip(*s, "union");
+ skip(s, "union");
expect(s->loc[0], TOK_WORD);
auto node = node_new(NOD_UNION, s->loc[0]);
*s = SliceToken_next(*s);
- *s = skip(*s, "{");
+ skip(s, "{");
Node head = {0};
Node *cur = &head;
while (is(s->loc[0], TOK_WORD)) {
cur = cur->next = node_new(NOD_LET, s->loc[0]);
*s = SliceToken_next(*s);
- *s = skip(*s, ":");
+ skip(s, ":");
cur->Lhs = type(s);
if (equal(s->loc[0], "=")) {
*s = SliceToken_next(*s);
@@ -28,7 +28,7 @@ uniondef(SliceToken *s)
assert(head.next != nullptr);
node->Lhs = head.next;
- *s = skip(*s, "}");
+ skip(s, "}");
semicolon(s);
return node;
}
diff --git a/src/token.c b/src/token.c
index 9c7a9a3..00706b5 100644
--- a/src/token.c
+++ b/src/token.c
@@ -36,14 +36,14 @@ expect(Token tok, TokenType type)
toktype_str(type), toktype_str(tok.type));
}
-SliceToken
-skip(SliceToken s, const char *op)
+void
+skip(SliceToken *s, const char *op)
{
- assert(s.len);
- if (!equal(s.loc[0], op))
+ assert(s->len);
+ if (!equal(s->loc[0], op))
panic("expected '%s', got '%.*s'",
- op, s.loc[0].s.len, s.loc[0].s.loc);
- return SliceToken_sub(s, 1, -1);
+ op, s->loc[0].s.len, s->loc[0].s.loc);
+ *s = SliceToken_sub(*s, 1, -1);
}
void
@@ -52,7 +52,7 @@ semicolon(SliceToken *s)
assert(s->len);
if (equal(s->loc[0], "}"))
return;
- *s = skip(*s, ";");
+ skip(s, ";");
}
void