start with parser tests
This commit is contained in:
34
parser.c
34
parser.c
@@ -182,7 +182,7 @@ static AstNodeIndex expectContainerField(Parser* p) {
|
||||
return addNode(
|
||||
&p->nodes,
|
||||
(AstNodeItem) {
|
||||
.tag = AST_NODE_TAG_CONTAINER_FIELD_INIT,
|
||||
.tag = AST_NODE_CONTAINER_FIELD_INIT,
|
||||
.main_token = main_token,
|
||||
.data = {
|
||||
.lhs = type_expr,
|
||||
@@ -193,7 +193,7 @@ static AstNodeIndex expectContainerField(Parser* p) {
|
||||
return addNode(
|
||||
&p->nodes,
|
||||
(AstNodeItem) {
|
||||
.tag = AST_NODE_TAG_CONTAINER_FIELD_ALIGN,
|
||||
.tag = AST_NODE_CONTAINER_FIELD_ALIGN,
|
||||
.main_token = main_token,
|
||||
.data = {
|
||||
.lhs = type_expr,
|
||||
@@ -204,7 +204,7 @@ static AstNodeIndex expectContainerField(Parser* p) {
|
||||
return addNode(
|
||||
&p->nodes,
|
||||
(AstNodeItem) {
|
||||
.tag = AST_NODE_TAG_CONTAINER_FIELD,
|
||||
.tag = AST_NODE_CONTAINER_FIELD,
|
||||
.main_token = main_token,
|
||||
.data = {
|
||||
.lhs = type_expr,
|
||||
@@ -244,7 +244,7 @@ static AstNodeIndex parsePrimaryTypeExpr(Parser* p) {
|
||||
return addNode(
|
||||
&p->nodes,
|
||||
(AstNodeItem) {
|
||||
.tag = AST_NODE_TAG_IDENTIFIER,
|
||||
.tag = AST_NODE_IDENTIFIER,
|
||||
.main_token = nextToken(p),
|
||||
.data = {} });
|
||||
case TOKEN_KEYWORD_INLINE:
|
||||
@@ -310,7 +310,7 @@ static AstNodeIndex parseSuffixExpr(Parser* p) {
|
||||
return addNode(
|
||||
&p->nodes,
|
||||
(AstNodeItem) {
|
||||
.tag = comma ? AST_NODE_TAG_CALL_ONE_COMMA : AST_NODE_TAG_CALL_ONE,
|
||||
.tag = comma ? AST_NODE_CALL_ONE_COMMA : AST_NODE_CALL_ONE,
|
||||
.main_token = lparen,
|
||||
.data = {
|
||||
.lhs = res,
|
||||
@@ -321,7 +321,7 @@ static AstNodeIndex parseSuffixExpr(Parser* p) {
|
||||
return addNode(
|
||||
&p->nodes,
|
||||
(AstNodeItem) {
|
||||
.tag = comma ? AST_NODE_TAG_CALL_ONE_COMMA : AST_NODE_TAG_CALL_ONE,
|
||||
.tag = comma ? AST_NODE_CALL_ONE_COMMA : AST_NODE_CALL_ONE,
|
||||
.main_token = lparen,
|
||||
.data = {
|
||||
.lhs = res,
|
||||
@@ -333,7 +333,7 @@ static AstNodeIndex parseSuffixExpr(Parser* p) {
|
||||
return addNode(
|
||||
&p->nodes,
|
||||
(AstNodeItem) {
|
||||
.tag = comma ? AST_NODE_TAG_CALL_COMMA : AST_NODE_TAG_CALL,
|
||||
.tag = comma ? AST_NODE_CALL_COMMA : AST_NODE_CALL,
|
||||
.main_token = lparen,
|
||||
.data = {
|
||||
.lhs = res,
|
||||
@@ -368,7 +368,7 @@ static AstNodeIndex parseErrorUnionExpr(Parser* p) {
|
||||
return addNode(
|
||||
&p->nodes,
|
||||
(AstNodeItem) {
|
||||
.tag = AST_NODE_TAG_ERROR_UNION,
|
||||
.tag = AST_NODE_ERROR_UNION,
|
||||
.main_token = bang,
|
||||
.data = {
|
||||
.lhs = suffix_expr,
|
||||
@@ -413,7 +413,7 @@ static AstNodeIndex parseFnProto(Parser* p) {
|
||||
if (fn_token == null_node)
|
||||
return null_node;
|
||||
|
||||
AstNodeIndex fn_proto_index = reserveNode(p, AST_NODE_TAG_FN_PROTO);
|
||||
AstNodeIndex fn_proto_index = reserveNode(p, AST_NODE_FN_PROTO);
|
||||
|
||||
eatToken(p, TOKEN_IDENTIFIER);
|
||||
|
||||
@@ -432,7 +432,7 @@ static AstNodeIndex parseFnProto(Parser* p) {
|
||||
p,
|
||||
fn_proto_index,
|
||||
(AstNodeItem) {
|
||||
.tag = AST_NODE_TAG_FN_PROTO_SIMPLE,
|
||||
.tag = AST_NODE_FN_PROTO_SIMPLE,
|
||||
.main_token = fn_token,
|
||||
.data = {
|
||||
.lhs = params.payload.zero_or_one,
|
||||
@@ -568,7 +568,7 @@ static AstNodeIndex parseBlock(Parser* p) {
|
||||
return addNode(
|
||||
&p->nodes,
|
||||
(AstNodeItem) {
|
||||
.tag = AST_NODE_TAG_BLOCK_TWO,
|
||||
.tag = AST_NODE_BLOCK_TWO,
|
||||
.main_token = lbrace,
|
||||
.data = {
|
||||
.lhs = 0,
|
||||
@@ -579,7 +579,7 @@ static AstNodeIndex parseBlock(Parser* p) {
|
||||
return addNode(
|
||||
&p->nodes,
|
||||
(AstNodeItem) {
|
||||
.tag = semicolon ? AST_NODE_TAG_BLOCK_TWO_SEMICOLON : AST_NODE_TAG_BLOCK_TWO,
|
||||
.tag = semicolon ? AST_NODE_BLOCK_TWO_SEMICOLON : AST_NODE_BLOCK_TWO,
|
||||
.main_token = lbrace,
|
||||
.data = {
|
||||
.lhs = p->scratch.arr[scratch_top.old_len],
|
||||
@@ -590,7 +590,7 @@ static AstNodeIndex parseBlock(Parser* p) {
|
||||
return addNode(
|
||||
&p->nodes,
|
||||
(AstNodeItem) {
|
||||
.tag = semicolon ? AST_NODE_TAG_BLOCK_TWO_SEMICOLON : AST_NODE_TAG_BLOCK_TWO,
|
||||
.tag = semicolon ? AST_NODE_BLOCK_TWO_SEMICOLON : AST_NODE_BLOCK_TWO,
|
||||
.main_token = lbrace,
|
||||
.data = {
|
||||
.lhs = p->scratch.arr[scratch_top.old_len],
|
||||
@@ -602,7 +602,7 @@ static AstNodeIndex parseBlock(Parser* p) {
|
||||
return addNode(
|
||||
&p->nodes,
|
||||
(AstNodeItem) {
|
||||
.tag = semicolon ? AST_NODE_TAG_BLOCK_SEMICOLON : AST_NODE_TAG_BLOCK,
|
||||
.tag = semicolon ? AST_NODE_BLOCK_SEMICOLON : AST_NODE_BLOCK,
|
||||
.main_token = lbrace,
|
||||
.data = {
|
||||
.lhs = span.start,
|
||||
@@ -673,13 +673,13 @@ static AstNodeIndex expectTopLevelDecl(Parser* p) {
|
||||
p->tok_i++;
|
||||
return fn_proto;
|
||||
case TOKEN_L_BRACE:;
|
||||
AstNodeIndex fn_decl_index = reserveNode(p, AST_NODE_TAG_FN_DECL);
|
||||
AstNodeIndex fn_decl_index = reserveNode(p, AST_NODE_FN_DECL);
|
||||
AstNodeIndex body_block = parseBlock(p);
|
||||
return setNode(
|
||||
p,
|
||||
fn_decl_index,
|
||||
(AstNodeItem) {
|
||||
.tag = AST_NODE_TAG_FN_DECL,
|
||||
.tag = AST_NODE_FN_DECL,
|
||||
.main_token = p->nodes.main_tokens[fn_proto],
|
||||
.data = { .lhs = fn_proto, .rhs = body_block },
|
||||
});
|
||||
@@ -885,7 +885,7 @@ break_loop:;
|
||||
}
|
||||
|
||||
void parseRoot(Parser* p) {
|
||||
addNode(&p->nodes, (AstNodeItem) { .tag = AST_NODE_TAG_ROOT, .main_token = 0 });
|
||||
addNode(&p->nodes, (AstNodeItem) { .tag = AST_NODE_ROOT, .main_token = 0 });
|
||||
|
||||
Members root_members = parseContainerMembers(p);
|
||||
AstSubRange root_decls = membersToSpan(root_members, p);
|
||||
|
||||
Reference in New Issue
Block a user