Skip to content

Add function signature validation for type annotations#365

Open
nbeerbower wants to merge 1 commit into
mainfrom
claude/validate-function-signatures-4atID
Open

Add function signature validation for type annotations#365
nbeerbower wants to merge 1 commit into
mainfrom
claude/validate-function-signatures-4atID

Conversation

@nbeerbower

Copy link
Copy Markdown
Collaborator

Previously, function-type annotations (e.g., fn(i32): i32) only checked that a value was a function, without validating parameter counts, types, return types, or async flags. This change adds proper signature validation.

Changes:

  • Add validate_function_signature() to types.c for comprehensive signature checking including parameter count, types, return type, and async flag
  • Add types_compatible() helper for comparing types recursively
  • Add format_type() helper for generating readable error messages
  • Add type_copy() to ast.c for deep copying Type structures including all function-type fields (fn_param_types, fn_return_type, etc.)
  • Update expressions.c to use type_copy() for parameter and return types
  • Add parity test for function signature validation

The validation properly handles:

  • Exact signature matches
  • Untyped functions with typed annotations (dynamic compatibility)
  • Numeric type compatibility (i32/i64/f32/f64)
  • Async/non-async function distinction
  • Optional parameters and defaults

Previously, function-type annotations (e.g., `fn(i32): i32`) only checked
that a value was a function, without validating parameter counts, types,
return types, or async flags. This change adds proper signature validation.

Changes:
- Add validate_function_signature() to types.c for comprehensive signature
  checking including parameter count, types, return type, and async flag
- Add types_compatible() helper for comparing types recursively
- Add format_type() helper for generating readable error messages
- Add type_copy() to ast.c for deep copying Type structures including
  all function-type fields (fn_param_types, fn_return_type, etc.)
- Update expressions.c to use type_copy() for parameter and return types
- Add parity test for function signature validation

The validation properly handles:
- Exact signature matches
- Untyped functions with typed annotations (dynamic compatibility)
- Numeric type compatibility (i32/i64/f32/f64)
- Async/non-async function distinction
- Optional parameters and defaults
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants