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