mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
Fixes to access grammar. "delete" => "remove"
This commit is contained in:
@@ -91,6 +91,7 @@ fn void List.add_all(List* list, List* other_list)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fn Type[] List.to_array(List* list, Allocator* using = mem::heap())
|
||||
{
|
||||
if (!list.size) return Type[] {};
|
||||
@@ -99,6 +100,11 @@ fn Type[] List.to_array(List* list, Allocator* using = mem::heap())
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the elements in a list.
|
||||
*
|
||||
* @param [&inout] list "The list to reverse"
|
||||
**/
|
||||
fn void List.reverse(List* list)
|
||||
{
|
||||
if (list.size < 2) return;
|
||||
@@ -203,7 +209,7 @@ fn void List.swap(List* list, usz i, usz j)
|
||||
* @param filter "The function to determine if it should be removed or not"
|
||||
* @return "the number of deleted elements"
|
||||
**/
|
||||
fn usz List.delete_if(List* list, ElementPredicate filter)
|
||||
fn usz List.remove_if(List* list, ElementPredicate filter)
|
||||
{
|
||||
usz size = list.size;
|
||||
for (usz i = size; i > 0; i--)
|
||||
@@ -321,12 +327,13 @@ fn bool List.contains(List* list, Type value)
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param [&inout] list "The list to remove elements from"
|
||||
* @param value "The value to remove"
|
||||
* @return "the number of deleted elements."
|
||||
**/
|
||||
fn usz List.delete(List* list, Type value)
|
||||
fn usz List.remove(List* list, Type value)
|
||||
{
|
||||
usz size = list.size;
|
||||
for (usz i = size; i > 0; i--)
|
||||
@@ -341,6 +348,13 @@ fn usz List.delete(List* list, Type value)
|
||||
return size - list.size;
|
||||
}
|
||||
|
||||
fn void List.remove_all(List* list, List* other_list)
|
||||
{
|
||||
if (!other_list.size) return;
|
||||
foreach (v : other_list) list.remove(v);
|
||||
}
|
||||
|
||||
|
||||
$endif
|
||||
|
||||
$if (Type.kindof == POINTER)
|
||||
|
||||
@@ -77,7 +77,7 @@
|
||||
|
||||
### Stdlib changes
|
||||
- Stdlib updates to string.
|
||||
- Many additions to `List`: `delete`, `array_view`, `add_all`, `compact` etc
|
||||
- Many additions to `List`: `remove`, `array_view`, `add_all`, `compact` etc
|
||||
- Added dstringwriter.
|
||||
- Improved printf formatting.
|
||||
- is_finite/is_nam/is_inf added.
|
||||
|
||||
@@ -104,6 +104,10 @@ bytes_expr
|
||||
| bytes_expr BYTES
|
||||
;
|
||||
|
||||
expr_block
|
||||
: LBRAPIPE opt_stmt_list RBRAPIPE
|
||||
;
|
||||
|
||||
primary_expression
|
||||
: string_expr
|
||||
| INTEGER
|
||||
@@ -125,7 +129,7 @@ primary_expression
|
||||
| '(' type ')' '.' IDENT
|
||||
| '(' type ')' '.' TYPEID
|
||||
| '(' expr ')'
|
||||
| LBRAPIPE opt_stmt_list RBRAPIPE
|
||||
| expr_block
|
||||
| ct_call '(' flat_path ')'
|
||||
| ct_arg '(' expr ')'
|
||||
| ct_analyse '(' expr ')'
|
||||
@@ -156,19 +160,25 @@ call_inline_attributes
|
||||
;
|
||||
|
||||
call_invocation
|
||||
: '(' call_arg_list ')' compound_statement
|
||||
| '(' call_arg_list ')' call_inline_attributes compound_statement
|
||||
| '(' call_arg_list ')'
|
||||
: '(' call_arg_list ')'
|
||||
| '(' call_arg_list ')' call_inline_attributes
|
||||
;
|
||||
|
||||
access_ident
|
||||
: IDENT
|
||||
| AT_IDENT
|
||||
| HASH_IDENT
|
||||
| CT_EVAL '(' expr ')'
|
||||
| TYPEID
|
||||
;
|
||||
|
||||
call_expr
|
||||
: primary_expression
|
||||
| call_expr '[' range_loc ']'
|
||||
| call_expr '[' range_expr ']'
|
||||
| call_expr call_invocation
|
||||
| call_expr '.' IDENT
|
||||
| call_expr '.' AT_IDENT
|
||||
| call_expr call_invocation compound_statement
|
||||
| call_expr '.' access_ident
|
||||
| call_expr INC_OP
|
||||
| call_expr DEC_OP
|
||||
| call_expr '!'
|
||||
|
||||
@@ -90,7 +90,6 @@ inline Expr *parse_precedence_with_left_side(ParseContext *c, Expr *left_side, P
|
||||
while (1)
|
||||
{
|
||||
TokenType tok = c->tok;
|
||||
|
||||
Precedence token_precedence = rules[tok].precedence;
|
||||
// See if the operator precedence is greater than the last, if so exit.
|
||||
// Note that if the token is not an operator then token_precedence = 0
|
||||
@@ -900,10 +899,6 @@ static Expr *parse_call_expr(ParseContext *c, Expr *left)
|
||||
SEMA_ERROR_HERE("Expected a macro body here.");
|
||||
return poisoned_expr;
|
||||
}
|
||||
if (tok_is(c, TOKEN_LBRACE))
|
||||
{
|
||||
ASSIGN_ASTID_OR_RET(call->call_expr.body, parse_compound_stmt(c), poisoned_expr);
|
||||
}
|
||||
Attr *attr;
|
||||
int force_inline = -1;
|
||||
while (1)
|
||||
@@ -947,6 +942,10 @@ static Expr *parse_call_expr(ParseContext *c, Expr *left)
|
||||
call->call_expr.attr_force_inline = force_inline == 1;
|
||||
call->call_expr.attr_force_noinline = force_inline == 0;
|
||||
}
|
||||
if (tok_is(c, TOKEN_LBRACE))
|
||||
{
|
||||
ASSIGN_ASTID_OR_RET(call->call_expr.body, parse_compound_stmt(c), poisoned_expr);
|
||||
}
|
||||
return call;
|
||||
}
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ fn void! test_delete_contains_index()
|
||||
test.push(3);
|
||||
assert(test.array_view() == int[]{ 1, 2, 3 });
|
||||
assert(test.contains(3));
|
||||
test.delete(1);
|
||||
test.remove(1);
|
||||
assert(test.array_view() == int[]{ 2, 3 });
|
||||
assert(!test.contains(1));
|
||||
assert(test.contains(2));
|
||||
@@ -26,7 +26,7 @@ fn void! test_delete_contains_index()
|
||||
assert(test.array_view() == int[]{ 0, 2, 3, 0 });
|
||||
assert(test.index_of(0)! == 0);
|
||||
assert(test.rindex_of(0)! == 3);
|
||||
test.delete(0);
|
||||
test.remove(0);
|
||||
assert(test.len() == 2);
|
||||
assert(test.array_view() == int[]{ 2, 3 });
|
||||
}
|
||||
@@ -43,3 +43,18 @@ fn void! test_compact()
|
||||
assert(test.len() == 1);
|
||||
assert(test.compact() == 0);
|
||||
}
|
||||
|
||||
fn void! test_reverse()
|
||||
{
|
||||
IntList test;
|
||||
test.reverse();
|
||||
test.add_array({ 1, 2 });
|
||||
test.push(3);
|
||||
assert(test.array_view() == int[] { 1, 2, 3});
|
||||
test.reverse();
|
||||
assert(test.array_view() == int[] { 3, 2, 1 });
|
||||
test.push(10);
|
||||
assert(test.array_view() == int[] { 3, 2, 1, 10 });
|
||||
test.reverse();
|
||||
assert(test.array_view() == int[] { 10, 1, 2, 3 });
|
||||
}
|
||||
Reference in New Issue
Block a user