No types, no fucking types. Just bugs

This commit is contained in:
2025-01-07 22:22:05 +01:00
parent 1f134595de
commit 2a56ea9be2
6 changed files with 68 additions and 49 deletions

View File

@@ -49,7 +49,7 @@ static void cleanupScratch(CleanupScratch* c) {
static AstSubRange listToSpan(Parser* p, const AstNodeIndex* list, uint32_t count) {
SLICE_ENSURE_CAPACITY(AstNodeIndex, &p->extra_data, count);
memcpy(&p->extra_data.arr, list, count * sizeof(AstNodeIndex));
memcpy(p->extra_data.arr, list, count * sizeof(AstNodeIndex));
p->extra_data.len += count;
return (AstSubRange) {
.start = p->extra_data.len - count,
@@ -86,7 +86,7 @@ static AstTokenIndex eatToken(Parser* p, TokenizerTag tag) {
}
static void eatDocComments(Parser* p) {
while (eatToken(p, TOKEN_DOC_COMMENT) == null_token) { }
while (eatToken(p, TOKEN_DOC_COMMENT) != null_token) { }
}
static AstNodeIndex setNode(Parser* p, uint32_t i, AstNodeItem item) {
@@ -122,20 +122,20 @@ static AstNodeIndex addNode(AstNodeList* nodes, AstNodeItem item) {
static AstNodeIndex addExtra(Parser* p, const AstNodeIndex* extra, uint32_t count) {
const AstNodeIndex result = p->extra_data.len;
SLICE_ENSURE_CAPACITY(AstNodeIndex, &p->extra_data, count);
memcpy(&p->extra_data.arr, extra, count * sizeof(AstNodeIndex));
memcpy(p->extra_data.arr, extra, count * sizeof(AstNodeIndex));
return result;
}
static AstNodeIndex parseByteAlign(Parser* p) {
if (eatToken(p, TOKEN_KEYWORD_ALIGN) != null_token)
if (eatToken(p, TOKEN_KEYWORD_ALIGN) == null_token)
return null_node;
fprintf(stderr, "parseByteAlign cannot parse alginment\n");
fprintf(stderr, "parseByteAlign cannot parse alignment\n");
exit(1);
return 0; // tcc
}
static AstNodeIndex parseAddrSpace(Parser* p) {
if (eatToken(p, TOKEN_KEYWORD_ADDRSPACE) != null_token)
if (eatToken(p, TOKEN_KEYWORD_ADDRSPACE) == null_token)
return null_node;
fprintf(stderr, "parseAddrSpace cannot parse addrspace\n");
exit(1);
@@ -143,7 +143,7 @@ static AstNodeIndex parseAddrSpace(Parser* p) {
}
static AstNodeIndex parseLinkSection(Parser* p) {
if (eatToken(p, TOKEN_KEYWORD_LINKSECTION) != null_token)
if (eatToken(p, TOKEN_KEYWORD_LINKSECTION) == null_token)
return null_node;
fprintf(stderr, "parseLinkSection cannot parse linksection\n");
exit(1);
@@ -151,7 +151,7 @@ static AstNodeIndex parseLinkSection(Parser* p) {
}
static AstNodeIndex parseCallconv(Parser* p) {
if (eatToken(p, TOKEN_KEYWORD_CALLCONV) != null_token)
if (eatToken(p, TOKEN_KEYWORD_CALLCONV) == null_token)
return null_node;
fprintf(stderr, "parseCallconv cannot parse callconv\n");
exit(1);
@@ -403,7 +403,8 @@ static SmallSpan parseParamDeclList(Parser* p) {
}
static uint32_t reserveNode(Parser* p, AstNodeTag tag) {
astNodeListEnsureCapacity(&p->nodes, p->nodes.len + 1);
astNodeListEnsureCapacity(&p->nodes, 1);
p->nodes.len++;
p->nodes.tags[p->nodes.len - 1] = tag;
return p->nodes.len - 1;
}
@@ -427,7 +428,8 @@ static AstNodeIndex parseFnProto(Parser* p) {
const AstNodeIndex return_type_expr = parseTypeExpr(p);
if (align_expr == 0 && section_expr == 0 && callconv_expr == 0 && addrspace_expr == 0) {
if (params.tag == SMALL_SPAN_ZERO_OR_ONE)
switch (params.tag) {
case SMALL_SPAN_ZERO_OR_ONE:
return setNode(
p,
fn_proto_index,
@@ -439,6 +441,11 @@ static AstNodeIndex parseFnProto(Parser* p) {
.rhs = return_type_expr,
},
});
break;
case SMALL_SPAN_MULTI:
fprintf(stderr, "parseFnProto does not support multi params\n");
exit(1);
}
}
fprintf(stderr, "parseFnProto does not support complex function decls\n");
@@ -766,7 +773,6 @@ void findNextContainerMember(Parser* p) {
static Members parseContainerMembers(Parser* p) {
CleanupScratch scratch_top __attribute__((__cleanup__(cleanupScratch))) = initCleanupScratch(p);
while (eatToken(p, TOKEN_CONTAINER_DOC_COMMENT) != null_token)
;