Initial working version of types as expressions
This commit is contained in:
@@ -151,7 +151,7 @@ parse_expr_compound(){
|
||||
}
|
||||
else if(token_is(TK_Identifier)){
|
||||
token = token_next();
|
||||
name = ast_expr_identifier(token, token->intern_val);
|
||||
name = ast_ident(token, token->intern_val);
|
||||
token_expect(TK_Assign);
|
||||
}
|
||||
|
||||
@@ -271,7 +271,7 @@ parse_lambda(Token *token, B32 is_typespec = false){
|
||||
}
|
||||
token_expect(TK_CloseParen);
|
||||
|
||||
Ast_Typespec *ret = parse_optional_type();
|
||||
Ast_Expr *ret = parse_optional_type();
|
||||
Ast_Block *block = is_typespec ? 0 : parse_block();
|
||||
Ast_Lambda *result = ast_lambda(token, params, ret, block);
|
||||
return result;
|
||||
@@ -280,9 +280,9 @@ parse_lambda(Token *token, B32 is_typespec = false){
|
||||
function Ast_Expr *
|
||||
null_denotation(Token *token){
|
||||
switch(token->kind){
|
||||
case TK_StringLit : return ast_expr_string(token, token->intern_val);
|
||||
case TK_Identifier : return ast_expr_identifier(token, token->intern_val);
|
||||
case TK_Integer : return ast_expr_integer(token, token->int_val);
|
||||
case TK_StringLit : return ast_str(token, token->intern_val);
|
||||
case TK_Identifier : return ast_ident(token, token->intern_val);
|
||||
case TK_Integer : return ast_int(token, token->int_val);
|
||||
case TK_Pointer : return ast_expr_unary(token, TK_Pointer, parse_expr());
|
||||
case TK_Dereference: return ast_expr_unary(token, TK_Dereference, parse_expr());
|
||||
case TK_OpenBracket: {
|
||||
@@ -295,7 +295,7 @@ null_denotation(Token *token){
|
||||
token_expect(TK_OpenParen);
|
||||
Ast_Expr *expr = parse_expr();
|
||||
token_expect(TK_Colon);
|
||||
Ast_Typespec *typespec = parse_typespec();
|
||||
Ast_Expr *typespec = parse_expr();
|
||||
token_expect(TK_CloseParen);
|
||||
return ast_expr_cast(token, expr, typespec);
|
||||
}
|
||||
@@ -435,9 +435,9 @@ parse_named(B32 is_global){
|
||||
result = ast_const(name, name->intern_val, expr);
|
||||
}
|
||||
else if(token_match(TK_Colon)){
|
||||
Ast_Typespec *typespec = 0;
|
||||
Ast_Expr *expr = 0;
|
||||
if(!token_is(TK_Assign)) typespec = parse_typespec();
|
||||
Ast_Expr *typespec = 0;
|
||||
Ast_Expr *expr = 0;
|
||||
if(!token_is(TK_Assign)) typespec = parse_expr();
|
||||
if(token_match(TK_Assign)) expr = parse_expr();
|
||||
if(!expr && !typespec) parsing_error(name, "invalid declaration, no type or value");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user