aboutsummaryrefslogtreecommitdiff
path: root/src/checker/expr.c
diff options
context:
space:
mode:
authorGinger Bill <bill@gingerbill.org>2017-01-03 20:31:14 +0000
committerGinger Bill <bill@gingerbill.org>2017-01-03 20:31:14 +0000
commitb76f6a8c27a3811b265d865adc73aac75988e875 (patch)
tree0eee68b5605efb34e3447755c4abba965010b246 /src/checker/expr.c
parentcff1b3dff6d169675309d3f7a8433ed55b9a2007 (diff)
Removed capacity arguments from `new_slice` and `slice_ptr`v0.0.5
Diffstat (limited to 'src/checker/expr.c')
-rw-r--r--src/checker/expr.c48
1 files changed, 2 insertions, 46 deletions
diff --git a/src/checker/expr.c b/src/checker/expr.c
index debbd883a..9c134507f 100644
--- a/src/checker/expr.c
+++ b/src/checker/expr.c
@@ -2643,7 +2643,7 @@ bool check_builtin_procedure(Checker *c, Operand *operand, AstNode *call, i32 id
operand->type = make_type_pointer(c->allocator, type);
} break;
case BuiltinProc_new_slice: {
- // new_slice :: proc(Type, len: int[, cap: int]) -> []Type
+ // new_slice :: proc(Type, len: int) -> []Type
Operand op = {0};
check_expr_or_type(c, &op, ce->args.e[0]);
Type *type = op.type;
@@ -2653,10 +2653,6 @@ bool check_builtin_procedure(Checker *c, Operand *operand, AstNode *call, i32 id
}
AstNode *len = ce->args.e[1];
- AstNode *cap = NULL;
- if (ce->args.count > 2) {
- cap = ce->args.e[2];
- }
check_expr(c, &op, len);
if (op.mode == Addressing_Invalid) {
@@ -2669,23 +2665,6 @@ bool check_builtin_procedure(Checker *c, Operand *operand, AstNode *call, i32 id
return false;
}
- if (cap != NULL) {
- check_expr(c, &op, cap);
- if (op.mode == Addressing_Invalid) {
- return false;
- }
- if (!is_type_integer(op.type)) {
- gbString type_str = type_to_string(operand->type);
- error_node(call, "Capacity for `new_slice` must be an integer, got `%s`", type_str);
- gb_string_free(type_str);
- return false;
- }
- if (ce->args.count > 3) {
- error_node(call, "Too many arguments to `new_slice`, expected either 2 or 3");
- return false;
- }
- }
-
operand->mode = Addressing_Value;
operand->type = make_type_slice(c->allocator, type);
} break;
@@ -3166,7 +3145,7 @@ bool check_builtin_procedure(Checker *c, Operand *operand, AstNode *call, i32 id
#endif
case BuiltinProc_slice_ptr: {
- // slice_ptr :: proc(a: ^T, len: int[, cap: int]) -> []T
+ // slice_ptr :: proc(a: ^T, len: int) -> []T
// ^T cannot be rawptr
Type *ptr_type = base_type(operand->type);
if (!is_type_pointer(ptr_type)) {
@@ -3185,10 +3164,6 @@ bool check_builtin_procedure(Checker *c, Operand *operand, AstNode *call, i32 id
}
AstNode *len = ce->args.e[1];
- AstNode *cap = NULL;
- if (ce->args.count > 2) {
- cap = ce->args.e[2];
- }
Operand op = {0};
check_expr(c, &op, len);
@@ -3203,25 +3178,6 @@ bool check_builtin_procedure(Checker *c, Operand *operand, AstNode *call, i32 id
return false;
}
- if (cap != NULL) {
- check_expr(c, &op, cap);
- if (op.mode == Addressing_Invalid)
- return false;
- if (!is_type_integer(op.type)) {
- gbString type_str = type_to_string(operand->type);
- error_node(call,
- "Capacity for `slice_ptr` must be an integer, got `%s`",
- type_str);
- gb_string_free(type_str);
- return false;
- }
- if (ce->args.count > 3) {
- error_node(call,
- "Too many arguments to `slice_ptr`, expected either 2 or 3");
- return false;
- }
- }
-
operand->type = make_type_slice(c->allocator, ptr_type->Pointer.elem);
operand->mode = Addressing_Value;
} break;