From 3425b95cb654f8e1adc98365a4b370aa1fff8b4d Mon Sep 17 00:00:00 2001 From: _ov4 Date: Sat, 17 Oct 2026 06:02:21 +0000 Subject: feat(classes): support ordinary member methods and this references Co-Authored-By: Claude Fable 5.1 --- tests/iii/class-method-errors/case.json | 52 +++++++++++++++++++++++++++++++ tests/iii/class-method-errors/notes.md | 3 ++ tests/iii/class-method-errors/program.cps | 35 +++++++++++++++++++++ 3 files changed, 90 insertions(+) create mode 100644 tests/iii/class-method-errors/case.json create mode 100644 tests/iii/class-method-errors/notes.md create mode 100644 tests/iii/class-method-errors/program.cps (limited to 'tests/iii/class-method-errors') diff --git a/tests/iii/class-method-errors/case.json b/tests/iii/class-method-errors/case.json new file mode 100644 index 0000000..655296d --- /dev/null +++ b/tests/iii/class-method-errors/case.json @@ -0,0 +1,52 @@ +{ + "errors": [ + { + "reason": "Cannot redeclare this inside a method", + "line": 11 + }, + { + "reason": "A method parameter cannot be named this", + "line": 13 + }, + { + "reason": "NEW constructors are not implemented", + "line": 15 + }, + { + "reason": "Duplicate member set in class Box", + "line": 17 + }, + { + "reason": "Duplicate member Value in class Box", + "line": 19 + }, + { + "reason": "Cannot access private field Hidden of type Box", + "line": 25 + }, + { + "reason": "Cannot access private method Secret of type Box", + "line": 26 + }, + { + "reason": "Cannot access private method Secret of type Box", + "line": 30 + }, + { + "reason": "Cannot access private field Hidden of type Box", + "line": 31 + }, + { + "reason": "Incorrect # arguments passed to Box.Set", + "line": 32 + }, + { + "reason": "Type Box has no method Missing", + "line": 33 + }, + { + "reason": "Type INTEGER has no method Set", + "line": 35 + } + ] +} diff --git a/tests/iii/class-method-errors/notes.md b/tests/iii/class-method-errors/notes.md new file mode 100644 index 0000000..f9be5b9 --- /dev/null +++ b/tests/iii/class-method-errors/notes.md @@ -0,0 +1,3 @@ +# class-method-errors + +Reject private access from outside the owning class, duplicate members, NEW constructors, redeclarations of this, incorrect arguments and invalid receivers. diff --git a/tests/iii/class-method-errors/program.cps b/tests/iii/class-method-errors/program.cps new file mode 100644 index 0000000..f2503e2 --- /dev/null +++ b/tests/iii/class-method-errors/program.cps @@ -0,0 +1,35 @@ +CLASS Box + PRIVATE Hidden : INTEGER + PUBLIC Value : INTEGER + PROCEDURE Set(Number : INTEGER) + Hidden <- Number + ENDPROCEDURE + PRIVATE FUNCTION Secret() RETURNS INTEGER + RETURN Hidden + ENDFUNCTION + PROCEDURE BadLocal() + DECLARE this : Box + ENDPROCEDURE + PROCEDURE BadParam(this : Box) + ENDPROCEDURE + PROCEDURE NEW() + ENDPROCEDURE + PROCEDURE set() + ENDPROCEDURE + FUNCTION Value() RETURNS INTEGER + RETURN 0 + ENDFUNCTION +ENDCLASS +CLASS Stranger + PROCEDURE Probe(Other : Box) + OUTPUT Other.Hidden + OUTPUT Other.Secret() + ENDPROCEDURE +ENDCLASS +DECLARE B : Box +OUTPUT B.Secret() +OUTPUT B.Hidden +B.Set() +B.Missing() +DECLARE Number : INTEGER +Number.Set(1) -- cgit v1.3.1-4-g156e