typecheck: validate object method returns
This commit is contained in:
@@ -304,6 +304,29 @@ Each form reports the same beginner-facing fix:
|
||||
Function squre is not known yet. Check the function name or add TEACH squre before calling it.
|
||||
```
|
||||
|
||||
## Function and method return checks
|
||||
|
||||
Simple functions and object methods can declare a return type with `RETURNS TYPE`. `claro typecheck` checks each simple `RETURN` expression before the program runs:
|
||||
|
||||
```claro
|
||||
CLASS Player
|
||||
TEACH score amount RETURNS NUMBER
|
||||
RETURN amount
|
||||
END
|
||||
END
|
||||
|
||||
NEW Player player
|
||||
DO player.score 4
|
||||
```
|
||||
|
||||
Returning text from this method produces a learner-facing diagnostic that names the class and method:
|
||||
|
||||
```text
|
||||
Type mismatch for return from Player.score: expected NUMBER, but this value looks like TEXT.
|
||||
```
|
||||
|
||||
This is a focused check for simple return expressions. Branch-sensitive return analysis and richer method signatures remain planned.
|
||||
|
||||
## Object method parameter checks
|
||||
|
||||
Claro also checks simple object method arguments when the method body names a parameter with `CHECK TYPE`. This keeps the method syntax beginner-readable while giving a clearer error before the program runs:
|
||||
|
||||
@@ -53,14 +53,14 @@ Ready now:
|
||||
- `TYPE OF` and `CHECK TYPE`
|
||||
- `CHECK TYPE` rejects unknown expected type names with a beginner-facing list of supported types
|
||||
- typed list/map checks through `claro typecheck`, including a nested `LIST OF MAP` insertion example
|
||||
- simple function return checks with `TEACH name ... RETURNS TYPE` and learner-facing diagnostics for mismatched `RETURN` expressions
|
||||
- simple function and object-method return checks with `TEACH name ... RETURNS TYPE` and learner-facing diagnostics for mismatched `RETURN` expressions
|
||||
- a narrow function/method argument check: `CHECK TYPE parameter IS TYPE` inside a function or simple object method lets `claro typecheck` accept correct checked calls, catch mismatched `DO`, `CALL ... WITH`, `DO object.method ...`, and compatibility `CALL object.method WITH ...` arguments, including checked methods that appear after another method in the same class, report missing checked function and method arguments, report missing unchecked arguments for simple functions and simple object methods, treat empty compatibility calls such as `CALL greet WITH` as missing-argument mistakes, catch extra arguments to simple functions and checked methods even when the checked method appears after another method in the same class, catch modern `DO` and compatibility `CALL ... WITH` calls to undeclared simple functions, explain when `DO object.method ...` or compatibility `CALL object.method WITH ...` happens before the object is created with `NEW` even if the method name is also wrong, and catch modern plus compatibility calls to undeclared object methods with a class-specific `TEACH` hint
|
||||
- a narrow object-field assignment/check-type check for simple `NEW Class object` plus direct `SET object.field value` and `CHECK TYPE object.field IS TYPE` cases when the class declares `HAS field TYPE`; validation now covers correct NUMBER, TEXT, and YESNO direct assignments, explicitly typed field assignments, dedicated positive NUMBER/TEXT/YESNO `CHECK TYPE` metadata fixtures, simple and chained object aliases for both field assignments and `CHECK TYPE` metadata (including a chained TEXT-field check), aliased object-method calls including chained aliases in modern `DO` and compatibility `CALL ... WITH` forms (with a dedicated positive modern `DO` chained-alias fixture), field-to-field, compound arithmetic field expressions, and arithmetic/text expression result types, negative NUMBER/TEXT/YESNO field `CHECK TYPE` metadata mismatches, NUMBER/TEXT/YESNO-expectation unknown-field `CHECK TYPE` diagnostics, missing-object field assignment and `CHECK TYPE` diagnostics, NUMBER/TEXT/YESNO wrong-type diagnostics, field collection when a `HAS` field appears after a simple method, NUMBER/TEXT/YESNO-valued unknown-field diagnostics for direct assignments to undeclared fields including explicitly typed assignments, numeric and text results from simple arithmetic/text expressions in object-field assignments, plus a plain beginner-facing unknown-field diagnostic when the assigned expression type is not inferable yet
|
||||
|
||||
Still needed:
|
||||
- Keep the focused typecheck validator's fixture list complete as new positive and negative examples are added.
|
||||
- The expression checker now carries a known TEXT operand through all arithmetic operators so object-field diagnostics do not hide addition, subtraction, multiplication, or division mistakes; focused numeric-subtraction, numeric-division, and numeric-multiplication positives plus text-operand addition, subtraction, multiplication, and division negatives protect this behavior. Text concatenation into a TEXT field has focused positive fixtures for both operand orders, including concatenation of two TEXT object fields. Each numeric operator names the text operand and explains that it needs NUMBER values.
|
||||
- richer typed function signatures and return values beyond the focused simple `RETURNS TYPE` check
|
||||
- richer typed function signatures and return values beyond the focused simple function/method `RETURNS TYPE` check
|
||||
- type checking through branches and loops
|
||||
- richer object field type checking beyond simple direct assignments
|
||||
- typed imports/modules
|
||||
|
||||
+3
-3
@@ -46,10 +46,10 @@ Goal: make larger beginner programs safer without making first scripts harder.
|
||||
|
||||
Needed next:
|
||||
- richer typed function signatures beyond the focused simple `RETURNS TYPE` check
|
||||
- typed function returns beyond the focused simple `RETURNS TYPE` check
|
||||
- typed function returns beyond the focused simple function/method `RETURNS TYPE` check
|
||||
- type checking across branches and loops
|
||||
- typed imports/modules
|
||||
- broader object field checking and method return typing
|
||||
- broader object field checking and richer method return typing
|
||||
- clearer error messages for type mismatches
|
||||
|
||||
### 2. Objects and classes polish
|
||||
@@ -58,7 +58,7 @@ Goal: keep object-oriented examples readable enough for beginners.
|
||||
|
||||
Needed next:
|
||||
- constructor-style defaults or beginner-friendly initialization helpers
|
||||
- method return checks
|
||||
- richer method return checks beyond the focused simple `RETURNS TYPE` check
|
||||
- object printing/debugging helpers
|
||||
- better examples that avoid abstract toy OOP
|
||||
|
||||
|
||||
Reference in New Issue
Block a user