Commit 5c094d7390

Andrew Kelley <superjoe30@gmail.com>
2017-05-04 20:05:06
std: rename List to ArrayList and re-organize...
...the exports of std. closes #356
1 parent b6a679c
std/os/index.zig
@@ -36,7 +36,7 @@ const cstr = @import("../cstr.zig");
 
 const io = @import("../io.zig");
 const base64 = @import("../base64.zig");
-const List = @import("../list.zig").List;
+const ArrayList = @import("../array_list.zig").ArrayList;
 
 error Unexpected;
 error SystemResources;
@@ -683,7 +683,7 @@ start_over:
         };
         defer dir.close();
 
-        var full_entry_buf = List(u8).init(allocator);
+        var full_entry_buf = ArrayList(u8).init(allocator);
         defer full_entry_buf.deinit();
 
         while (%return dir.next()) |entry| {
std/special/build_runner.zig
@@ -5,7 +5,7 @@ const fmt = std.fmt;
 const os = std.os;
 const Builder = std.build.Builder;
 const mem = std.mem;
-const List = std.list.List;
+const ArrayList = std.ArrayList;
 
 error InvalidArgs;
 
@@ -51,7 +51,7 @@ pub fn main() -> %void {
     var builder = Builder.init(allocator, zig_exe, build_root, cache_root);
     defer builder.deinit();
 
-    var targets = List([]const u8).init(allocator);
+    var targets = ArrayList([]const u8).init(allocator);
 
     var prefix: ?[]const u8 = null;
 
std/list.zig → std/array_list.zig
@@ -3,7 +3,7 @@ const assert = debug.assert;
 const mem = @import("mem.zig");
 const Allocator = mem.Allocator;
 
-pub fn List(comptime T: type) -> type{
+pub fn ArrayList(comptime T: type) -> type{
     struct {
         const Self = this;
 
@@ -74,8 +74,8 @@ pub fn List(comptime T: type) -> type{
     }
 }
 
-test "basic list test" {
-    var list = List(i32).init(&debug.global_allocator);
+test "basic ArrayList test" {
+    var list = ArrayList(i32).init(&debug.global_allocator);
     defer list.deinit();
 
     {var i: usize = 0; while (i < 10) : (i += 1) {
std/buffer.zig
@@ -2,11 +2,11 @@ const debug = @import("debug.zig");
 const mem = @import("mem.zig");
 const Allocator = mem.Allocator;
 const assert = debug.assert;
-const List = @import("list.zig").List;
+const ArrayList = @import("array_list.zig").ArrayList;
 
 /// A buffer that allocates memory and maintains a null byte at the end.
 pub const Buffer = struct {
-    list: List(u8),
+    list: ArrayList(u8),
 
     /// Must deinitialize with deinit.
     pub fn init(allocator: &Allocator, m: []const u8) -> %Buffer {
@@ -29,7 +29,7 @@ pub const Buffer = struct {
     /// * ::resize
     pub fn initNull(allocator: &Allocator) -> Buffer {
         Buffer {
-            .list = List(u8).init(allocator),
+            .list = ArrayList(u8).init(allocator),
         }
     }
 
std/build.zig
@@ -3,7 +3,7 @@ const io = @import("io.zig");
 const mem = @import("mem.zig");
 const debug = @import("debug.zig");
 const assert = debug.assert;
-const List = @import("list.zig").List;
+const ArrayList = @import("array_list.zig").ArrayList;
 const HashMap = @import("hash_map.zig").HashMap;
 const Allocator = @import("mem.zig").Allocator;
 const os = @import("os/index.zig");
@@ -26,22 +26,22 @@ pub const Builder = struct {
     have_uninstall_step: bool,
     have_install_step: bool,
     allocator: &Allocator,
-    lib_paths: List([]const u8),
-    include_paths: List([]const u8),
-    rpaths: List([]const u8),
+    lib_paths: ArrayList([]const u8),
+    include_paths: ArrayList([]const u8),
+    rpaths: ArrayList([]const u8),
     user_input_options: UserInputOptionsMap,
     available_options_map: AvailableOptionsMap,
-    available_options_list: List(AvailableOption),
+    available_options_list: ArrayList(AvailableOption),
     verbose: bool,
     invalid_user_input: bool,
     zig_exe: []const u8,
     default_step: &Step,
     env_map: BufMap,
-    top_level_steps: List(&TopLevelStep),
+    top_level_steps: ArrayList(&TopLevelStep),
     prefix: []const u8,
     lib_dir: []const u8,
     exe_dir: []const u8,
-    installed_files: List([]const u8),
+    installed_files: ArrayList([]const u8),
     build_root: []const u8,
     cache_root: []const u8,
 
@@ -63,7 +63,7 @@ pub const Builder = struct {
     const UserValue = enum {
         Flag,
         Scalar: []const u8,
-        List: List([]const u8),
+        List: ArrayList([]const u8),
     };
 
     const TypeId = enum {
@@ -89,19 +89,19 @@ pub const Builder = struct {
             .verbose = false,
             .invalid_user_input = false,
             .allocator = allocator,
-            .lib_paths = List([]const u8).init(allocator),
-            .include_paths = List([]const u8).init(allocator),
-            .rpaths = List([]const u8).init(allocator),
+            .lib_paths = ArrayList([]const u8).init(allocator),
+            .include_paths = ArrayList([]const u8).init(allocator),
+            .rpaths = ArrayList([]const u8).init(allocator),
             .user_input_options = UserInputOptionsMap.init(allocator),
             .available_options_map = AvailableOptionsMap.init(allocator),
-            .available_options_list = List(AvailableOption).init(allocator),
-            .top_level_steps = List(&TopLevelStep).init(allocator),
+            .available_options_list = ArrayList(AvailableOption).init(allocator),
+            .top_level_steps = ArrayList(&TopLevelStep).init(allocator),
             .default_step = undefined,
             .env_map = %%os.getEnvMap(allocator),
             .prefix = undefined,
             .lib_dir = undefined,
             .exe_dir = undefined,
-            .installed_files = List([]const u8).init(allocator),
+            .installed_files = ArrayList([]const u8).init(allocator),
             .uninstall_tls = TopLevelStep {
                 .step = Step.init("uninstall", allocator, makeUninstall),
                 .description = "Remove build artifacts from prefix path",
@@ -225,7 +225,7 @@ pub const Builder = struct {
     }
 
     pub fn make(self: &Builder, step_names: []const []const u8) -> %void {
-        var wanted_steps = List(&Step).init(self.allocator);
+        var wanted_steps = ArrayList(&Step).init(self.allocator);
         defer wanted_steps.deinit();
 
         if (step_names.len == 0) {
@@ -433,7 +433,7 @@ pub const Builder = struct {
             switch (prev_value.value) {
                 UserValue.Scalar => |s| {
                     // turn it into a list
-                    var list = List([]const u8).init(self.allocator);
+                    var list = ArrayList([]const u8).init(self.allocator);
                     %%list.append(s);
                     %%list.append(value);
                     _ = %%self.user_input_options.put(name, UserInputOption {
@@ -695,9 +695,9 @@ pub const LibExeObjStep = struct {
     out_filename: []const u8,
     major_only_filename: []const u8,
     name_only_filename: []const u8,
-    object_files: List([]const u8),
-    assembly_files: List([]const u8),
-    packages: List(Pkg),
+    object_files: ArrayList([]const u8),
+    assembly_files: ArrayList([]const u8),
+    packages: ArrayList(Pkg),
 
     const Pkg = struct {
         name: []const u8,
@@ -758,9 +758,9 @@ pub const LibExeObjStep = struct {
             .out_h_filename = builder.fmt("{}.h", name),
             .major_only_filename = undefined,
             .name_only_filename = undefined,
-            .object_files = List([]const u8).init(builder.allocator),
-            .assembly_files = List([]const u8).init(builder.allocator),
-            .packages = List(Pkg).init(builder.allocator),
+            .object_files = ArrayList([]const u8).init(builder.allocator),
+            .assembly_files = ArrayList([]const u8).init(builder.allocator),
+            .packages = ArrayList(Pkg).init(builder.allocator),
         };
         self.computeOutFileNames();
         return self;
@@ -875,7 +875,7 @@ pub const LibExeObjStep = struct {
             return error.NeedAnObject;
         }
 
-        var zig_args = List([]const u8).init(builder.allocator);
+        var zig_args = ArrayList([]const u8).init(builder.allocator);
         defer zig_args.deinit();
 
         const cmd = switch (self.kind) {
@@ -1043,7 +1043,7 @@ pub const TestStep = struct {
         const self = @fieldParentPtr(TestStep, "step", step);
         const builder = self.builder;
 
-        var zig_args = List([]const u8).init(builder.allocator);
+        var zig_args = ArrayList([]const u8).init(builder.allocator);
         defer zig_args.deinit();
 
         %%zig_args.append("test");
@@ -1104,14 +1104,14 @@ pub const CLibExeObjStep = struct {
     output_path: ?[]const u8,
     static: bool,
     version: Version,
-    cflags: List([]const u8),
-    source_files: List([]const u8),
-    object_files: List([]const u8),
+    cflags: ArrayList([]const u8),
+    source_files: ArrayList([]const u8),
+    object_files: ArrayList([]const u8),
     link_libs: BufSet,
-    full_path_libs: List([]const u8),
+    full_path_libs: ArrayList([]const u8),
     target: Target,
     builder: &Builder,
-    include_dirs: List([]const u8),
+    include_dirs: ArrayList([]const u8),
     major_only_filename: []const u8,
     name_only_filename: []const u8,
     object_src: []const u8,
@@ -1158,13 +1158,13 @@ pub const CLibExeObjStep = struct {
             .version = *version,
             .static = static,
             .target = Target.Native,
-            .cflags = List([]const u8).init(builder.allocator),
-            .source_files = List([]const u8).init(builder.allocator),
-            .object_files = List([]const u8).init(builder.allocator),
+            .cflags = ArrayList([]const u8).init(builder.allocator),
+            .source_files = ArrayList([]const u8).init(builder.allocator),
+            .object_files = ArrayList([]const u8).init(builder.allocator),
             .step = Step.init(name, builder.allocator, make),
             .link_libs = BufSet.init(builder.allocator),
-            .full_path_libs = List([]const u8).init(builder.allocator),
-            .include_dirs = List([]const u8).init(builder.allocator),
+            .full_path_libs = ArrayList([]const u8).init(builder.allocator),
+            .include_dirs = ArrayList([]const u8).init(builder.allocator),
             .output_path = null,
             .out_filename = undefined,
             .major_only_filename = undefined,
@@ -1267,7 +1267,7 @@ pub const CLibExeObjStep = struct {
         }
     }
 
-    fn appendCompileFlags(self: &CLibExeObjStep, args: &List([]const u8)) {
+    fn appendCompileFlags(self: &CLibExeObjStep, args: &ArrayList([]const u8)) {
         if (!self.strip) {
             %%args.append("-g");
         }
@@ -1300,7 +1300,7 @@ pub const CLibExeObjStep = struct {
         const cc = os.getEnv("CC") ?? "cc";
         const builder = self.builder;
 
-        var cc_args = List([]const u8).init(builder.allocator);
+        var cc_args = ArrayList([]const u8).init(builder.allocator);
         defer cc_args.deinit();
 
         switch (self.kind) {
@@ -1646,7 +1646,7 @@ pub const RemoveDirStep = struct {
 pub const Step = struct {
     name: []const u8,
     makeFn: fn(self: &Step) -> %void,
-    dependencies: List(&Step),
+    dependencies: ArrayList(&Step),
     loop_flag: bool,
     done_flag: bool,
 
@@ -1654,7 +1654,7 @@ pub const Step = struct {
         Step {
             .name = name,
             .makeFn = makeFn,
-            .dependencies = List(&Step).init(allocator),
+            .dependencies = ArrayList(&Step).init(allocator),
             .loop_flag = false,
             .done_flag = false,
         }
std/debug.zig
@@ -3,7 +3,7 @@ const io = @import("io.zig");
 const os = @import("os/index.zig");
 const elf = @import("elf.zig");
 const DW = @import("dwarf.zig");
-const List = @import("list.zig").List;
+const ArrayList = @import("array_list.zig").ArrayList;
 const builtin = @import("builtin");
 
 error MissingDebugInfo;
@@ -60,8 +60,8 @@ pub fn writeStackTrace(out_stream: &io.OutStream, allocator: &mem.Allocator, tty
                 .debug_abbrev = undefined,
                 .debug_str = undefined,
                 .debug_line = undefined,
-                .abbrev_table_list = List(AbbrevTableHeader).init(allocator),
-                .compile_unit_list = List(CompileUnit).init(allocator),
+                .abbrev_table_list = ArrayList(AbbrevTableHeader).init(allocator),
+                .compile_unit_list = ArrayList(CompileUnit).init(allocator),
             };
             const st = &stack_trace;
             st.self_exe_stream = %return io.openSelfExe();
@@ -179,8 +179,8 @@ const ElfStackTrace = struct {
     debug_abbrev: &elf.SectionHeader,
     debug_str: &elf.SectionHeader,
     debug_line: &elf.SectionHeader,
-    abbrev_table_list: List(AbbrevTableHeader),
-    compile_unit_list: List(CompileUnit),
+    abbrev_table_list: ArrayList(AbbrevTableHeader),
+    compile_unit_list: ArrayList(CompileUnit),
 
     pub fn allocator(self: &const ElfStackTrace) -> &mem.Allocator {
         return self.abbrev_table_list.allocator;
@@ -204,7 +204,7 @@ const CompileUnit = struct {
     pc_range: ?PcRange,
 };
 
-const AbbrevTable = List(AbbrevTableEntry);
+const AbbrevTable = ArrayList(AbbrevTableEntry);
 
 const AbbrevTableHeader = struct {
     // offset from .debug_abbrev
@@ -216,7 +216,7 @@ const AbbrevTableEntry = struct {
     has_children: bool,
     abbrev_code: u64,
     tag_id: u64,
-    attrs: List(AbbrevAttr),
+    attrs: ArrayList(AbbrevAttr),
 };
 
 const AbbrevAttr = struct {
@@ -254,7 +254,7 @@ const Constant = struct {
 const Die = struct {
     tag_id: u64,
     has_children: bool,
-    attrs: List(Attr),
+    attrs: ArrayList(Attr),
 
     const Attr = struct {
         id: u64,
@@ -324,7 +324,7 @@ const LineNumberProgram = struct {
 
     target_address: usize,
     include_dirs: []const []const u8,
-    file_entries: &List(FileEntry),
+    file_entries: &ArrayList(FileEntry),
 
     prev_address: usize,
     prev_file: usize,
@@ -335,7 +335,7 @@ const LineNumberProgram = struct {
     prev_end_sequence: bool,
 
     pub fn init(is_stmt: bool, include_dirs: []const []const u8,
-        file_entries: &List(FileEntry), target_address: usize) -> LineNumberProgram
+        file_entries: &ArrayList(FileEntry), target_address: usize) -> LineNumberProgram
     {
         LineNumberProgram {
             .address = 0,
@@ -394,7 +394,7 @@ const LineNumberProgram = struct {
 };
 
 fn readStringRaw(allocator: &mem.Allocator, in_stream: &io.InStream) -> %[]u8 {
-    var buf = List(u8).init(allocator);
+    var buf = ArrayList(u8).init(allocator);
     while (true) {
         const byte = %return in_stream.readByte();
         if (byte == 0)
@@ -525,7 +525,7 @@ fn parseAbbrevTable(st: &ElfStackTrace) -> %AbbrevTable {
             .abbrev_code = abbrev_code,
             .tag_id = %return readULeb128(in_stream),
             .has_children = (%return in_stream.readByte()) == DW.CHILDREN_yes,
-            .attrs = List(AbbrevAttr).init(st.allocator()),
+            .attrs = ArrayList(AbbrevAttr).init(st.allocator()),
         });
         const attrs = &result.items[result.len - 1].attrs;
 
@@ -574,7 +574,7 @@ fn parseDie(st: &ElfStackTrace, abbrev_table: &const AbbrevTable, is_64: bool) -
     var result = Die {
         .tag_id = table_entry.tag_id,
         .has_children = table_entry.has_children,
-        .attrs = List(Die.Attr).init(st.allocator()),
+        .attrs = ArrayList(Die.Attr).init(st.allocator()),
     };
     %return result.attrs.resize(table_entry.attrs.len);
     for (table_entry.attrs.toSliceConst()) |attr, i| {
@@ -632,7 +632,7 @@ fn getLineNumberInfo(st: &ElfStackTrace, compile_unit: &const CompileUnit, targe
             standard_opcode_lengths[i] = %return in_stream.readByte();
         }}
 
-        var include_directories = List([]u8).init(st.allocator());
+        var include_directories = ArrayList([]u8).init(st.allocator());
         %return include_directories.append(compile_unit_cwd);
         while (true) {
             const dir = %return st.readString();
@@ -641,7 +641,7 @@ fn getLineNumberInfo(st: &ElfStackTrace, compile_unit: &const CompileUnit, targe
             %return include_directories.append(dir);
         }
 
-        var file_entries = List(FileEntry).init(st.allocator());
+        var file_entries = ArrayList(FileEntry).init(st.allocator());
         var prog = LineNumberProgram.init(default_is_stmt, include_directories.toSliceConst(),
             &file_entries, target_address);
 
std/index.zig
@@ -1,15 +1,21 @@
+pub const ArrayList = @import("array_list.zig").ArrayList;
+pub const BufMap = @import("buf_map.zig").BufMap;
+pub const BufSet = @import("buf_set.zig").BufSet;
+pub const Buffer = @import("buffer.zig").Buffer;
+pub const HashMap = @import("hash_map.zig").HashMap;
+pub const LinkedList = @import("linked_list.zig").LinkedList;
+
 pub const base64 = @import("base64.zig");
-pub const buffer = @import("buffer.zig");
 pub const build = @import("build.zig");
 pub const c = @import("c/index.zig");
 pub const cstr = @import("cstr.zig");
 pub const debug = @import("debug.zig");
+pub const dwarf = @import("dwarf.zig");
+pub const elf = @import("elf.zig");
 pub const empty_import = @import("empty.zig");
+pub const endian = @import("endian.zig");
 pub const fmt = @import("fmt.zig");
-pub const hash_map = @import("hash_map.zig");
 pub const io = @import("io.zig");
-pub const linked_list = @import("linked_list.zig");
-pub const list = @import("list.zig");
 pub const math = @import("math.zig");
 pub const mem = @import("mem.zig");
 pub const net = @import("net.zig");
@@ -20,17 +26,24 @@ pub const target = @import("target.zig");
 
 test "std" {
     // run tests from these
+    _ = @import("array_list.zig").ArrayList;
+    _ = @import("buf_map.zig").BufMap;
+    _ = @import("buf_set.zig").BufSet;
+    _ = @import("buffer.zig").Buffer;
+    _ = @import("hash_map.zig").HashMap;
+    _ = @import("linked_list.zig").LinkedList;
+
     _ = @import("base64.zig");
-    _ = @import("buffer.zig");
     _ = @import("build.zig");
     _ = @import("c/index.zig");
     _ = @import("cstr.zig");
     _ = @import("debug.zig");
+    _ = @import("dwarf.zig");
+    _ = @import("elf.zig");
+    _ = @import("empty.zig");
+    _ = @import("endian.zig");
     _ = @import("fmt.zig");
-    _ = @import("hash_map.zig");
     _ = @import("io.zig");
-    _ = @import("linked_list.zig");
-    _ = @import("list.zig");
     _ = @import("math.zig");
     _ = @import("mem.zig");
     _ = @import("net.zig");
std/linked_list.zig
@@ -6,7 +6,7 @@ const Allocator = mem.Allocator;
 /// Generic doubly linked list.
 pub fn LinkedList(comptime T: type) -> type {
     struct {
-        const List = this;
+        const Self = this;
 
         /// Node inside the linked list wrapping the actual data.
         pub const Node = struct {
@@ -27,8 +27,8 @@ pub fn LinkedList(comptime T: type) -> type {
         ///
         /// Returns:
         ///     An empty linked list.
-        pub fn init(allocator: &Allocator) -> List {
-            List {
+        pub fn init(allocator: &Allocator) -> Self {
+            Self {
                 .first = null,
                 .last  = null,
                 .len   = 0,
@@ -41,7 +41,7 @@ pub fn LinkedList(comptime T: type) -> type {
         /// Arguments:
         ///     node: Pointer to a node in the list.
         ///     new_node: Pointer to the new node to insert.
-        pub fn insertAfter(list: &List, node: &Node, new_node: &Node) {
+        pub fn insertAfter(list: &Self, node: &Node, new_node: &Node) {
             new_node.prev = node;
             if (node.next) |next_node| {
                 // Intermediate node.
@@ -62,7 +62,7 @@ pub fn LinkedList(comptime T: type) -> type {
         /// Arguments:
         ///     node: Pointer to a node in the list.
         ///     new_node: Pointer to the new node to insert.
-        pub fn insertBefore(list: &List, node: &Node, new_node: &Node) {
+        pub fn insertBefore(list: &Self, node: &Node, new_node: &Node) {
             new_node.next = node;
             if (node.prev) |prev_node| {
                 // Intermediate node.
@@ -82,7 +82,7 @@ pub fn LinkedList(comptime T: type) -> type {
         ///
         /// Arguments:
         ///     new_node: Pointer to the new node to insert.
-        pub fn append(list: &List, new_node: &Node) {
+        pub fn append(list: &Self, new_node: &Node) {
             if (list.last) |last| {
                 // Insert after last.
                 list.insertAfter(last, new_node);
@@ -96,7 +96,7 @@ pub fn LinkedList(comptime T: type) -> type {
         ///
         /// Arguments:
         ///     new_node: Pointer to the new node to insert.
-        pub fn prepend(list: &List, new_node: &Node) {
+        pub fn prepend(list: &Self, new_node: &Node) {
             if (list.first) |first| {
                 // Insert before first.
                 list.insertBefore(first, new_node);
@@ -115,7 +115,7 @@ pub fn LinkedList(comptime T: type) -> type {
         ///
         /// Arguments:
         ///     node: Pointer to the node to be removed.
-        pub fn remove(list: &List, node: &Node) {
+        pub fn remove(list: &Self, node: &Node) {
             if (node.prev) |prev_node| {
                 // Intermediate node.
                 prev_node.next = node.next;
@@ -139,7 +139,7 @@ pub fn LinkedList(comptime T: type) -> type {
         ///
         /// Returns:
         ///     A pointer to the last node in the list.
-        pub fn pop(list: &List) -> ?&Node {
+        pub fn pop(list: &Self) -> ?&Node {
             const last = list.last ?? return null;
             list.remove(last);
             return last;
@@ -149,7 +149,7 @@ pub fn LinkedList(comptime T: type) -> type {
         ///
         /// Returns:
         ///     A pointer to the first node in the list.
-        pub fn popFirst(list: &List) -> ?&Node {
+        pub fn popFirst(list: &Self) -> ?&Node {
             const first = list.first ?? return null;
             list.remove(first);
             return first;
@@ -159,7 +159,7 @@ pub fn LinkedList(comptime T: type) -> type {
         ///
         /// Returns:
         ///     A pointer to the new node.
-        pub fn allocateNode(list: &List) -> %&Node {
+        pub fn allocateNode(list: &Self) -> %&Node {
             list.allocator.create(Node)
         }
 
@@ -167,7 +167,7 @@ pub fn LinkedList(comptime T: type) -> type {
         ///
         /// Arguments:
         ///     node: Pointer to the node to deallocate.
-        pub fn destroyNode(list: &List, node: &Node) {
+        pub fn destroyNode(list: &Self, node: &Node) {
             list.allocator.destroy(node);
         }
 
@@ -178,7 +178,7 @@ pub fn LinkedList(comptime T: type) -> type {
         ///
         /// Returns:
         ///     A pointer to the new node.
-        pub fn createNode(list: &List, data: &const T) -> %&Node {
+        pub fn createNode(list: &Self, data: &const T) -> %&Node {
             var node = %return list.allocateNode();
             *node = Node {
                 .prev = null,
test/tests.zig
@@ -4,11 +4,11 @@ const build = std.build;
 const os = std.os;
 const StdIo = os.ChildProcess.StdIo;
 const Term = os.ChildProcess.Term;
-const Buffer = std.buffer.Buffer;
+const Buffer = std.Buffer;
 const io = std.io;
 const mem = std.mem;
 const fmt = std.fmt;
-const List = std.list.List;
+const ArrayList = std.ArrayList;
 const Mode = @import("builtin").Mode;
 
 const compare_output = @import("compare_output.zig");
@@ -138,7 +138,7 @@ pub const CompareOutputContext = struct {
 
     const TestCase = struct {
         name: []const u8,
-        sources: List(SourceFile),
+        sources: ArrayList(SourceFile),
         expected_output: []const u8,
         link_libc: bool,
         special: Special,
@@ -304,7 +304,7 @@ pub const CompareOutputContext = struct {
     {
         var tc = TestCase {
             .name = name,
-            .sources = List(TestCase.SourceFile).init(self.b.allocator),
+            .sources = ArrayList(TestCase.SourceFile).init(self.b.allocator),
             .expected_output = expected_output,
             .link_libc = false,
             .special = special,
@@ -432,8 +432,8 @@ pub const CompileErrorContext = struct {
 
     const TestCase = struct {
         name: []const u8,
-        sources: List(SourceFile),
-        expected_errors: List([]const u8),
+        sources: ArrayList(SourceFile),
+        expected_errors: ArrayList([]const u8),
         link_libc: bool,
         is_exe: bool,
 
@@ -486,7 +486,7 @@ pub const CompileErrorContext = struct {
             const root_src = %%os.path.join(b.allocator, b.cache_root, self.case.sources.items[0].filename);
             const obj_path = %%os.path.join(b.allocator, b.cache_root, "test.o");
 
-            var zig_args = List([]const u8).init(b.allocator);
+            var zig_args = ArrayList([]const u8).init(b.allocator);
             %%zig_args.append(if (self.case.is_exe) "build_exe" else "build_obj");
             %%zig_args.append(b.pathFromRoot(root_src));
 
@@ -583,8 +583,8 @@ pub const CompileErrorContext = struct {
         const tc = %%self.b.allocator.create(TestCase);
         *tc = TestCase {
             .name = name,
-            .sources = List(TestCase.SourceFile).init(self.b.allocator),
-            .expected_errors = List([]const u8).init(self.b.allocator),
+            .sources = ArrayList(TestCase.SourceFile).init(self.b.allocator),
+            .expected_errors = ArrayList([]const u8).init(self.b.allocator),
             .link_libc = false,
             .is_exe = false,
         };
@@ -660,7 +660,7 @@ pub const BuildExamplesContext = struct {
                 return;
         }
 
-        var zig_args = List([]const u8).init(b.allocator);
+        var zig_args = ArrayList([]const u8).init(b.allocator);
         %%zig_args.append("build");
 
         %%zig_args.append("--build-file");
@@ -713,8 +713,8 @@ pub const ParseHContext = struct {
 
     const TestCase = struct {
         name: []const u8,
-        sources: List(SourceFile),
-        expected_lines: List([]const u8),
+        sources: ArrayList(SourceFile),
+        expected_lines: ArrayList([]const u8),
         allow_warnings: bool,
 
         const SourceFile = struct {
@@ -761,7 +761,7 @@ pub const ParseHContext = struct {
 
             const root_src = %%os.path.join(b.allocator, b.cache_root, self.case.sources.items[0].filename);
 
-            var zig_args = List([]const u8).init(b.allocator);
+            var zig_args = ArrayList([]const u8).init(b.allocator);
             %%zig_args.append("parseh");
             %%zig_args.append(b.pathFromRoot(root_src));
 
@@ -847,8 +847,8 @@ pub const ParseHContext = struct {
         const tc = %%self.b.allocator.create(TestCase);
         *tc = TestCase {
             .name = name,
-            .sources = List(TestCase.SourceFile).init(self.b.allocator),
-            .expected_lines = List([]const u8).init(self.b.allocator),
+            .sources = ArrayList(TestCase.SourceFile).init(self.b.allocator),
+            .expected_lines = ArrayList([]const u8).init(self.b.allocator),
             .allow_warnings = allow_warnings,
         };
         tc.addSourceFile("source.h", source);
CMakeLists.txt
@@ -196,6 +196,7 @@ install(TARGETS zig DESTINATION bin)
 
 install(FILES ${C_HEADERS} DESTINATION ${C_HEADERS_DEST})
 
+install(FILES "${CMAKE_SOURCE_DIR}/std/array_list.zig" DESTINATION "${ZIG_STD_DEST}")
 install(FILES "${CMAKE_SOURCE_DIR}/std/base64.zig" DESTINATION "${ZIG_STD_DEST}")
 install(FILES "${CMAKE_SOURCE_DIR}/std/buf_map.zig" DESTINATION "${ZIG_STD_DEST}")
 install(FILES "${CMAKE_SOURCE_DIR}/std/buf_set.zig" DESTINATION "${ZIG_STD_DEST}")
@@ -216,7 +217,6 @@ install(FILES "${CMAKE_SOURCE_DIR}/std/hash_map.zig" DESTINATION "${ZIG_STD_DEST
 install(FILES "${CMAKE_SOURCE_DIR}/std/index.zig" DESTINATION "${ZIG_STD_DEST}")
 install(FILES "${CMAKE_SOURCE_DIR}/std/io.zig" DESTINATION "${ZIG_STD_DEST}")
 install(FILES "${CMAKE_SOURCE_DIR}/std/linked_list.zig" DESTINATION "${ZIG_STD_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/std/list.zig" DESTINATION "${ZIG_STD_DEST}")
 install(FILES "${CMAKE_SOURCE_DIR}/std/math.zig" DESTINATION "${ZIG_STD_DEST}")
 install(FILES "${CMAKE_SOURCE_DIR}/std/mem.zig" DESTINATION "${ZIG_STD_DEST}")
 install(FILES "${CMAKE_SOURCE_DIR}/std/net.zig" DESTINATION "${ZIG_STD_DEST}")