@@ -1562,7 +1562,18 @@ let type_function ctx args ret fmode f do_display p =
ctx.curfun <- fmode;
ctx.ret <- ret;
ctx.opened <- [];
- let e = match f.f_expr with None -> error "Function body required" p | Some e -> e in
+ let e = match f.f_expr with
+ | None ->
+ if ctx.com.display.dms_error_policy = EPIgnore then
+ (* when we don't care because we're in display mode, just act like
+ the function has an empty block body. this is fine even if function
+ defines a return type, because returns aren't checked in this mode
+ *)
+ EBlock [],p
+ else
+ error "Function body required" p
+ | Some e -> e
+ in
let e = if not do_display then
type_expr ctx e NoValue
else begin
@@ -0,0 +1,16 @@
+package cases;
+
+class Issue5988 extends DisplayTestCase {
+ /**
+ class Main {
+ static function f():Int;
+ static function main() {
+ {-1-}
+ }
+ **/
+ function test() {
+ eq(true, Toplevel.hasToplevel(toplevel(pos(1)), "type", "Array"));
+}
@@ -144,7 +144,7 @@ class Toplevel extends DisplayTestCase {
eq(true, hasToplevel(typesCompletion, "package", "haxe"));
}
- static function hasToplevel(a:Array<ToplevelElement>, kind:String, name:String):Bool {
+ public static function hasToplevel(a:Array<ToplevelElement>, kind:String, name:String):Bool {
return a.exists(function(t) return t.kind == kind && t.name == name);