mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
Indexing into a constant array / struct now works at compile time. Constants defined by indexing into another constant could fail codegen. Stdlib nolibc code bugs fixed.
This commit is contained in:
@@ -54,6 +54,32 @@ fn List* List.temp_init(&self, usz initial_capacity = 16)
|
||||
return self.new_init(initial_capacity, allocator::temp()) @inline;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize a new list with an array.
|
||||
*
|
||||
* @param [in] values `The values to initialize the list with.`
|
||||
* @require self.size == 0 "The List must be empty"
|
||||
**/
|
||||
fn List* List.new_init_with_array(&self, Type[] values, Allocator allocator = allocator::heap())
|
||||
{
|
||||
self.new_init(values.len, allocator) @inline;
|
||||
self.add_array(values) @inline;
|
||||
return self;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize a temporary list with an array.
|
||||
*
|
||||
* @param [in] values `The values to initialize the list with.`
|
||||
* @require self.size == 0 "The List must be empty"
|
||||
**/
|
||||
fn List* List.temp_init_with_array(&self, Type[] values)
|
||||
{
|
||||
self.temp_init(values.len) @inline;
|
||||
self.add_array(values) @inline;
|
||||
return self;
|
||||
}
|
||||
|
||||
/**
|
||||
* @require self.size == 0 "The List must be empty"
|
||||
**/
|
||||
@@ -192,6 +218,12 @@ fn Type[] List.array_view(&self)
|
||||
return self.entries[:self.size];
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the values of an array to this list.
|
||||
*
|
||||
* @param [in] array
|
||||
* @ensure self.size >= array.len
|
||||
**/
|
||||
fn void List.add_array(&self, Type[] array)
|
||||
{
|
||||
if (!array.len) return;
|
||||
|
||||
Reference in New Issue
Block a user