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:
25
examples/ffi-jni-class-04-extends.sx
Normal file
25
examples/ffi-jni-class-04-extends.sx
Normal 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;
|
||||||
|
}
|
||||||
1
tests/expected/ffi-jni-class-04-extends.exit
Normal file
1
tests/expected/ffi-jni-class-04-extends.exit
Normal file
@@ -0,0 +1 @@
|
|||||||
|
1
|
||||||
1
tests/expected/ffi-jni-class-04-extends.txt
Normal file
1
tests/expected/ffi-jni-class-04-extends.txt
Normal 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
|
||||||
Reference in New Issue
Block a user