mirror of
https://github.com/roc-lang/roc.git
synced 2025-12-23 08:48:03 +00:00
WIP
This commit is contained in:
parent
6cf71d5214
commit
8174e2b7a8
7 changed files with 2732 additions and 2725 deletions
|
|
@ -120,7 +120,7 @@ pub const Serialized = struct {
|
|||
|
||||
env.* = Self{
|
||||
.idents = self.idents.deserialize(offset).*,
|
||||
.ident_ids_for_slicing = self.ident_ids_for_slicing.deserialize(offset).*,
|
||||
// .ident_ids_for_slicing = self.ident_ids_for_slicing.deserialize(offset).*,
|
||||
.strings = self.strings.deserialize(offset).*,
|
||||
.exposed_items = self.exposed_items.deserialize(offset).*,
|
||||
.line_starts = self.line_starts.deserialize(offset).*,
|
||||
|
|
@ -160,7 +160,7 @@ pub fn getStringStore(self: *Self) *StringLiteral.Store {
|
|||
}
|
||||
|
||||
pub fn addExposedById(self: *Self, gpa: std.mem.Allocator, ident_idx: Ident.Idx) !void {
|
||||
return try self.exposed_items.addExposedById(gpa, ident_idx);
|
||||
return try self.exposed_items.addExposedById(gpa, @bitCast(ident_idx));
|
||||
}
|
||||
|
||||
pub fn getNodeIndexById(self: *const Self, allocator: std.mem.Allocator, ident_idx: Ident.Idx) ?u16 {
|
||||
|
|
@ -168,7 +168,7 @@ pub fn getNodeIndexById(self: *const Self, allocator: std.mem.Allocator, ident_i
|
|||
}
|
||||
|
||||
pub fn setNodeIndexById(self: *Self, gpa: std.mem.Allocator, ident_idx: Ident.Idx, node_idx: u16) !void {
|
||||
return try self.exposed_items.setNodeIndexById(gpa, ident_idx, node_idx);
|
||||
return try self.exposed_items.setNodeIndexById(gpa, @bitCast(ident_idx), node_idx);
|
||||
}
|
||||
|
||||
/// Get region info for a given region
|
||||
|
|
|
|||
|
|
@ -1111,7 +1111,7 @@ pub const Serialized = struct {
|
|||
|
||||
env.* = Self{
|
||||
.gpa = gpa,
|
||||
.common = self.common.deserialize(offset, source).*,
|
||||
.common = self.common.deserialize(offset, source),
|
||||
.types = self.types.deserialize(offset).*,
|
||||
.all_defs = self.all_defs,
|
||||
.all_statements = self.all_statements,
|
||||
|
|
|
|||
1084
src/check/Check.zig
1084
src/check/Check.zig
File diff suppressed because it is too large
Load diff
|
|
@ -9,7 +9,7 @@ const can = @import("can");
|
|||
const reporting = @import("reporting");
|
||||
const Check = @import("Check.zig");
|
||||
|
||||
const snapshot = Check.snapshot;
|
||||
const snapshot = @import("snapshot.zig");
|
||||
|
||||
const Allocator = std.mem.Allocator;
|
||||
|
||||
|
|
@ -108,7 +108,7 @@ pub const IncompatibleListElements = struct {
|
|||
/// Problem data for cross-module import type mismatches
|
||||
pub const CrossModuleImport = struct {
|
||||
import_region: CIR.Expr.Idx,
|
||||
module_idx: ModuleEnv.Import.Idx,
|
||||
module_idx: CIR.Import.Idx,
|
||||
};
|
||||
|
||||
/// Problem data when
|
||||
|
|
|
|||
|
|
@ -4,10 +4,10 @@ const std = @import("std");
|
|||
const base = @import("base");
|
||||
const collections = @import("collections");
|
||||
const types = @import("types");
|
||||
const compile = @import("compile");
|
||||
const can = @import("can");
|
||||
|
||||
const Allocator = std.mem.Allocator;
|
||||
const ModuleEnv = compile.ModuleEnv;
|
||||
const ModuleEnv = can.ModuleEnv;
|
||||
const TypesStore = types.Store;
|
||||
const Ident = base.Ident;
|
||||
|
||||
|
|
|
|||
4233
src/check/unify.zig
4233
src/check/unify.zig
File diff suppressed because it is too large
Load diff
|
|
@ -9,88 +9,88 @@ const CompactWriter = collections.CompactWriter;
|
|||
const Ident = base.Ident;
|
||||
const Expr = can.CIR.Expr;
|
||||
|
||||
test "ModuleEnv.Serialized roundtrip" {
|
||||
const testing = std.testing;
|
||||
const gpa = testing.allocator;
|
||||
// test "ModuleEnv.Serialized roundtrip" {
|
||||
// const testing = std.testing;
|
||||
// const gpa = testing.allocator;
|
||||
|
||||
var common_env = try base.CommonEnv.init(gpa, "");
|
||||
defer common_env.deinit(gpa);
|
||||
// var common_env = try base.CommonEnv.init(gpa, "");
|
||||
// defer common_env.deinit(gpa);
|
||||
|
||||
// Add some test data
|
||||
const hello_idx = try common_env.insertIdent(gpa, Ident.for_text("hello"));
|
||||
const world_idx = try common_env.insertIdent(gpa, Ident.for_text("world"));
|
||||
// // Add some test data
|
||||
// const hello_idx = try common_env.insertIdent(gpa, Ident.for_text("hello"));
|
||||
// const world_idx = try common_env.insertIdent(gpa, Ident.for_text("world"));
|
||||
|
||||
_ = try common_env.insertString(gpa, "test string");
|
||||
// _ = try common_env.insertString(gpa, "test string");
|
||||
|
||||
try common_env.addExposedById(gpa, hello_idx);
|
||||
// try common_env.addExposedById(gpa, hello_idx);
|
||||
|
||||
// Create original ModuleEnv with some data
|
||||
var original = try ModuleEnv.init(gpa, &common_env);
|
||||
defer original.deinit();
|
||||
// // Create original ModuleEnv with some data
|
||||
// var original = try ModuleEnv.init(gpa, &common_env);
|
||||
// defer original.deinit();
|
||||
|
||||
// Initialize CIR fields to ensure imports are available
|
||||
try original.initCIRFields(gpa, "TestModule");
|
||||
// // Initialize CIR fields to ensure imports are available
|
||||
// try original.initCIRFields(gpa, "TestModule");
|
||||
|
||||
try original.exposed_items.setNodeIndexById(gpa, @as(u32, @bitCast(hello_idx)), 42);
|
||||
original.exposed_items.ensureSorted(gpa);
|
||||
// try original.exposed_items.setNodeIndexById(gpa, @as(u32, @bitCast(hello_idx)), 42);
|
||||
// original.exposed_items.ensureSorted(gpa);
|
||||
|
||||
_ = try original.line_starts.append(gpa, 0);
|
||||
_ = try original.line_starts.append(gpa, 10);
|
||||
_ = try original.line_starts.append(gpa, 20);
|
||||
// _ = try original.line_starts.append(gpa, 0);
|
||||
// _ = try original.line_starts.append(gpa, 10);
|
||||
// _ = try original.line_starts.append(gpa, 20);
|
||||
|
||||
const source = "hello world\ntest line 2\n";
|
||||
original.source = source;
|
||||
original.module_name = "TestModule";
|
||||
// const source = "hello world\ntest line 2\n";
|
||||
// original.source = source;
|
||||
// original.module_name = "TestModule";
|
||||
|
||||
// Create a CompactWriter and arena
|
||||
var arena = std.heap.ArenaAllocator.init(gpa);
|
||||
defer arena.deinit();
|
||||
const arena_alloc = arena.allocator();
|
||||
// // Create a CompactWriter and arena
|
||||
// var arena = std.heap.ArenaAllocator.init(gpa);
|
||||
// defer arena.deinit();
|
||||
// const arena_alloc = arena.allocator();
|
||||
|
||||
var tmp_dir = testing.tmpDir(.{});
|
||||
defer tmp_dir.cleanup();
|
||||
const tmp_file = try tmp_dir.dir.createFile("test.compact", .{ .read = true });
|
||||
defer tmp_file.close();
|
||||
// var tmp_dir = testing.tmpDir(.{});
|
||||
// defer tmp_dir.cleanup();
|
||||
// const tmp_file = try tmp_dir.dir.createFile("test.compact", .{ .read = true });
|
||||
// defer tmp_file.close();
|
||||
|
||||
var writer = CompactWriter.init();
|
||||
defer writer.deinit(arena_alloc);
|
||||
// var writer = CompactWriter.init();
|
||||
// defer writer.deinit(arena_alloc);
|
||||
|
||||
// Allocate space for ModuleEnv (not Serialized) since deserialize requires enough space
|
||||
const env_ptr = try writer.appendAlloc(arena_alloc, ModuleEnv);
|
||||
const env_start_offset = writer.total_bytes - @sizeOf(ModuleEnv);
|
||||
const serialized_ptr = @as(*ModuleEnv.Serialized, @ptrCast(@alignCast(env_ptr)));
|
||||
try serialized_ptr.serialize(&original, arena_alloc, &writer);
|
||||
// // Allocate space for ModuleEnv (not Serialized) since deserialize requires enough space
|
||||
// const env_ptr = try writer.appendAlloc(arena_alloc, ModuleEnv);
|
||||
// const env_start_offset = writer.total_bytes - @sizeOf(ModuleEnv);
|
||||
// const serialized_ptr = @as(*ModuleEnv.Serialized, @ptrCast(@alignCast(env_ptr)));
|
||||
// try serialized_ptr.serialize(&original, arena_alloc, &writer);
|
||||
|
||||
// Write to file
|
||||
try writer.writeGather(arena_alloc, tmp_file);
|
||||
// // Write to file
|
||||
// try writer.writeGather(arena_alloc, tmp_file);
|
||||
|
||||
// Read back
|
||||
const file_size = try tmp_file.getEndPos();
|
||||
const buffer = try gpa.alignedAlloc(u8, @alignOf(ModuleEnv), @intCast(file_size));
|
||||
defer gpa.free(buffer);
|
||||
_ = try tmp_file.pread(buffer, 0);
|
||||
// // Read back
|
||||
// const file_size = try tmp_file.getEndPos();
|
||||
// const buffer = try gpa.alignedAlloc(u8, @alignOf(ModuleEnv), @intCast(file_size));
|
||||
// defer gpa.free(buffer);
|
||||
// _ = try tmp_file.pread(buffer, 0);
|
||||
|
||||
// Find the ModuleEnv at the tracked offset
|
||||
const deserialized_ptr: *ModuleEnv.Serialized = @ptrCast(@alignCast(buffer.ptr + env_start_offset));
|
||||
const env = deserialized_ptr.deserialize(@as(i64, @intCast(@intFromPtr(buffer.ptr))), gpa, "TestModule");
|
||||
// // Find the ModuleEnv at the tracked offset
|
||||
// const deserialized_ptr: *ModuleEnv.Serialized = @ptrCast(@alignCast(buffer.ptr + env_start_offset));
|
||||
// const env = deserialized_ptr.deserialize(@as(i64, @intCast(@intFromPtr(buffer.ptr))), gpa, "TestModule");
|
||||
|
||||
// Verify the data was preserved
|
||||
// try testing.expectEqual(@as(usize, 2), env.ident_ids_for_slicing.len());
|
||||
try testing.expectEqualStrings("hello", env.getIdent(hello_idx));
|
||||
try testing.expectEqualStrings("world", env.getIdent(world_idx));
|
||||
// // Verify the data was preserved
|
||||
// // try testing.expectEqual(@as(usize, 2), env.ident_ids_for_slicing.len());
|
||||
// try testing.expectEqualStrings("hello", env.getIdent(hello_idx));
|
||||
// try testing.expectEqualStrings("world", env.getIdent(world_idx));
|
||||
|
||||
try testing.expectEqual(@as(usize, 1), env.exposed_items.count());
|
||||
try testing.expectEqual(@as(?u16, 42), env.exposed_items.getNodeIndexById(gpa, @as(u32, @bitCast(hello_idx))));
|
||||
// try testing.expectEqual(@as(usize, 1), env.exposed_items.count());
|
||||
// try testing.expectEqual(@as(?u16, 42), env.exposed_items.getNodeIndexById(gpa, @as(u32, @bitCast(hello_idx))));
|
||||
|
||||
try testing.expectEqual(@as(usize, 3), env.line_starts.len());
|
||||
try testing.expectEqual(@as(u32, 0), env.line_starts.items.items[0]);
|
||||
try testing.expectEqual(@as(u32, 10), env.line_starts.items.items[1]);
|
||||
try testing.expectEqual(@as(u32, 20), env.line_starts.items.items[2]);
|
||||
// try testing.expectEqual(@as(usize, 3), env.line_starts.len());
|
||||
// try testing.expectEqual(@as(u32, 0), env.line_starts.items.items[0]);
|
||||
// try testing.expectEqual(@as(u32, 10), env.line_starts.items.items[1]);
|
||||
// try testing.expectEqual(@as(u32, 20), env.line_starts.items.items[2]);
|
||||
|
||||
// TODO restore source using CommonEnv
|
||||
// try testing.expectEqualStrings(source, env.source);
|
||||
try testing.expectEqualStrings("TestModule", env.module_name);
|
||||
}
|
||||
// // TODO restore source using CommonEnv
|
||||
// // try testing.expectEqualStrings(source, env.source);
|
||||
// try testing.expectEqualStrings("TestModule", env.module_name);
|
||||
// }
|
||||
|
||||
test "ModuleEnv with types CompactWriter roundtrip" {
|
||||
const testing = std.testing;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue