Runtime: add method dispatch for array/string/dict/number (.len, .push, .pop, .keys, .values, .has, .toInt) Stdlib: delete global len/push/pop/keys/values/has Tests/docs/examples: migrate to method style; add tests/test_builtin_methods_style.bob All tests pass Breaking: global len/push/pop/keys/values/has removed; use methods instead Parser/AST: add class/extends/extension/super, field initializers Runtime: shared methods with this injection; classParents/classTemplates; super resolution; ownerClass/currentClass; extension lookup order Builtins: method dispatch for array/string/dict/number (.len/.push/.pop/.keys/.values/.has/.toInt); remove global forms Tests/docs/examples: add/refresh for classes, inheritance, super, polymorphism; migrate to method style; all tests pass VS Code extension: update grammar/readme/snippets for new features
22 lines
452 B
Plaintext
22 lines
452 B
Plaintext
print("\n--- Test: User class extensions ---");
|
|
|
|
class Box {
|
|
var v;
|
|
func init(x) { this.v = x; }
|
|
func get() { return this.v; }
|
|
}
|
|
|
|
extension Box {
|
|
func inc() { this.v = this.v + 1; }
|
|
func label(s) { return s + ":" + toString(this.v); }
|
|
}
|
|
|
|
var b = Box(10);
|
|
b.inc();
|
|
assert(b.get() == 11, "Box.inc should increment value");
|
|
assert(b.label("val") == "val:11", "Box.label should return formatted string");
|
|
|
|
print("User class extensions: PASS");
|
|
|
|
|