ffi 2.4 xfail: #extends Alias; body item in #jni_class

`Window :: #jni_class("...") { #extends View; ... }` should parse,
today's 2.3 parser doesn't recognise `#extends` as a token and the
body loop reports "expected method name". The make-green follow-up
adds `hash_extends`/`hash_implements` lexer tokens, refactors
`JniClassDecl.methods` into a `members` tagged union, and dispatches
in the body loop on the leading token.
This commit is contained in:
agra
2026-05-20 09:36:20 +03:00
parent ecce8cdca3
commit e225adbd1c
3 changed files with 27 additions and 0 deletions

View File

@@ -0,0 +1,25 @@
// Phase 2 step 2.4 (PLAN-FFI.md): xfail then green for the `#extends`
// and `#implements` body items inside a `#jni_class` declaration.
//
// `#extends Alias;` declares a single-inheritance superclass reference
// using the sx-side alias name (not the foreign Java path — that lives
// in the alias's own `#jni_class(...)` directive arg). `#implements
// Alias;` is repeatable and records interface conformance.
//
// Step 2.4 introduces `hash_extends` and `hash_implements` tokens and
// refactors `JniClassDecl.methods` into a `members` tagged union that
// holds method/extends/implements variants.
#import "modules/std.sx";
View :: #jni_class("android/view/View") { }
Window :: #jni_class("android/view/Window") {
#extends View;
getDecorView :: (self: *Self) -> *View;
}
main :: () -> s32 {
print("parse-only ok\n");
0;
}

View File

@@ -0,0 +1 @@
1

View File

@@ -0,0 +1 @@
/Users/agra/projects/sx/examples/ffi-jni-class-04-extends.sx:18:5: error: expected method name in '#jni_class' body