Introduce a new public C API function wrenGetSlotType() that returns the underlying representation type (bool, num, foreign, list, null, string, or unknown) of the object stored in a given VM slot. This allows C extensions to inspect slot contents without needing to call individual type-checking functions or handle errors from mismatched accessors. The implementation in wren_vm.c uses the existing IS_* macros to determine the type and returns the corresponding WrenType enum value. A new WrenType enum is added to wren.h with WREN_TYPE_BOOL, WREN_TYPE_NUM, WREN_TYPE_FOREIGN, WREN_TYPE_LIST, WREN_TYPE_NULL, WREN_TYPE_STRING, and WREN_TYPE_UNKNOWN. Test coverage is added in test/api/slots.c with a slotTypes() foreign method that verifies all seven type values, and a ForeignType foreign class is introduced in slots.wren to provide a foreign object for testing WREN_TYPE_FOREIGN. The test harness in main.c is updated to support binding foreign class allocate methods via slotsBindClass().
This contains the automated validation suite for the VM and built-in libraries.
-
benchmark/- Performance tests. These aren't strictly pass/fail, but let us compare performance both against other languages and against previous builds of Wren itself. -
core/- Tests for the built in core library, mainly methods on the core classes. If a bug is inwren_core.corwren_value.c, it will most likely break one of these tests. -
language/- Tests of the language itself, its grammar and runtime semantics. If a bug is inwren_compiler.corwren_vm.c, it will most likely break one of these tests. This includes tests for the syntax for the literal forms of the core classes. -
limit/- Tests for various hardcoded limits. The language doesn't officially specify these limits, but the Wren implementation has them. These tests ensure that limit behavior is well-defined and tested.