Uncomment and implement the `|` (union) operator to return a new Set combining both lists, and the `&` (intersection) operator to return elements present in both sets. Refactor the `+` operator to delegate to `|` for consistency with bitwise semantics.
Implement a generic Set data structure backed by a list with automatic deduplication via cleanup method. Includes core set operations: element addition/removal, membership testing, cardinality, functional transformations (map/where), union via + operator, and set difference via - operator. Also provides iteration support through iterate/iteratorValue methods.
The error message for unimplemented methods previously included the word "Receiver"
before the class name, which was redundant and inconsistent with other error messages.
Updated the format string in `methodNotFound()` to drop "Receiver" and use the class
name directly. Added a new test case for static method not found errors and updated
existing test expectations to match the new message format.
Add ObjClass* parameter to methodNotFound and pass classObj from all call sites in runInterpreter, so the error message displays the receiver's class name instead of a generic "Receiver does not implement method".
Add INFIX_OPERATOR entries for TOKEN_PIPE and TOKEN_AMP with PREC_BITWISE precedence in the compiler's grammar rules, replacing the previous UNUSED entries. This allows user-defined classes to implement custom `|` and `&` operator methods.
Include a new test file `test/custom_operators/bitwise.wren` that defines Amp and Pipe classes with their respective operator methods to validate the feature works correctly.
Fix two typos in doc/site/performance.markdown: change "rivalling" to "rivaling" in the paragraph about language implementation complexity, and change "carvinal" to "carnival" in the benchmarks section.
Implement a `where` method on the List class that takes a predicate function and returns a new list containing only elements for which the predicate returns true. The implementation iterates over the list, calls the predicate on each element, and collects matching elements into a new list. Includes test cases verifying filtering with both matching and non-matching predicates.
Implement a `map` method on the List class that applies a given function `f` to each element, returning a new list with the transformed values. Includes a test case verifying incrementing each element by 1.
Add `+` method to List class in core.wren that creates a new list by concatenating elements from both operands. Supports concatenation with Range objects and handles empty lists on either side. Includes comprehensive test cases in test/list/concat.wren covering list-list, list-range, and empty list combinations.