tcp_server_listen :: (use server: ^TCP_Server, port: u16) -> bool {
sa: Socket_Address;
make_ipv4_address(^sa, 0x00000000, port);
- if !socket->bind(^sa) do return false;
+ if !(socket->bind(^sa)) do return false;
socket->listen();
thread.spawn(^listener_thread, server, tcp_server_listener);
break;
}
- case Token_Type_Right_Arrow: {
- AstBinaryOp* method_call = make_node(AstBinaryOp, Ast_Kind_Method_Call);
- method_call->token = expect_token(parser, Token_Type_Right_Arrow);
- method_call->left = retval;
- method_call->right = parse_factor(parser);
-
- if (method_call->right && method_call->right->kind == Ast_Kind_Method_Call) {
- AstBinaryOp *inner_method_call = (AstBinaryOp *) method_call->right;
- method_call->right = inner_method_call->left;
- inner_method_call->left = (AstTyped *) method_call;
-
- retval = (AstTyped *) inner_method_call;
-
- } else {
- retval = (AstTyped *) method_call;
- }
- break;
- }
-
case Token_Type_Keyword_If: {
AstIfExpression* if_expression = make_node(AstIfExpression, Ast_Kind_If_Expression);
if_expression->token = expect_token(parser, Token_Type_Keyword_If);
case Binary_Op_Divide: return 8;
case Binary_Op_Modulus: return 9;
+
+ case Binary_Op_Method_Call: return 10;
default: return -1;
}
case Token_Type_Pipe: return Binary_Op_Pipe;
case Token_Type_Dot_Dot: return Binary_Op_Range;
case '[': return Binary_Op_Subscript;
+ case Token_Type_Right_Arrow: return Binary_Op_Method_Call;
default: return Binary_Op_Count;
}
}
consume_token(parser);
AstBinaryOp* bin_op;
- if (bin_op_kind == Binary_Op_Pipe) bin_op = make_node(AstBinaryOp, Ast_Kind_Pipe);
- else if (bin_op_kind == Binary_Op_Range) bin_op = (AstBinaryOp *) make_node(AstRangeLiteral, Ast_Kind_Range_Literal);
- else bin_op = make_node(AstBinaryOp, Ast_Kind_Binary_Op);
+ if (bin_op_kind == Binary_Op_Pipe) bin_op = make_node(AstBinaryOp, Ast_Kind_Pipe);
+ else if (bin_op_kind == Binary_Op_Method_Call) bin_op = make_node(AstBinaryOp, Ast_Kind_Method_Call);
+ else if (bin_op_kind == Binary_Op_Range) bin_op = (AstBinaryOp *) make_node(AstRangeLiteral, Ast_Kind_Range_Literal);
+ else bin_op = make_node(AstBinaryOp, Ast_Kind_Binary_Op);
bin_op->token = bin_op_tok;
bin_op->operation = bin_op_kind;
return Symres_Error;
}
- // AstAlias *left_alias = onyx_ast_node_new(context.ast_alloc, sizeof(AstAlias), Ast_Kind_Alias);
- // left_alias->token = (*mcall)->left->token;
- // left_alias->alias = (*mcall)->left;
- // (*mcall)->left = (AstTyped *) left_alias;
-
AstFieldAccess* implicit_field_access = make_field_access(context.ast_alloc, (*mcall)->left, NULL);
implicit_field_access->token = ((AstCall *) (*mcall)->right)->callee->token;
((AstCall *) (*mcall)->right)->callee = (AstTyped *) implicit_field_access;
attempt_add :: macro (cond: Code, dx, dy: i32) {
if #unquote cond {
- if !tried->has(.{try.x + dx, try.y + dy}) {
+ if !(tried->has(.{try.x + dx, try.y + dy})) {
if found := array.find_ptr(to_try.data, .{try.x + dx, try.y + dy, 0}); found != null {
found.cost = math.min(cell_value, found.cost);
} else {