No types, no fucking types. Just bugs
This commit is contained in:
28
parser.c
28
parser.c
@@ -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)
|
||||
;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user