static variable declarations (Experimental)

This commit is contained in:
gingerBill
2018-12-28 13:31:06 +00:00
parent 775f1e2c95
commit a240a3d146
8 changed files with 104 additions and 5 deletions

View File

@@ -3810,6 +3810,34 @@ Ast *parse_stmt(AstFile *f) {
return s;
}
case Token_static: {
CommentGroup *docs = f->lead_comment;
Token token = expect_token(f, Token_static);
Ast *decl = nullptr;
Array<Ast *> list = parse_lhs_expr_list(f);
if (list.count == 0) {
syntax_error(token, "Illegal use of 'static' statement");
expect_semicolon(f, nullptr);
return ast_bad_stmt(f, token, f->curr_token);
}
expect_token_after(f, Token_Colon, "identifier list");
decl = parse_value_decl(f, list, docs);
if (decl != nullptr && decl->kind == Ast_ValueDecl) {
if (decl->ValueDecl.is_mutable) {
decl->ValueDecl.is_static = true;
} else {
error(token, "'static' may only be currently used with variable declaration");
}
return decl;
}
syntax_error(token, "Illegal use of 'static' statement");
return ast_bad_stmt(f, token, f->curr_token);
} break;
case Token_using: {
CommentGroup *docs = f->lead_comment;
Token token = expect_token(f, Token_using);
@@ -3833,10 +3861,6 @@ Ast *parse_stmt(AstFile *f) {
decl = parse_value_decl(f, list, docs);
if (decl != nullptr && decl->kind == Ast_ValueDecl) {
// if (!decl->ValueDecl.is_mutable) {
// syntax_error(token, "'using' may only be applied to variable declarations");
// return decl;
// }
decl->ValueDecl.is_using = true;
return decl;
}