beginning of parseVarDeclProto
This commit is contained in:
@@ -1,2 +1,3 @@
|
|||||||
BasedOnStyle: WebKit
|
BasedOnStyle: WebKit
|
||||||
BreakBeforeBraces: Attach
|
BreakBeforeBraces: Attach
|
||||||
|
ColumnLimit: 80
|
||||||
|
|||||||
112
parser.c
112
parser.c
@@ -508,8 +508,109 @@ static AstNodeIndex parseAssignExpr(Parser* p) {
|
|||||||
return 0; // tcc
|
return 0; // tcc
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static AstNodeIndex parseVarDeclProto(Parser* p) {
|
||||||
|
if (eatToken(p, TOKEN_KEYWORD_CONST) == null_token || eatToken(p, TOKEN_KEYWORD_VAR) == null_token)
|
||||||
|
return null_node;
|
||||||
|
|
||||||
|
fprintf(stderr, "parseVarDeclProto: parsing vars is not supported\n");
|
||||||
|
exit(1);
|
||||||
|
return 0; // tcc
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int8_t prec;
|
||||||
|
AstNodeTag tag;
|
||||||
|
enum {
|
||||||
|
ASSOC_LEFT,
|
||||||
|
ASSOC_NONE,
|
||||||
|
} assoc;
|
||||||
|
} OperInfo;
|
||||||
|
|
||||||
|
static OperInfo operTable(TokenizerTag tok_tag) {
|
||||||
|
switch (tok_tag) {
|
||||||
|
case TOKEN_KEYWORD_OR:
|
||||||
|
return (OperInfo) { .prec = 10, .tag = AST_NODE_BOOL_OR };
|
||||||
|
case TOKEN_KEYWORD_AND:
|
||||||
|
return (OperInfo) { .prec = 20, .tag = AST_NODE_BOOL_AND };
|
||||||
|
|
||||||
|
case TOKEN_EQUAL_EQUAL:
|
||||||
|
return (OperInfo) { .prec = 30, .tag = AST_NODE_EQUAL_EQUAL, .assoc = ASSOC_NONE };
|
||||||
|
case TOKEN_BANG_EQUAL:
|
||||||
|
return (OperInfo) { .prec = 30, .tag = AST_NODE_BANG_EQUAL, .assoc = ASSOC_NONE };
|
||||||
|
case TOKEN_ANGLE_BRACKET_LEFT:
|
||||||
|
return (OperInfo) { .prec = 30, .tag = AST_NODE_LESS_THAN, .assoc = ASSOC_NONE };
|
||||||
|
case TOKEN_ANGLE_BRACKET_RIGHT:
|
||||||
|
return (OperInfo) { .prec = 30, .tag = AST_NODE_GREATER_THAN, .assoc = ASSOC_NONE };
|
||||||
|
case TOKEN_ANGLE_BRACKET_LEFT_EQUAL:
|
||||||
|
return (OperInfo) { .prec = 30, .tag = AST_NODE_LESS_OR_EQUAL, .assoc = ASSOC_NONE };
|
||||||
|
case TOKEN_ANGLE_BRACKET_RIGHT_EQUAL:
|
||||||
|
return (OperInfo) { .prec = 30, .tag = AST_NODE_GREATER_OR_EQUAL, .assoc = ASSOC_NONE };
|
||||||
|
|
||||||
|
case TOKEN_AMPERSAND:
|
||||||
|
return (OperInfo) { .prec = 40, .tag = AST_NODE_BIT_AND };
|
||||||
|
case TOKEN_CARET:
|
||||||
|
return (OperInfo) { .prec = 40, .tag = AST_NODE_BIT_XOR };
|
||||||
|
case TOKEN_PIPE:
|
||||||
|
return (OperInfo) { .prec = 40, .tag = AST_NODE_BIT_OR };
|
||||||
|
case TOKEN_KEYWORD_ORELSE:
|
||||||
|
return (OperInfo) { .prec = 40, .tag = AST_NODE_ORELSE };
|
||||||
|
case TOKEN_KEYWORD_CATCH:
|
||||||
|
return (OperInfo) { .prec = 40, .tag = AST_NODE_CATCH };
|
||||||
|
|
||||||
|
case TOKEN_ANGLE_BRACKET_ANGLE_BRACKET_LEFT:
|
||||||
|
return (OperInfo) { .prec = 50, .tag = AST_NODE_SHL };
|
||||||
|
case TOKEN_ANGLE_BRACKET_ANGLE_BRACKET_LEFT_PIPE:
|
||||||
|
return (OperInfo) { .prec = 50, .tag = AST_NODE_SHL_SAT };
|
||||||
|
case TOKEN_ANGLE_BRACKET_ANGLE_BRACKET_RIGHT:
|
||||||
|
return (OperInfo) { .prec = 50, .tag = AST_NODE_SHR };
|
||||||
|
|
||||||
|
case TOKEN_PLUS:
|
||||||
|
return (OperInfo) { .prec = 60, .tag = AST_NODE_ADD };
|
||||||
|
case TOKEN_MINUS:
|
||||||
|
return (OperInfo) { .prec = 60, .tag = AST_NODE_SUB };
|
||||||
|
case TOKEN_PLUS_PLUS:
|
||||||
|
return (OperInfo) { .prec = 60, .tag = AST_NODE_ARRAY_CAT };
|
||||||
|
case TOKEN_PLUS_PERCENT:
|
||||||
|
return (OperInfo) { .prec = 60, .tag = AST_NODE_ADD_WRAP };
|
||||||
|
case TOKEN_MINUS_PERCENT:
|
||||||
|
return (OperInfo) { .prec = 60, .tag = AST_NODE_SUB_WRAP };
|
||||||
|
case TOKEN_PLUS_PIPE:
|
||||||
|
return (OperInfo) { .prec = 60, .tag = AST_NODE_ADD_SAT };
|
||||||
|
case TOKEN_MINUS_PIPE:
|
||||||
|
return (OperInfo) { .prec = 60, .tag = AST_NODE_SUB_SAT };
|
||||||
|
|
||||||
|
case TOKEN_PIPE_PIPE:
|
||||||
|
return (OperInfo) { .prec = 70, .tag = AST_NODE_MERGE_ERROR_SETS };
|
||||||
|
case TOKEN_ASTERISK:
|
||||||
|
return (OperInfo) { .prec = 70, .tag = AST_NODE_MUL };
|
||||||
|
case TOKEN_SLASH:
|
||||||
|
return (OperInfo) { .prec = 70, .tag = AST_NODE_DIV };
|
||||||
|
case TOKEN_PERCENT:
|
||||||
|
return (OperInfo) { .prec = 70, .tag = AST_NODE_MOD };
|
||||||
|
case TOKEN_ASTERISK_ASTERISK:
|
||||||
|
return (OperInfo) { .prec = 70, .tag = AST_NODE_ARRAY_MULT };
|
||||||
|
case TOKEN_ASTERISK_PERCENT:
|
||||||
|
return (OperInfo) { .prec = 70, .tag = AST_NODE_MUL_WRAP };
|
||||||
|
case TOKEN_ASTERISK_PIPE:
|
||||||
|
return (OperInfo) { .prec = 70, .tag = AST_NODE_MUL_SAT };
|
||||||
|
|
||||||
|
default:
|
||||||
|
return (OperInfo) { .prec = -1, .tag = AST_NODE_ROOT };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static AstNodeIndex expectVarDeclExprStatement(Parser* p) {
|
static AstNodeIndex expectVarDeclExprStatement(Parser* p) {
|
||||||
(void)p;
|
CleanupScratch scratch_top __attribute__((__cleanup__(cleanupScratch))) = initCleanupScratch(p);
|
||||||
|
|
||||||
|
// while(true) {
|
||||||
|
// const AstNodeIndex var_decl_proto = parseVarDeclProto(p);
|
||||||
|
// if (var_decl_proto != 0) {
|
||||||
|
// SLICE_APPEND(AstNodeIndex, &p->scratch, var_decl_proto);
|
||||||
|
// } else {
|
||||||
|
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
fprintf(stderr, "expectVarDeclExprStatement not implemented\n");
|
fprintf(stderr, "expectVarDeclExprStatement not implemented\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
return 0; // tcc
|
return 0; // tcc
|
||||||
@@ -639,15 +740,6 @@ static AstNodeIndex parseLabeledStatement(Parser* p) {
|
|||||||
return null_node;
|
return null_node;
|
||||||
}
|
}
|
||||||
|
|
||||||
static AstNodeIndex parseVarDeclProto(Parser* p) {
|
|
||||||
if (eatToken(p, TOKEN_KEYWORD_CONST) == null_token || eatToken(p, TOKEN_KEYWORD_VAR) == null_token)
|
|
||||||
return null_node;
|
|
||||||
|
|
||||||
fprintf(stderr, "parseVarDeclProto: parsing vars is not supported\n");
|
|
||||||
exit(1);
|
|
||||||
return 0; // tcc
|
|
||||||
}
|
|
||||||
|
|
||||||
static AstNodeIndex parseGlobalVarDecl(Parser* p) {
|
static AstNodeIndex parseGlobalVarDecl(Parser* p) {
|
||||||
const AstNodeIndex var_decl = parseVarDeclProto(p);
|
const AstNodeIndex var_decl = parseVarDeclProto(p);
|
||||||
if (var_decl == 0) {
|
if (var_decl == 0) {
|
||||||
|
|||||||
Reference in New Issue
Block a user