mirror of
https://github.com/roc-lang/roc.git
synced 2025-12-23 08:48:03 +00:00
commit
735e243c28
2 changed files with 40 additions and 4 deletions
|
|
@ -2371,6 +2371,7 @@ pub const Interpreter = struct {
|
|||
},
|
||||
.e_dot_access => |dot_access| {
|
||||
const receiver_ct_var = can.ModuleEnv.varFrom(dot_access.receiver);
|
||||
|
||||
const receiver_rt_var = try self.translateTypeVar(self.env, receiver_ct_var);
|
||||
var receiver_value = try self.evalExprMinimal(dot_access.receiver, roc_ops, receiver_rt_var);
|
||||
defer receiver_value.decref(&self.runtime_layout_store, roc_ops);
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ fn parseCheckAndEvalModule(src: []const u8) !struct {
|
|||
evaluator: ComptimeEvaluator,
|
||||
problems: *check.problem.Store,
|
||||
builtin_module: builtin_loading.LoadedModule,
|
||||
checker: *Check,
|
||||
} {
|
||||
const gpa = test_allocator;
|
||||
|
||||
|
|
@ -83,8 +84,10 @@ fn parseCheckAndEvalModule(src: []const u8) !struct {
|
|||
// Resolve imports - map each import to its index in imported_envs
|
||||
module_env.imports.resolveImports(module_env, &imported_envs);
|
||||
|
||||
var checker = try Check.init(gpa, &module_env.types, module_env, &imported_envs, null, &module_env.store.regions, builtin_ctx);
|
||||
defer checker.deinit();
|
||||
const checker = try gpa.create(Check);
|
||||
errdefer gpa.destroy(checker);
|
||||
checker.* = try Check.init(gpa, &module_env.types, module_env, &imported_envs, null, &module_env.store.regions, builtin_ctx);
|
||||
errdefer checker.deinit();
|
||||
|
||||
try checker.checkFile();
|
||||
|
||||
|
|
@ -92,13 +95,14 @@ fn parseCheckAndEvalModule(src: []const u8) !struct {
|
|||
problems.* = .{};
|
||||
|
||||
const builtin_types = BuiltinTypes.init(builtin_indices, builtin_module.env, builtin_module.env, builtin_module.env);
|
||||
const evaluator = try ComptimeEvaluator.init(gpa, module_env, &imported_envs, problems, builtin_types, null, &checker.import_mapping);
|
||||
const evaluator = try ComptimeEvaluator.init(gpa, module_env, &imported_envs, problems, builtin_types, builtin_module.env, &checker.import_mapping);
|
||||
|
||||
return .{
|
||||
.module_env = module_env,
|
||||
.evaluator = evaluator,
|
||||
.problems = problems,
|
||||
.builtin_module = builtin_module,
|
||||
.checker = checker,
|
||||
};
|
||||
}
|
||||
|
||||
|
|
@ -109,6 +113,12 @@ fn cleanupEvalModule(result: anytype) void {
|
|||
var problems_mut = result.problems;
|
||||
problems_mut.deinit(test_allocator);
|
||||
test_allocator.destroy(result.problems);
|
||||
|
||||
// Deinit checker (must happen after evaluator since evaluator holds pointer to import_mapping)
|
||||
var checker_mut = result.checker;
|
||||
checker_mut.deinit();
|
||||
test_allocator.destroy(result.checker);
|
||||
|
||||
result.module_env.deinit();
|
||||
test_allocator.destroy(result.module_env);
|
||||
|
||||
|
|
@ -1201,7 +1211,6 @@ test "e_low_level_lambda - Str.drop_suffix suffix longer than string" {
|
|||
defer test_allocator.free(value);
|
||||
try testing.expectEqualStrings("\"hi\"", value);
|
||||
}
|
||||
|
||||
// U8 conversion tests
|
||||
|
||||
test "e_low_level_lambda - U8.to_i16 safe widening" {
|
||||
|
|
@ -1821,3 +1830,29 @@ test "e_low_level_lambda - Str.join_with roundtrip with split_on" {
|
|||
defer test_allocator.free(value);
|
||||
try testing.expectEqualStrings("\"hello world\"", value);
|
||||
}
|
||||
|
||||
test "e_low_level_lambda - U8.plus basic" {
|
||||
const src =
|
||||
\\a : U8
|
||||
\\a = 5
|
||||
\\b : U8
|
||||
\\b = 3
|
||||
\\x : U8
|
||||
\\x = U8.plus(a, b)
|
||||
;
|
||||
const value = try evalModuleAndGetInt(src, 2);
|
||||
try testing.expectEqual(@as(i128, 8), value);
|
||||
}
|
||||
|
||||
test "e_low_level_lambda - U8.plus method call syntax" {
|
||||
const src =
|
||||
\\a : U8
|
||||
\\a = 5
|
||||
\\b : U8
|
||||
\\b = 3
|
||||
\\x : U8
|
||||
\\x = a.plus(b)
|
||||
;
|
||||
const value = try evalModuleAndGetInt(src, 2);
|
||||
try testing.expectEqual(@as(i128, 8), value);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue