report interpreter errors in tests
This commit is contained in:
parent
861e2ffb05
commit
bcd2b7f1ae
@ -8,6 +8,8 @@ const ComptimeInterpreter = zls.ComptimeInterpreter;
|
|||||||
const InternPool = zls.InternPool;
|
const InternPool = zls.InternPool;
|
||||||
const Index = InternPool.Index;
|
const Index = InternPool.Index;
|
||||||
const Key = InternPool.Key;
|
const Key = InternPool.Key;
|
||||||
|
const ast = zls.ast;
|
||||||
|
const offsets = zls.offsets;
|
||||||
|
|
||||||
const allocator: std.mem.Allocator = std.testing.allocator;
|
const allocator: std.mem.Allocator = std.testing.allocator;
|
||||||
|
|
||||||
@ -201,7 +203,7 @@ fn testCall(source: []const u8, arguments: []const Value) !Result {
|
|||||||
};
|
};
|
||||||
errdefer interpreter.deinit();
|
errdefer interpreter.deinit();
|
||||||
|
|
||||||
_ = try interpreter.interpret(0, .none, .{});
|
_ = try interpretReportErrors(&interpreter, 0, .none);
|
||||||
|
|
||||||
var args = try allocator.alloc(ComptimeInterpreter.Value, arguments.len);
|
var args = try allocator.alloc(ComptimeInterpreter.Value, arguments.len);
|
||||||
defer allocator.free(args);
|
defer allocator.free(args);
|
||||||
@ -265,7 +267,7 @@ fn testInterpret(source: []const u8, node_idx: Ast.Node.Index) !Result {
|
|||||||
};
|
};
|
||||||
errdefer interpreter.deinit();
|
errdefer interpreter.deinit();
|
||||||
|
|
||||||
_ = try interpreter.interpret(0, .none, .{});
|
_ = try interpretReportErrors(&interpreter, 0, .none);
|
||||||
|
|
||||||
const result = try interpreter.interpret(node_idx, .none, .{});
|
const result = try interpreter.interpret(node_idx, .none, .{});
|
||||||
|
|
||||||
@ -310,3 +312,24 @@ fn testExprCheck(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn interpretReportErrors(
|
||||||
|
interpreter: *ComptimeInterpreter,
|
||||||
|
node_idx: Ast.Node.Index,
|
||||||
|
namespace: InternPool.NamespaceIndex,
|
||||||
|
) !ComptimeInterpreter.InterpretResult {
|
||||||
|
const result = interpreter.interpret(node_idx, namespace, .{});
|
||||||
|
|
||||||
|
// TODO use ErrorBuilder
|
||||||
|
var err_it = interpreter.errors.iterator();
|
||||||
|
if (interpreter.errors.count() != 0) {
|
||||||
|
const handle = interpreter.getHandle();
|
||||||
|
std.debug.print("\n{s}\n", .{handle.text});
|
||||||
|
while (err_it.next()) |entry| {
|
||||||
|
const token = handle.tree.firstToken(entry.key_ptr.*);
|
||||||
|
const position = offsets.tokenToPosition(handle.tree, token, .@"utf-8");
|
||||||
|
std.debug.print("{d}:{d}: {s}\n", .{ position.line, position.character, entry.value_ptr.message });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user