Bläddra i källkod

[typer] check for extern non-inline fields that have expressions

closes #5898
Simon Krajewski 7 år sedan
förälder
incheckning
7d5160cc01

+ 6 - 3
src/typing/typeloadFields.ml

@@ -222,7 +222,7 @@ let transform_abstract_field com this_t a_t a f =
 		let fu = {
 			fu with
 			f_expr = (match fu.f_expr with
-			| None -> if Meta.has Meta.MultiType a.a_meta then Some (EConst (Ident "null"),p) else None
+			| None -> None
 			| Some (EBlock el,_) -> Some (EBlock (init p :: el @ [ret p]),p)
 			| Some e -> Some (EBlock [init p;e;ret p],p)
 			);
@@ -486,7 +486,7 @@ let create_field_context (ctx,cctx) c cff =
 		display_modifier = display_modifier;
 		is_abstract_member = cctx.abstract <> None && Meta.has Meta.Impl cff.cff_meta;
 		field_kind = field_kind;
-		do_bind = (((not c.cl_extern || is_inline) && not c.cl_interface) || field_kind = FKInit);
+		do_bind = (((not (c.cl_extern || !is_extern) || is_inline) && not c.cl_interface) || field_kind = FKInit);
 		do_add = true;
 		expr_presence_matters = false;
 	} in
@@ -1070,7 +1070,10 @@ let create_method (ctx,cctx,fctx) c f fd p =
 		t
 	) "type_fun" in
 	if fctx.do_bind then bind_type (ctx,cctx,fctx) cf r (match fd.f_expr with Some e -> snd e | None -> f.cff_pos)
-	else check_field_display ctx fctx c cf;
+	else begin
+		check_field_display ctx fctx c cf;
+		if fd.f_expr <> None && not (fctx.is_inline || fctx.is_macro) then ctx.com.warning "Extern non-inline function may not have an expression" p;
+	end;
 	cf
 
 let create_property (ctx,cctx,fctx) c f (get,set,t,eo) p =

+ 6 - 6
std/cpp/Function.hx

@@ -36,23 +36,23 @@ extern abstract Function<T, ABI:cpp.abi.Abi>( FunctionData<T,ABI> )
 
 
    @:native("::cpp::Function_obj::getProcAddress")
-   extern static function nativeGetProcAddress<T,ABI:cpp.abi.Abi>(inModule:String, inFunction:String) : AutoCast return null;
+   extern static function nativeGetProcAddress<T,ABI:cpp.abi.Abi>(inModule:String, inFunction:String) : AutoCast;
    inline public static function getProcAddress<T,ABI:cpp.abi.Abi>(inModule:String, inFunction:String) : Function<T,ABI>
    {
       return cast nativeGetProcAddress(inModule, inFunction);
    }
 
    @:native("::cpp::Function_obj::fromStaticFunction")
-   extern static function nativeFromStaticFunction<T>(inStaticFunction:T) : AutoCast return null;
+   extern static function nativeFromStaticFunction<T>(inStaticFunction:T) : AutoCast;
    inline public static function fromStaticFunction<T>(inStaticFunction:T) : Callable<T>
    {
       return cast nativeFromStaticFunction(inStaticFunction);
    }
 
-	extern public function lt(inOther:Function<T,ABI>):Bool return false;
-	extern public function leq(inOther:Function<T,ABI>):Bool return false;
-	extern public function gt(inOther:Function<T,ABI>):Bool return false;
-	extern public function geq(inOther:Function<T,ABI>):Bool return false;
+	extern public function lt(inOther:Function<T,ABI>):Bool;
+	extern public function leq(inOther:Function<T,ABI>):Bool;
+	extern public function gt(inOther:Function<T,ABI>):Bool;
+	extern public function geq(inOther:Function<T,ABI>):Bool;
 }
 
 

+ 1 - 1
std/cpp/Lib.hx

@@ -82,7 +82,7 @@ class Lib {
 	}
 
 	@:noDebug @:native("HX_STACK_DO_RETHROW")
-	extern static function do_rethrow(inExp:Dynamic) { throw inExp; }
+	extern static function do_rethrow(inExp:Dynamic);
 
 	@:noDebug #if(!cppia) inline #end
 	public static function rethrow(inExp:Dynamic) { do_rethrow(inExp); }

+ 11 - 11
std/cpp/Native.hx

@@ -26,18 +26,18 @@ package cpp;
 extern class Native
 {
    @:native("malloc")
-   public static function nativeMalloc(bytes:Int) : cpp.Star<cpp.Void> return null;
+   public static function nativeMalloc(bytes:Int) : cpp.Star<cpp.Void>;
    @:native("calloc")
-   public static function nativeCalloc(bytes:Int) : cpp.Star<cpp.Void> return null;
+   public static function nativeCalloc(bytes:Int) : cpp.Star<cpp.Void>;
    @:native("realloc")
-   public static function nativeRealloc(inPtr:cpp.Star<cpp.Void>,bytes:Int) : cpp.RawPointer<cpp.Void> return null;
+   public static function nativeRealloc(inPtr:cpp.Star<cpp.Void>,bytes:Int) : cpp.RawPointer<cpp.Void>;
    @:native("free")
-   public static function nativeFree(ptr:cpp.Star<cpp.Void>) : Void { }
+   public static function nativeFree(ptr:cpp.Star<cpp.Void>) : Void;
    @:native("memcpy")
-   public static function nativeMemcpy(dest:cpp.Star<cpp.Void>, src:cpp.Star<cpp.Void>, bytes:Int) : Void { }
+   public static function nativeMemcpy(dest:cpp.Star<cpp.Void>, src:cpp.Star<cpp.Void>, bytes:Int) : Void;
 
    @:native("hx::ClassSizeOf") @:templatedCall
-   public static function sizeof<T>(t:T) : Int { }
+   public static function sizeof<T>(t:T) : Int;
 
    #if !cppia
    @:generic
@@ -88,11 +88,11 @@ extern class Native
       return d;
    }
 
-   public static function memcpy<DEST,SRC>(dest:cpp.Star<DEST>, src:cpp.Star<SRC>, bytes:Int) : Void { }
-   public static function malloc<T>(bytes:Int) : cpp.Star<T> return null;
-   public static function calloc<T>(bytes:Int) : cpp.Star<T> return null;
-   public static function realloc<T>(ioPtr:cpp.Star<T>, bytes:Int) : cpp.Star<T> return null;
-   public static function free<T>(ptr:cpp.Star<T>) : Void { }
+   public static function memcpy<DEST,SRC>(dest:cpp.Star<DEST>, src:cpp.Star<SRC>, bytes:Int) : Void;
+   public static function malloc<T>(bytes:Int) : cpp.Star<T>;
+   public static function calloc<T>(bytes:Int) : cpp.Star<T>;
+   public static function realloc<T>(ioPtr:cpp.Star<T>, bytes:Int) : cpp.Star<T>;
+   public static function free<T>(ptr:cpp.Star<T>) : Void;
    #end
 
 }

+ 10 - 10
std/cpp/NativeArray.hx

@@ -48,32 +48,32 @@ extern class NativeArray {
    }
 
    @:nativeStaticExtension
-	public static function reserve<T>( inArray:Array<T>,inElements:Int ) : Void { }
+	public static function reserve<T>( inArray:Array<T>,inElements:Int ) : Void;
 
    @:nativeStaticExtension
-	public static function capacity<T>( inArray:Array<T> ) : Int { }
+	public static function capacity<T>( inArray:Array<T> ) : Int;
 
    @:nativeStaticExtension
-	public static function getElementSize<T>( inArray:Array<T> ) : Int { }
+	public static function getElementSize<T>( inArray:Array<T> ) : Int;
 
 	public static inline function address<T>( inArray:Array<T>,inIndex:Int ) : Pointer<T> {
       return Pointer.arrayElem(inArray,inIndex);
    }
 
    @:nativeStaticExtension
-	public static function setData<T>( inArray:Array<T>,inData:Pointer<T>,inElementCount:Int ) : Void { }
+	public static function setData<T>( inArray:Array<T>,inData:Pointer<T>,inElementCount:Int ) : Void;
 
    @:nativeStaticExtension
-	public static function setUnmanagedData<T>( inArray:Array<T>,inData:ConstPointer<T>,inElementCount:Int ) : Void { }
+	public static function setUnmanagedData<T>( inArray:Array<T>,inData:ConstPointer<T>,inElementCount:Int ) : Void;
 
    @:nativeStaticExtension
-	public static function zero<T>( ioDestArray:Array<T>, ?inFirst:Int, ?inElements:Int ) : Void { };
+	public static function zero<T>( ioDestArray:Array<T>, ?inFirst:Int, ?inElements:Int ) : Void;
 
    @:nativeStaticExtension
-	public static function memcmp<T>( inArrayA:Array<T>, inArrayB:Array<T>) : Int { }
+	public static function memcmp<T>( inArrayA:Array<T>, inArrayB:Array<T>) : Int;
 
    @:native("_hx_reslove_virtual_array")
-	public static function resolveVirtualArray( inArray:Array<Dynamic>) : Dynamic { }
+	public static function resolveVirtualArray( inArray:Array<Dynamic>) : Dynamic;
 
 
    #if cppia
@@ -91,7 +91,7 @@ extern class NativeArray {
 
    #else
    @:native("_hx_array_unsafe_get")
-	public static function unsafeGet<T>( inDestArray:Array<T>, inIndex:Int) : T { return untyped null; }
+	public static function unsafeGet<T>( inDestArray:Array<T>, inIndex:Int) : T;
 
    @:native("_hx_array_unsafe_set")
 	public static inline function unsafeSet<T>( ioDestArray:Array<T>, inIndex:Int, inValue:T) : T {
@@ -99,7 +99,7 @@ extern class NativeArray {
 	}
 
    @:native("_hx_array_set_size_exact")
-	public static function setSize<T>( ioArray:Array<T>, inSize:Int) : Array<T> return null;
+	public static function setSize<T>( ioArray:Array<T>, inSize:Int) : Array<T>;
    #end
 
 }

+ 15 - 15
std/cpp/NativeFile.hx

@@ -4,61 +4,61 @@ package cpp;
 extern class NativeFile
 {
    @:native("_hx_std_file_open")
-   extern public static function file_open(fname:String,r:String) : Dynamic return null;
+   extern public static function file_open(fname:String,r:String) : Dynamic;
 
    @:native("_hx_std_file_close")
-   extern public static function file_close(handle:Dynamic) : Void { }
+   extern public static function file_close(handle:Dynamic) : Void;
 
 
    @:native("_hx_std_file_write")
-   extern public static function file_write(handle:Dynamic,s:haxe.io.BytesData,p:Int,n:Int) : Int return 0;
+   extern public static function file_write(handle:Dynamic,s:haxe.io.BytesData,p:Int,n:Int) : Int;
 
 
    @:native("_hx_std_file_write_char")
-   extern public static function file_write_char(handle:Dynamic,c:Int) : Void { }
+   extern public static function file_write_char(handle:Dynamic,c:Int) : Void;
 
 
    @:native("_hx_std_file_read")
-   extern public static function file_read(handle:Dynamic,s:haxe.io.BytesData,p:Int,n:Int) : Int return 0;
+   extern public static function file_read(handle:Dynamic,s:haxe.io.BytesData,p:Int,n:Int) : Int;
 
 
    @:native("_hx_std_file_read_char")
-   extern public static function file_read_char(handle:Dynamic) : Int return 0;
+   extern public static function file_read_char(handle:Dynamic) : Int;
 
 
    @:native("_hx_std_file_seek")
-   extern public static function file_seek(handle:Dynamic,pos:Int,kind:Int) : Void { }
+   extern public static function file_seek(handle:Dynamic,pos:Int,kind:Int) : Void;
 
 
    @:native("_hx_std_file_tell")
-   extern public static function file_tell(handle:Dynamic) : Int return 0;
+   extern public static function file_tell(handle:Dynamic) : Int;
 
 
    @:native("_hx_std_file_eof")
-   extern public static function file_eof(handle:Dynamic) : Bool return false;
+   extern public static function file_eof(handle:Dynamic) : Bool;
 
 
    @:native("_hx_std_file_flush")
-   extern public static function file_flush(handle:Dynamic) : Void return null;
+   extern public static function file_flush(handle:Dynamic) : Void;
 
 
    @:native("_hx_std_file_contents_string")
-   extern public static function file_contents_string(name:String) : String return null;
+   extern public static function file_contents_string(name:String) : String;
 
 
    @:native("_hx_std_file_contents_bytes")
-   extern public static function file_contents_bytes(name:String) : haxe.io.BytesData return null;
+   extern public static function file_contents_bytes(name:String) : haxe.io.BytesData;
 
 
    @:native("_hx_std_file_stdin")
-   extern public static function file_stdin() : Dynamic return null;
+   extern public static function file_stdin() : Dynamic;
 
 
    @:native("_hx_std_file_stdout")
-   extern public static function file_stdout() : Dynamic return null;
+   extern public static function file_stdout() : Dynamic;
 
 
    @:native("_hx_std_file_stderr")
-   extern public static function file_stderr() : Dynamic return null;
+   extern public static function file_stderr() : Dynamic;
 
 }

+ 16 - 16
std/cpp/NativeGc.hx

@@ -3,16 +3,16 @@ package cpp;
 extern class NativeGc
 {
    @:native("__hxcpp_gc_mem_info")
-   static public function memInfo(inWhatInfo:Int) : Float return 0.0;
+   static public function memInfo(inWhatInfo:Int) : Float;
 
    @:native("_hx_allocate_extended") @:templatedCall
-   static public function allocateExtended<T>(cls:Class<T>, size:Int) : T return null;
+   static public function allocateExtended<T>(cls:Class<T>, size:Int) : T;
 
    @:native("_hx_add_finalizable")
-   public static function addFinalizable( instance:{ function finalize():Void; }, inPin:Bool ): Void {}
+   public static function addFinalizable( instance:{ function finalize():Void; }, inPin:Bool ): Void;
 
    @:native("hx::InternalNew")
-   public static function allocGcBytesRaw( inBytes : Int, isContainer:Bool ): RawPointer<cpp.Void> return null;
+   public static function allocGcBytesRaw( inBytes : Int, isContainer:Bool ): RawPointer<cpp.Void>;
 
    inline public static function allocGcBytes( inBytes : Int ): Pointer<cpp.Void>
    {
@@ -21,39 +21,39 @@ extern class NativeGc
 
 
    @:native("__hxcpp_enable") extern
-   static public function enable(inEnable:Bool) : Void { }
+   static public function enable(inEnable:Bool) : Void;
 
    @:native("__hxcpp_collect") extern
-   static public function run(major:Bool) : Void { }
+   static public function run(major:Bool) : Void;
 
    @:native("__hxcpp_gc_compact") extern
-   static public function compact() : Void { }
+   static public function compact() : Void;
 
    @:native("__hxcpp_gc_trace") extern
-   static public function nativeTrace(sought:Class<Dynamic>,printInstances:Bool) : Int return 0;
+   static public function nativeTrace(sought:Class<Dynamic>,printInstances:Bool) : Int;
 
    @:native("__hxcpp_gc_do_not_kill") extern
-   static public function doNotKill(inObject:Dynamic) : Void { }
+   static public function doNotKill(inObject:Dynamic) : Void;
 
    @:native("__hxcpp_get_next_zombie") extern
-   static public function getNextZombie() : Dynamic return null;
+   static public function getNextZombie() : Dynamic;
 
    @:native("__hxcpp_gc_safe_point") extern
-   static public function safePoint() : Void { }
+   static public function safePoint() : Void;
 
    @:native("__hxcpp_enter_gc_free_zone") extern
-   static public function enterGCFreeZone() : Void { }
+   static public function enterGCFreeZone() : Void;
 
    @:native("__hxcpp_exit_gc_free_zone") extern
-   static public function exitGCFreeZone() : Void { }
+   static public function exitGCFreeZone() : Void;
 
    @:native("__hxcpp_set_minimum_free_space") extern
-   static public function setMinimumFreeSpace(inBytes:Int) : Void { }
+   static public function setMinimumFreeSpace(inBytes:Int) : Void;
 
    @:native("__hxcpp_set_target_free_space_percentage") extern
-   static public function setTargetFreeSpacePercentage(inPercentage:Int) : Void { }
+   static public function setTargetFreeSpacePercentage(inPercentage:Int) : Void;
 
    @:native("__hxcpp_set_minimum_working_memory") extern
-   static public function setMinimumWorkingMemory(inBytes:Int) : Void { }
+   static public function setMinimumWorkingMemory(inBytes:Int) : Void;
 }
 

+ 4 - 4
std/cpp/NativeMath.hx

@@ -5,13 +5,13 @@ extern class NativeMath
 {
 #if (cpp && !cppia)
    @:native("_hx_idiv")
-   public static function idiv(num:Int,denom:Int):Int return 0;
+   public static function idiv(num:Int,denom:Int):Int;
    @:native("_hx_imod")
-   public static function imod(num:Int,denom:Int):Int return 0;
+   public static function imod(num:Int,denom:Int):Int;
    @:native("_hx_cast_int")
-   public static function castInt(f:Float):Int return 0;
+   public static function castInt(f:Float):Int;
    @:native("_hx_fast_floor")
-   public static function fastInt(f:Float):Int return 0;
+   public static function fastInt(f:Float):Int;
 
 #else
 

+ 10 - 10
std/cpp/NativeProcess.hx

@@ -5,39 +5,39 @@ extern class NativeProcess
 {
 
    @:native("_hx_std_process_run")
-   public static function process_run(cmd:String,vargs:Array<String>) : Dynamic return null;
+   public static function process_run(cmd:String,vargs:Array<String>) : Dynamic;
 
    @:native("_hx_std_process_run")
-   public static function process_run_with_show(cmd:String,vargs:Array<String>,inShow:Int) : Dynamic return null;
+   public static function process_run_with_show(cmd:String,vargs:Array<String>,inShow:Int) : Dynamic;
 
    @:native("_hx_std_process_stdout_read")
-   public static function process_stdout_read(handle:Dynamic,buf:haxe.io.BytesData,pos:Int,len:Int) : Int return 0;
+   public static function process_stdout_read(handle:Dynamic,buf:haxe.io.BytesData,pos:Int,len:Int) : Int;
 
 
    @:native("_hx_std_process_stderr_read")
-   public static function process_stderr_read(handle:Dynamic,buf:haxe.io.BytesData,pos:Int,len:Int) : Int return 0;
+   public static function process_stderr_read(handle:Dynamic,buf:haxe.io.BytesData,pos:Int,len:Int) : Int;
 
 
    @:native("_hx_std_process_stdin_write")
-   public static function process_stdin_write(handle:Dynamic,buf:haxe.io.BytesData,pos:Int,len:Int) : Int return 0;
+   public static function process_stdin_write(handle:Dynamic,buf:haxe.io.BytesData,pos:Int,len:Int) : Int;
 
 
    @:native("_hx_std_process_stdin_close")
-   public static function process_stdin_close(handle:Dynamic) : Void { }
+   public static function process_stdin_close(handle:Dynamic) : Void;
 
 
    @:native("_hx_std_process_exit")
-   public static function process_exit(handle:Dynamic) : Int return 0;
+   public static function process_exit(handle:Dynamic) : Int;
 
 
    @:native("_hx_std_process_pid")
-   public static function process_pid(handle:Dynamic) : Int return 0;
+   public static function process_pid(handle:Dynamic) : Int;
 
    @:native("_hx_std_process_kill")
-   public static function process_kill(handle:Dynamic) : Void { };
+   public static function process_kill(handle:Dynamic) : Void;
 
 
    @:native("_hx_std_process_close")
-   public static function process_close(handle:Dynamic) : Void { };
+   public static function process_close(handle:Dynamic) : Void;
 
 }

+ 4 - 4
std/cpp/NativeRandom.hx

@@ -5,18 +5,18 @@ extern class NativeRandom
 {
 
    @:native("_hx_std_random_new")
-   public static function random_new() : Dynamic return null;
+   public static function random_new() : Dynamic;
 
 
    @:native("_hx_std_random_set_seed")
-   public static function random_set_seed(handle:Dynamic,v:Int) : Void { }
+   public static function random_set_seed(handle:Dynamic,v:Int) : Void;
 
 
    @:native("_hx_std_random_int")
-   public static function random_int(handle:Dynamic,max:Int) : Int return 0;
+   public static function random_int(handle:Dynamic,max:Int) : Int;
 
    @:native("_hx_std_random_float")
-   public static function random_float(handle:Dynamic) : Float return 0.0;
+   public static function random_float(handle:Dynamic) : Float;
 
 
 }

+ 37 - 37
std/cpp/NativeSocket.hx

@@ -6,147 +6,147 @@ import sys.net.Socket;
 extern class NativeSocket
 {
    @:native("_hx_std_socket_init")
-   public static function socket_init() : Void { }
+   public static function socket_init() : Void;
 
 
    @:native("_hx_std_socket_new")
-   public static function socket_new(udp:Bool) : Dynamic return null;
+   public static function socket_new(udp:Bool) : Dynamic;
 
    @:native("_hx_std_socket_new")
-   public static function socket_new_ip(udp:Bool,ipv6:Bool) : Dynamic return null;
+   public static function socket_new_ip(udp:Bool,ipv6:Bool) : Dynamic;
 
 
    @:native("_hx_std_socket_close")
-   public static function socket_close(handle:Dynamic) : Void { }
+   public static function socket_close(handle:Dynamic) : Void;
 
 
    @:native("_hx_std_socket_bind")
-   public static function socket_bind(o:Dynamic,host:Int,port:Int) : Void { }
+   public static function socket_bind(o:Dynamic,host:Int,port:Int) : Void;
 
    @:native("_hx_std_socket_bind_ipv6")
-   public static function socket_bind_ipv6(o:Dynamic,host:haxe.io.BytesData,port:Int) : Void { }
+   public static function socket_bind_ipv6(o:Dynamic,host:haxe.io.BytesData,port:Int) : Void;
 
 
    @:native("_hx_std_socket_send_char")
-   public static function socket_send_char(o:Dynamic,c:Int) : Void { }
+   public static function socket_send_char(o:Dynamic,c:Int) : Void;
 
 
    @:native("_hx_std_socket_send")
-   public static function socket_send(o:Dynamic,buf:haxe.io.BytesData,p:Int,l:Int) : Int return 0;
+   public static function socket_send(o:Dynamic,buf:haxe.io.BytesData,p:Int,l:Int) : Int;
 
 
    @:native("_hx_std_socket_recv")
-   public static function socket_recv(o:Dynamic,buf:haxe.io.BytesData,p:Int,l:Int) : Int return 0;
+   public static function socket_recv(o:Dynamic,buf:haxe.io.BytesData,p:Int,l:Int) : Int;
 
 
    @:native("_hx_std_socket_recv_char")
-   public static function socket_recv_char(o:Dynamic) : Int return 0;
+   public static function socket_recv_char(o:Dynamic) : Int;
 
 
    @:native("_hx_std_socket_write")
-   public static function socket_write(o:Dynamic,buf:haxe.io.BytesData) : Void { }
+   public static function socket_write(o:Dynamic,buf:haxe.io.BytesData) : Void;
 
 
    @:native("_hx_std_socket_read")
-   public static function socket_read(o:Dynamic) : haxe.io.BytesData return null;
+   public static function socket_read(o:Dynamic) : haxe.io.BytesData;
 
    @:native("_hx_std_host_resolve_ipv6")
-   public static function host_resolve_ipv6(host:String) : haxe.io.BytesData return null;
+   public static function host_resolve_ipv6(host:String) : haxe.io.BytesData;
 
 
    @:native("_hx_std_host_resolve")
-   public static function host_resolve(host:String) : Int return 0;
+   public static function host_resolve(host:String) : Int;
 
 
    @:native("_hx_std_host_to_string")
-   public static function host_to_string(ip:Int) : String return null;
+   public static function host_to_string(ip:Int) : String;
 
    @:native("_hx_std_host_to_string_ipv6")
-   public static function host_to_string_ipv6(ipv6:haxe.io.BytesData) : String return null;
+   public static function host_to_string_ipv6(ipv6:haxe.io.BytesData) : String;
 
 
    @:native("_hx_std_host_reverse")
-   public static function host_reverse(host:Int) : String return null;
+   public static function host_reverse(host:Int) : String;
 
    @:native("_hx_std_host_reverse_ipv6")
-   public static function host_reverse_ipv6(ipv6:haxe.io.BytesData) : String return null;
+   public static function host_reverse_ipv6(ipv6:haxe.io.BytesData) : String;
 
 
    @:native("_hx_std_host_local")
-   public static function host_local() : String return null;
+   public static function host_local() : String;
 
    inline public static function host_local_ipv6() : String return "::1";
 
 
    @:native("_hx_std_socket_connect")
-   public static function socket_connect(o:Dynamic,host:Int,port:Int) : Void { }
+   public static function socket_connect(o:Dynamic,host:Int,port:Int) : Void;
 
    @:native("_hx_std_socket_connect_ipv6")
-   public static function socket_connect_ipv6(o:Dynamic,host:haxe.io.BytesData,port:Int) : Void { }
+   public static function socket_connect_ipv6(o:Dynamic,host:haxe.io.BytesData,port:Int) : Void;
 
 
    @:native("_hx_std_socket_listen")
-   public static function socket_listen(o:Dynamic,n:Int) : Void { }
+   public static function socket_listen(o:Dynamic,n:Int) : Void;
 
 
    @:native("_hx_std_socket_select")
-   public static function socket_select(rs:Array<Dynamic>,ws:Array<Dynamic>,es:Array<Dynamic>,timeout:Dynamic) : Array<Dynamic> return null;
+   public static function socket_select(rs:Array<Dynamic>,ws:Array<Dynamic>,es:Array<Dynamic>,timeout:Dynamic) : Array<Dynamic>;
 
 
    @:native("_hx_std_socket_fast_select")
-   public static function socket_fast_select(rs:Array<Dynamic>,ws:Array<Dynamic>,es:Array<Dynamic>,timeout:Dynamic) : Void { }
+   public static function socket_fast_select(rs:Array<Dynamic>,ws:Array<Dynamic>,es:Array<Dynamic>,timeout:Dynamic) : Void;
 
 
    @:native("_hx_std_socket_accept")
-   public static function socket_accept(o:Dynamic) : Dynamic return null;
+   public static function socket_accept(o:Dynamic) : Dynamic;
 
 
    @:native("_hx_std_socket_peer")
-   public static function socket_peer(o:Dynamic) : Array<Int> return null;
+   public static function socket_peer(o:Dynamic) : Array<Int>;
 
 
    @:native("_hx_std_socket_host")
-   public static function socket_host(o:Dynamic) : Array<Int> return null;
+   public static function socket_host(o:Dynamic) : Array<Int>;
 
 
    @:native("_hx_std_socket_set_timeout")
-   public static function socket_set_timeout(o:Dynamic,t:Dynamic) : Void { }
+   public static function socket_set_timeout(o:Dynamic,t:Dynamic) : Void;
 
 
    @:native("_hx_std_socket_shutdown")
-   public static function socket_shutdown(o:Dynamic,r:Bool,w:Bool) : Void { }
+   public static function socket_shutdown(o:Dynamic,r:Bool,w:Bool) : Void;
 
 
    @:native("_hx_std_socket_set_blocking")
-   public static function socket_set_blocking(o:Dynamic,b:Bool) : Void { }
+   public static function socket_set_blocking(o:Dynamic,b:Bool) : Void;
 
 
    @:native("_hx_std_socket_set_fast_send")
-   public static function socket_set_fast_send(o:Dynamic,b:Bool) : Void { }
+   public static function socket_set_fast_send(o:Dynamic,b:Bool) : Void;
 
 
    @:native("_hx_std_socket_poll_alloc")
-   public static function socket_poll_alloc(nsocks:Int) : Dynamic return null;
+   public static function socket_poll_alloc(nsocks:Int) : Dynamic;
 
 
    @:native("_hx_std_socket_poll_prepare")
-   public static function socket_poll_prepare(pdata:Dynamic,rsocks:Array<Socket>,wsocks:Array<Socket>) : Array< Array<Int> > return null;
+   public static function socket_poll_prepare(pdata:Dynamic,rsocks:Array<Socket>,wsocks:Array<Socket>) : Array< Array<Int> >;
 
 
    @:native("_hx_std_socket_poll_events")
-   public static function socket_poll_events(pdata:Dynamic,timeout:Float) : Void { }
+   public static function socket_poll_events(pdata:Dynamic,timeout:Float) : Void;
 
 
    @:native("_hx_std_socket_poll")
-   public static function socket_poll(socks:Array<Socket>,pdata:Dynamic,timeout:Float) : Array<Socket> return null;
+   public static function socket_poll(socks:Array<Socket>,pdata:Dynamic,timeout:Float) : Array<Socket>;
 
 
    @:native("_hx_std_socket_send_to")
-   public static function socket_send_to(o:Dynamic,buf:haxe.io.BytesData,p:Int,l:Int,inAddr:Dynamic) : Int return 0;
+   public static function socket_send_to(o:Dynamic,buf:haxe.io.BytesData,p:Int,l:Int,inAddr:Dynamic) : Int;
 
 
    @:native("_hx_std_socket_recv_from")
-   public static function socket_recv_from(o:Dynamic,buf:haxe.io.BytesData,p:Int,l:Int,outAddr:Dynamic) : Int return 0;
+   public static function socket_recv_from(o:Dynamic,buf:haxe.io.BytesData,p:Int,l:Int,outAddr:Dynamic) : Int;
 
 
 

+ 36 - 36
std/cpp/NativeSsl.hx

@@ -4,111 +4,111 @@ package cpp;
 extern class NativeSsl
 {
    @:native("_hx_ssl_new")
-   public static function ssl_new( conf : Dynamic ) : Dynamic { }
+   public static function ssl_new( conf : Dynamic ) : Dynamic;
 
    @:native("_hx_ssl_close")
-   public static function ssl_close( ctx : Dynamic ) : Void { }
+   public static function ssl_close( ctx : Dynamic ) : Void;
 
    @:native("_hx_ssl_handshake")
-   public static function ssl_handshake( ctx : Dynamic ) : Void { }
+   public static function ssl_handshake( ctx : Dynamic ) : Void;
 
    @:native("_hx_ssl_set_socket")
-   public static function ssl_set_socket( ctx : Dynamic, socket : Dynamic ) : Void { }
+   public static function ssl_set_socket( ctx : Dynamic, socket : Dynamic ) : Void;
 
    @:native("_hx_ssl_set_hostname")
-   public static function ssl_set_hostname( ctx : Dynamic, hostname : String ) : Void { }
+   public static function ssl_set_hostname( ctx : Dynamic, hostname : String ) : Void;
 
    @:native("_hx_ssl_get_peer_certificate")
-   public static function ssl_get_peer_certificate( ctx : Dynamic ) : Dynamic { }
+   public static function ssl_get_peer_certificate( ctx : Dynamic ) : Dynamic;
 
    @:native("_hx_ssl_get_verify_result")
-   public static function ssl_get_verify_result( ctx : Dynamic ) : Bool { }
+   public static function ssl_get_verify_result( ctx : Dynamic ) : Bool;
 
    @:native("_hx_ssl_send_char")
-   public static function ssl_send_char( ctx : Dynamic, char : Int ) : Void { }
+   public static function ssl_send_char( ctx : Dynamic, char : Int ) : Void;
 
    @:native("_hx_ssl_send")
-   public static function ssl_send( ctx : Dynamic, buf : haxe.io.BytesData, p : Int, l : Int ) : Int { }
+   public static function ssl_send( ctx : Dynamic, buf : haxe.io.BytesData, p : Int, l : Int ) : Int;
 
    @:native("_hx_ssl_write")
-   public static function ssl_write( ctx : Dynamic, data : haxe.io.BytesData ) : Void { }
+   public static function ssl_write( ctx : Dynamic, data : haxe.io.BytesData ) : Void;
 
    @:native("_hx_ssl_recv_char")
-   public static function ssl_recv_char( ctx : Dynamic ) : Int { }
+   public static function ssl_recv_char( ctx : Dynamic ) : Int;
 
    @:native("_hx_ssl_recv")
-   public static function ssl_recv( ctx : Dynamic, buf : haxe.io.BytesData, p : Int, l : Int ) : Int { }
+   public static function ssl_recv( ctx : Dynamic, buf : haxe.io.BytesData, p : Int, l : Int ) : Int;
 
    @:native("_hx_ssl_read")
-   public static function ssl_read( ctx : Dynamic ) : haxe.io.BytesData { }
+   public static function ssl_read( ctx : Dynamic ) : haxe.io.BytesData;
 
    @:native("_hx_ssl_conf_new")
-   public static function conf_new( server : Bool ) : Dynamic { }
+   public static function conf_new( server : Bool ) : Dynamic;
 
    @:native("_hx_ssl_conf_close")
-   public static function conf_close( conf : Dynamic ) : Void { }
+   public static function conf_close( conf : Dynamic ) : Void;
 
    @:native("_hx_ssl_conf_set_ca")
-   public static function conf_set_ca( conf : Dynamic, cert : Dynamic ) : Void { }
+   public static function conf_set_ca( conf : Dynamic, cert : Dynamic ) : Void;
 
    @:native("_hx_ssl_conf_set_verify")
-   public static function conf_set_verify( conf : Dynamic, mode : Int ) : Void { }
+   public static function conf_set_verify( conf : Dynamic, mode : Int ) : Void;
 
    @:native("_hx_ssl_conf_set_cert")
-   public static function conf_set_cert( conf : Dynamic, cert : Dynamic, pkey : Dynamic ) : Void { }
+   public static function conf_set_cert( conf : Dynamic, cert : Dynamic, pkey : Dynamic ) : Void;
 
    @:native("_hx_ssl_conf_set_servername_callback")
-   public static function conf_set_servername_callback( conf : Dynamic, cb : Dynamic ) : Void { }
+   public static function conf_set_servername_callback( conf : Dynamic, cb : Dynamic ) : Void;
 
    @:native("_hx_ssl_cert_load_defaults")
-   public static function cert_load_defaults() : Dynamic { }
+   public static function cert_load_defaults() : Dynamic;
 
    @:native("_hx_ssl_cert_load_file")
-   public static function cert_load_file( file : String ) : Dynamic { }
+   public static function cert_load_file( file : String ) : Dynamic;
 
    @:native("_hx_ssl_cert_load_path")
-   public static function cert_load_path( path : String ) : Dynamic { }
+   public static function cert_load_path( path : String ) : Dynamic;
 
    @:native("_hx_ssl_cert_get_subject")
-   public static function cert_get_subject( cert : Dynamic, field : String ) : String { }
+   public static function cert_get_subject( cert : Dynamic, field : String ) : String;
 
    @:native("_hx_ssl_cert_get_issuer")
-   public static function cert_get_issuer( cert : Dynamic, field : String ) : String { }
+   public static function cert_get_issuer( cert : Dynamic, field : String ) : String;
 
    @:native("_hx_ssl_cert_get_altnames")
-   public static function cert_get_altnames( cert : Dynamic ) : Array<String> { }
+   public static function cert_get_altnames( cert : Dynamic ) : Array<String>;
 
    @:native("_hx_ssl_cert_get_notbefore")
-   public static function cert_get_notbefore( cert : Dynamic ) : Array<Int> { }
+   public static function cert_get_notbefore( cert : Dynamic ) : Array<Int>;
 
    @:native("_hx_ssl_cert_get_notafter")
-   public static function cert_get_notafter( cert : Dynamic ) : Array<Int> { }
+   public static function cert_get_notafter( cert : Dynamic ) : Array<Int>;
 
    @:native("_hx_ssl_cert_get_next")
-   public static function cert_get_next( cert : Dynamic ) : Dynamic { }
+   public static function cert_get_next( cert : Dynamic ) : Dynamic;
 
    @:native("_hx_ssl_cert_add_pem")
-   public static function cert_add_pem( cert : Dynamic, data : String ) : Dynamic { }
+   public static function cert_add_pem( cert : Dynamic, data : String ) : Dynamic;
 
    @:native("_hx_ssl_cert_add_der")
-   public static function cert_add_der( cert : Dynamic, data : haxe.io.BytesData ) : Dynamic { }
+   public static function cert_add_der( cert : Dynamic, data : haxe.io.BytesData ) : Dynamic;
 
    @:native("_hx_ssl_key_from_der")
-   public static function key_from_der( data : haxe.io.BytesData, pub : Bool ) : Dynamic { }
+   public static function key_from_der( data : haxe.io.BytesData, pub : Bool ) : Dynamic;
 
    @:native("_hx_ssl_key_from_pem")
-   public static function key_from_pem( data : String, pub : Bool, pass : String ) : Dynamic { }
+   public static function key_from_pem( data : String, pub : Bool, pass : String ) : Dynamic;
 
    @:native("_hx_ssl_dgst_make")
-   public static function dgst_make( data : haxe.io.BytesData, alg : String ) : haxe.io.BytesData { }
+   public static function dgst_make( data : haxe.io.BytesData, alg : String ) : haxe.io.BytesData;
 
    @:native("_hx_ssl_dgst_sign")
-   public static function dgst_sign( data : haxe.io.BytesData, key : Dynamic, alg : String ) : haxe.io.BytesData { }
+   public static function dgst_sign( data : haxe.io.BytesData, key : Dynamic, alg : String ) : haxe.io.BytesData;
 
    @:native("_hx_ssl_dgst_verify")
-   public static function dgst_verify( data : haxe.io.BytesData, sign : haxe.io.BytesData, key : Dynamic, alg : String ) : Bool { }
+   public static function dgst_verify( data : haxe.io.BytesData, sign : haxe.io.BytesData, key : Dynamic, alg : String ) : Bool;
 
    @:native("_hx_ssl_init")
-   public static function init() : Void { }
+   public static function init() : Void;
 
 }

+ 6 - 6
std/cpp/NativeString.hx

@@ -38,25 +38,25 @@ extern class NativeString {
 
 
    @:native("_hx_string_compare")
-   public static function compare(inString0:String, inString1:String) : Int return 0;
+   public static function compare(inString0:String, inString1:String) : Int;
 
    @:native("_hx_utf8_char_code_at")
-   public static function utf8CharCodeAt(inString:String, inIndex:Int) : Int return 0;
+   public static function utf8CharCodeAt(inString:String, inIndex:Int) : Int;
 
    @:native("_hx_utf8_length")
-   public static function utf8Length(inString:String) : Int return 1;
+   public static function utf8Length(inString:String) : Int;
 
    @:native("_hx_utf8_is_valid")
-   public static function utf8IsValid(inString:String) : Bool return false;
+   public static function utf8IsValid(inString:String) : Bool;
 
    @:native("_hx_utf8_sub")
-   public static function utf8Sub(inString:String,charStart:Int, inLen:Int) : String return null;
+   public static function utf8Sub(inString:String,charStart:Int, inLen:Int) : String;
 
    @:native("_hx_string_create")
    public static function fromPointerLen(inPtr:ConstPointer<Char>, len:Int ) : String;
 
    @:native("_hx_utf8_decode_advance")
-   public static function utf8DecodeAdvance(reference:Char) : Int  return 0;
+   public static function utf8DecodeAdvance(reference:Char) : Int ;
 
 }
 

+ 27 - 27
std/cpp/NativeSys.hx

@@ -4,109 +4,109 @@ package cpp;
 extern class NativeSys
 {
    @:native("__hxcpp_print")
-   public static function print( v : Dynamic ) : Void { }
+   public static function print( v : Dynamic ) : Void;
 
    @:native("__hxcpp_println")
-   public static function println( v : Dynamic ) : Void { }
+   public static function println( v : Dynamic ) : Void;
 
    @:native("_hx_std_get_env")
-   extern public static function get_env(v:String) : String return null;
+   extern public static function get_env(v:String) : String;
 
 
    @:native("_hx_std_put_env")
-   extern public static function put_env(e:String,v:String) : Void { }
+   extern public static function put_env(e:String,v:String) : Void;
 
 
    @:native("_hx_std_sys_sleep")
-   extern public static function sys_sleep(f:Float) : Void { }
+   extern public static function sys_sleep(f:Float) : Void;
 
 
    @:native("_hx_std_set_time_locale")
-   extern public static function set_time_locale(l:String) : Bool return false;
+   extern public static function set_time_locale(l:String) : Bool;
 
 
    @:native("_hx_std_get_cwd")
-   extern public static function get_cwd() : String return null;
+   extern public static function get_cwd() : String;
 
 
    @:native("_hx_std_set_cwd")
-   extern public static function set_cwd(d:String) : Void { }
+   extern public static function set_cwd(d:String) : Void;
 
 
    @:native("_hx_std_sys_string")
-   extern public static function sys_string() : String return null;
+   extern public static function sys_string() : String;
 
 
    @:native("_hx_std_sys_is64")
-   extern public static function sys_is64() : Bool return false;
+   extern public static function sys_is64() : Bool;
 
 
    @:native("_hx_std_sys_command")
-   extern public static function sys_command(cmd:String) : Int return 0;
+   extern public static function sys_command(cmd:String) : Int;
 
 
    @:native("_hx_std_sys_exit")
-   extern public static function sys_exit(code:Int) : Void { }
+   extern public static function sys_exit(code:Int) : Void;
 
 
    @:native("_hx_std_sys_exists")
-   extern public static function sys_exists(path:String) : Bool return false;
+   extern public static function sys_exists(path:String) : Bool;
 
 
    @:native("_hx_std_file_delete")
-   extern public static function file_delete(path:String) : Void { }
+   extern public static function file_delete(path:String) : Void;
 
 
    @:native("_hx_std_sys_rename")
-   extern public static function sys_rename(path:String,newname:String) : Bool return false;
+   extern public static function sys_rename(path:String,newname:String) : Bool;
 
 
    @:native("_hx_std_sys_stat")
-   extern public static function sys_stat(path:String) : Dynamic return null;
+   extern public static function sys_stat(path:String) : Dynamic;
 
 
    @:native("_hx_std_sys_file_type")
-   extern public static function sys_file_type(path:String) : String return null;
+   extern public static function sys_file_type(path:String) : String;
 
 
    @:native("_hx_std_sys_create_dir")
-   extern public static function sys_create_dir(path:String,mode:Int) : Bool return false;
+   extern public static function sys_create_dir(path:String,mode:Int) : Bool;
 
 
    @:native("_hx_std_sys_remove_dir")
-   extern public static function sys_remove_dir(path:String) : Void { }
+   extern public static function sys_remove_dir(path:String) : Void;
 
 
    @:native("_hx_std_sys_time")
-   extern public static function sys_time() : Float return 0;
+   extern public static function sys_time() : Float;
 
 
    @:native("_hx_std_sys_cpu_time")
-   extern public static function sys_cpu_time() : Float return 0;
+   extern public static function sys_cpu_time() : Float;
 
 
    @:native("_hx_std_sys_read_dir")
-   extern public static function sys_read_dir(p:String) : Array<String> return null;
+   extern public static function sys_read_dir(p:String) : Array<String>;
 
 
    @:native("_hx_std_file_full_path")
-   extern public static function file_full_path(path:String) : String return null;
+   extern public static function file_full_path(path:String) : String;
 
 
    @:native("_hx_std_sys_exe_path")
-   extern public static function sys_exe_path() : String return null;
+   extern public static function sys_exe_path() : String;
 
 
    @:native("_hx_std_sys_env")
-   extern public static function sys_env() : Array<String> return null;
+   extern public static function sys_env() : Array<String>;
 
 
    @:native("_hx_std_sys_getch")
-   extern public static function sys_getch(b:Bool) : Int return 0;
+   extern public static function sys_getch(b:Bool) : Int;
 
 
    @:native("_hx_std_sys_get_pid")
-   extern public static function sys_get_pid() : Int return 0;
+   extern public static function sys_get_pid() : Int;
 
 }
 

+ 1 - 1
std/cpp/NativeXml.hx

@@ -245,7 +245,7 @@ class Xml {
    }
 
    @:native("parse_xml")
-   extern static function parse_xml(str:String, state:NativeXmlState) { }
+   extern static function parse_xml(str:String, state:NativeXmlState);
 
    public static function parse( str : String ) : Xml
    {

+ 6 - 6
std/cpp/Stdlib.hx

@@ -26,18 +26,18 @@ package cpp;
 extern class Stdlib
 {
    @:native("malloc")
-   public static function nativeMalloc(bytes:Int) : cpp.RawPointer<cpp.Void> return null;
+   public static function nativeMalloc(bytes:Int) : cpp.RawPointer<cpp.Void>;
    @:native("calloc")
-   public static function nativeCalloc(bytes:Int) : cpp.RawPointer<cpp.Void> return null;
+   public static function nativeCalloc(bytes:Int) : cpp.RawPointer<cpp.Void>;
    @:native("realloc")
-   public static function nativeRealloc(inPtr:cpp.RawPointer<cpp.Void>,bytes:Int) : cpp.RawPointer<cpp.Void> return null;
+   public static function nativeRealloc(inPtr:cpp.RawPointer<cpp.Void>,bytes:Int) : cpp.RawPointer<cpp.Void>;
    @:native("free")
-   public static function nativeFree(ptr:cpp.RawPointer<cpp.Void>) : Void { }
+   public static function nativeFree(ptr:cpp.RawPointer<cpp.Void>) : Void;
    @:native("memcpy")
-   public static function nativeMemcpy(dest:cpp.RawPointer<cpp.Void>, src:cpp.RawConstPointer<cpp.Void>, bytes:Int) : Void { }
+   public static function nativeMemcpy(dest:cpp.RawPointer<cpp.Void>, src:cpp.RawConstPointer<cpp.Void>, bytes:Int) : Void;
 
    @:native("hx::ClassSizeOf") @:templatedCall
-   public static function sizeof<T>(t:T) : Int { }
+   public static function sizeof<T>(t:T) : Int;
 
    inline public static function memcpy<DEST,SRC>(dest:cpp.Pointer<DEST>, src:cpp.ConstPointer<SRC>, bytes:Int) : Void
       nativeMemcpy(cast dest.ptr, cast src.ptr, bytes);

+ 4 - 4
std/cpp/_std/EReg.hx

@@ -179,14 +179,14 @@
 	static var escapeRegExpRe = ~/[\[\]{}()*+?.\\\^$|]/g;
 
    @:native("_hx_regexp_new_options")
-	extern static function _hx_regexp_new_options(s:String, options:String) : Dynamic return null;
+	extern static function _hx_regexp_new_options(s:String, options:String) : Dynamic;
 
    @:native("_hx_regexp_match")
-	extern static function _hx_regexp_match(handler: Dynamic, string:String, pos:Int, len:Int) : Bool return false;
+	extern static function _hx_regexp_match(handler: Dynamic, string:String, pos:Int, len:Int) : Bool;
 
    @:native("_hx_regexp_matched")
-	extern static function _hx_regexp_matched(handle:Dynamic, pos:Int) : String return null;
+	extern static function _hx_regexp_matched(handle:Dynamic, pos:Int) : String;
 
    @:native("_hx_regexp_matched_pos")
-	extern static function _hx_regexp_matched_pos(handle:Dynamic, match:Int) : {pos:Int, len:Int} return null;
+	extern static function _hx_regexp_matched_pos(handle:Dynamic, match:Int) : {pos:Int, len:Int};
 }

+ 1 - 1
std/cpp/_std/Type.hx

@@ -141,7 +141,7 @@ enum ValueType {
 	}
 
     @:native("_hx_getEnumValueIndex")
-	extern private static function getEnumValueIndex( e : EnumValue ) : Int return 0;
+	extern private static function getEnumValueIndex( e : EnumValue ) : Int;
 
 	#if !cppia inline #end public static function enumIndex( e : EnumValue ) : Int {
 			return getEnumValueIndex(e);

+ 34 - 34
std/cpp/_std/haxe/Int64.hx

@@ -32,106 +32,106 @@ private extern class ___Int64 {
    public function get():cpp.Int64;
 
    @:native("_hx_int64_make")
-   public static function make(high:Int32, low:Int32): __Int64 return null;
+   public static function make(high:Int32, low:Int32): __Int64;
 
    @:native(" ::cpp::Int64Struct")
-   public static function ofInt(value:Int): __Int64 return null;
+   public static function ofInt(value:Int): __Int64;
 
    @:native(" ::cpp::Int64Struct::is")
-   public static function is(d:Dynamic):Bool return false;
+   public static function is(d:Dynamic):Bool;
 
    @:native("_hx_int64_is_neg")
-   public static function isNeg(a:__Int64):Bool return false;
+   public static function isNeg(a:__Int64):Bool;
 
    @:native("_hx_int64_is_zero")
-   public static function isZero(a:__Int64):Bool return false;
+   public static function isZero(a:__Int64):Bool;
 
    @:native("_hx_int64_compare")
-   public static function compare(a:__Int64, b:__Int64):Int return 0;
+   public static function compare(a:__Int64, b:__Int64):Int;
 
    @:native("_hx_int64_ucompare")
-   public static function ucompare(a:__Int64, b:__Int64):Int return 0;
+   public static function ucompare(a:__Int64, b:__Int64):Int;
 
    @:native("_hx_int64_to_string")
-   public static function toString(a:__Int64):String return null;
+   public static function toString(a:__Int64):String;
 
    @:native("_hx_int64_neg")
-   public static function neg(a:__Int64): __Int64 return null;
+   public static function neg(a:__Int64): __Int64;
 
    @:native("_hx_int64_pre_increment")
-   public static function preIncrement(a:__Int64): __Int64 return null;
+   public static function preIncrement(a:__Int64): __Int64;
 
    @:native("_hx_int64_post_increment")
-   public static function postIncrement(a:__Int64): __Int64 return null;
+   public static function postIncrement(a:__Int64): __Int64;
 
    @:native("_hx_int64_pre_decrement")
-   public static function preDecrement(a:__Int64): __Int64 return null;
+   public static function preDecrement(a:__Int64): __Int64;
 
    @:native("_hx_int64_post_decrement")
-   public static function postDecrement(a:__Int64): __Int64 return null;
+   public static function postDecrement(a:__Int64): __Int64;
 
    @:native("_hx_int64_add")
-   public static function add(a:__Int64, b:__Int64): __Int64 return null;
+   public static function add(a:__Int64, b:__Int64): __Int64;
 
    @:native("_hx_int64_add")
-   public static function addInt(a:__Int64, b:Int): __Int64 return null;
+   public static function addInt(a:__Int64, b:Int): __Int64;
 
    @:native("_hx_int64_sub")
-   public static function sub(a:__Int64, b:__Int64): __Int64 return null;
+   public static function sub(a:__Int64, b:__Int64): __Int64;
 
    @:native("_hx_int64_sub")
-   public static function subInt(a:__Int64, b:Int): __Int64 return null;
+   public static function subInt(a:__Int64, b:Int): __Int64;
 
    @:native("_hx_int64_sub")
-   public static function intSub(a:Int, b:__Int64): __Int64 return null;
+   public static function intSub(a:Int, b:__Int64): __Int64;
 
    @:native("_hx_int64_mul")
-   public static function mul(a:__Int64, b:__Int64): __Int64 return null;
+   public static function mul(a:__Int64, b:__Int64): __Int64;
 
    @:native("_hx_int64_div")
-   public static function div(a:__Int64, b:__Int64): __Int64 return null;
+   public static function div(a:__Int64, b:__Int64): __Int64;
 
    @:native("_hx_int64_mod")
-   public static function mod(a:__Int64, b:__Int64): __Int64 return null;
+   public static function mod(a:__Int64, b:__Int64): __Int64;
 
    @:native("_hx_int64_eq")
-   public static function eq(a:__Int64, b:__Int64): Bool return null;
+   public static function eq(a:__Int64, b:__Int64): Bool;
 
    @:native("_hx_int64_eq")
-   public static function eqInt(a:__Int64, b:Int): Bool return null;
+   public static function eqInt(a:__Int64, b:Int): Bool;
 
    @:native("_hx_int64_neq")
-   public static function neq(a:__Int64, b:__Int64): Bool return null;
+   public static function neq(a:__Int64, b:__Int64): Bool;
 
    @:native("_hx_int64_neq")
-   public static function neqInt(a:__Int64, b:Int): Bool return null;
+   public static function neqInt(a:__Int64, b:Int): Bool;
 
    @:native("_hx_int64_complement")
-   public static function complement(a:__Int64): __Int64 return null;
+   public static function complement(a:__Int64): __Int64;
 
    @:native("_hx_int64_and")
-   public static function bitAnd(a:__Int64, b:__Int64): __Int64 return null;
+   public static function bitAnd(a:__Int64, b:__Int64): __Int64;
 
    @:native("_hx_int64_or")
-   public static function bitOr(a:__Int64, b:__Int64): __Int64 return null;
+   public static function bitOr(a:__Int64, b:__Int64): __Int64;
 
    @:native("_hx_int64_xor")
-   public static function bitXor(a:__Int64, b:__Int64): __Int64 return null;
+   public static function bitXor(a:__Int64, b:__Int64): __Int64;
 
    @:native("_hx_int64_shl")
-   public static function shl(a:__Int64, b:Int): __Int64 return null;
+   public static function shl(a:__Int64, b:Int): __Int64;
 
    @:native("_hx_int64_shr")
-   public static function shr(a:__Int64, b:Int): __Int64 return null;
+   public static function shr(a:__Int64, b:Int): __Int64;
 
    @:native("_hx_int64_ushr")
-   public static function ushr(a:__Int64, b:Int): __Int64 return null;
+   public static function ushr(a:__Int64, b:Int): __Int64;
 
    @:native("_hx_int64_high")
-   public static function high(a:__Int64):Int32 return 0;
+   public static function high(a:__Int64):Int32;
 
    @:native("_hx_int64_low")
-   public static function low(a:__Int64):Int32 return 0;
+   public static function low(a:__Int64):Int32;
 
 }
 

+ 1 - 1
std/cpp/_std/haxe/Log.hx

@@ -24,7 +24,7 @@ package haxe;
 @:coreApi class Log {
 
    @:native("__trace")
-   extern private static function nativeTrace(message:String, posInfo:Dynamic) : Void { }
+   extern private static function nativeTrace(message:String, posInfo:Dynamic) : Void;
 
 	public static dynamic function trace( v : Dynamic, ?infos : PosInfos ) : Void {
 		if (infos!=null && infos.customParams!=null) {

+ 5 - 5
std/cpp/_std/haxe/zip/Compress.hx

@@ -54,18 +54,18 @@ class Compress {
 	}
 
     @:native("_hx_deflate_init")
-	extern static function _deflate_init(level:Int) : Dynamic return null;
+	extern static function _deflate_init(level:Int) : Dynamic;
 
     @:native("_hx_deflate_bound")
-	extern static function _deflate_bound(handle:Dynamic,length:Int):Int return 0;
+	extern static function _deflate_bound(handle:Dynamic,length:Int):Int;
 
     @:native("_hx_deflate_buffer")
-	extern static function _deflate_buffer(handle:Dynamic, src:haxe.io.BytesData, srcPos:Int,  dest:haxe.io.BytesData, destPos:Int) : { done : Bool, read : Int, write : Int } return null;
+	extern static function _deflate_buffer(handle:Dynamic, src:haxe.io.BytesData, srcPos:Int,  dest:haxe.io.BytesData, destPos:Int) : { done : Bool, read : Int, write : Int };
 
     @:native("_hx_deflate_end")
-	extern static function _deflate_end(handle:Dynamic) : Void { }
+	extern static function _deflate_end(handle:Dynamic) : Void;
 
     @:native("_hx_zip_set_flush_mode")
-	extern static function _set_flush_mode(handle:Dynamic, flushMode:String):Void { }
+	extern static function _set_flush_mode(handle:Dynamic, flushMode:String):Void;
 
 }

+ 4 - 4
std/cpp/_std/haxe/zip/Uncompress.hx

@@ -60,15 +60,15 @@ class Uncompress {
 	}
 
    @:native("_hx_inflate_init")
-	extern static function _inflate_init(windowBits:Dynamic) : Dynamic return null;
+	extern static function _inflate_init(windowBits:Dynamic) : Dynamic;
 
    @:native("_hx_inflate_buffer")
-	extern static function _inflate_buffer(handle:Dynamic, src:haxe.io.BytesData, srcPos:Int,  dest:haxe.io.BytesData, destPos:Int) : { done : Bool, read : Int, write : Int } return null;
+	extern static function _inflate_buffer(handle:Dynamic, src:haxe.io.BytesData, srcPos:Int,  dest:haxe.io.BytesData, destPos:Int) : { done : Bool, read : Int, write : Int };
 
    @:native("_hx_inflate_end")
-	extern static function _inflate_end(handle:Dynamic):Void { }
+	extern static function _inflate_end(handle:Dynamic):Void;
 
    @:native("_hx_zip_set_flush_mode")
-	extern static function _set_flush_mode(handle:Dynamic, flushMode:String):Void { }
+	extern static function _set_flush_mode(handle:Dynamic, flushMode:String):Void;
 
 }

+ 13 - 13
std/cpp/_std/sys/db/Mysql.hx

@@ -25,34 +25,34 @@ package sys.db;
 private class D {
 
    @:native("_hx_mysql_connect")
-	extern public static function connect(params:Dynamic):Dynamic return null;
+	extern public static function connect(params:Dynamic):Dynamic;
    @:native("_hx_mysql_select_db")
-	extern public static function select_db(handle:Dynamic, db:String):Void { }
+	extern public static function select_db(handle:Dynamic, db:String):Void;
    @:native("_hx_mysql_request")
-	extern public static function request(handle:Dynamic,req:String):Dynamic return null;
+	extern public static function request(handle:Dynamic,req:String):Dynamic;
    @:native("_hx_mysql_close")
-	extern public static function close(handle:Dynamic):Dynamic return null;
+	extern public static function close(handle:Dynamic):Dynamic;
    @:native("_hx_mysql_escape")
-	extern public static function escape(handle:Dynamic,str:String):String return null;
+	extern public static function escape(handle:Dynamic,str:String):String;
    @:native("_hx_mysql_result_get_length")
-	extern public static function result_get_length(handle:Dynamic):Int return 0;
+	extern public static function result_get_length(handle:Dynamic):Int;
    @:native("_hx_mysql_result_get_nfields")
-	extern public static function result_get_nfields(handle:Dynamic):Int return 0;
+	extern public static function result_get_nfields(handle:Dynamic):Int;
    @:native("_hx_mysql_result_next")
-	extern public static function result_next(handle:Dynamic):Dynamic return null;
+	extern public static function result_next(handle:Dynamic):Dynamic;
    @:native("_hx_mysql_result_get")
-	extern public static function result_get(handle:Dynamic,i:Int) : String return null;
+	extern public static function result_get(handle:Dynamic,i:Int) : String;
    @:native("_hx_mysql_result_get_int")
-	extern public static function result_get_int(handle:Dynamic,i:Int) : Int return 0;
+	extern public static function result_get_int(handle:Dynamic,i:Int) : Int;
    @:native("_hx_mysql_result_get_float")
-	extern public static function result_get_float(handle:Dynamic,i:Int):Float return 0.0;
+	extern public static function result_get_float(handle:Dynamic,i:Int):Float;
    @:native("_hx_mysql_result_get_fields_names")
-	extern public static function result_fields_names(handle:Dynamic):Array<String> return null;
+	extern public static function result_fields_names(handle:Dynamic):Array<String>;
 
    @:native("_hx_mysql_set_conversion")
 	extern public static function set_conv_funs(
       charsToBytes: cpp.Callable< Dynamic -> Dynamic >,
-      intToDate: cpp.Callable< Float -> Dynamic > ) : Void {}
+      intToDate: cpp.Callable< Float -> Dynamic > ) : Void;
 
    public static function charsToBytes(data:Dynamic) : Dynamic
       return haxe.io.Bytes.ofData(data);

+ 10 - 10
std/cpp/_std/sys/db/Sqlite.hx

@@ -97,13 +97,13 @@ private class SqliteConnection implements Connection {
 
 
    @:native("_hx_sqlite_connect")
-	extern public static function _connect(filename:String):Dynamic return null;
+	extern public static function _connect(filename:String):Dynamic;
    @:native("_hx_sqlite_request")
-	extern public static function _request(handle:Dynamic,req:String):Dynamic return null;
+	extern public static function _request(handle:Dynamic,req:String):Dynamic;
    @:native("_hx_sqlite_close")
-	extern public static function _close(handle:Dynamic):Void { };
+	extern public static function _close(handle:Dynamic):Void;
    @:native("_hx_sqlite_last_insert_id")
-	extern public static function _last_id(handle:Dynamic):Int return 0;
+	extern public static function _last_id(handle:Dynamic):Int;
 
 }
 
@@ -183,17 +183,17 @@ private class SqliteResultSet implements ResultSet {
 
 
     @:native("_hx_sqlite_result_next")
-	extern public static function result_next(handle:Dynamic):Dynamic return null;
+	extern public static function result_next(handle:Dynamic):Dynamic;
     @:native("_hx_sqlite_result_get_length")
-	extern public static function result_get_length(handle:Dynamic):Int return 0;
+	extern public static function result_get_length(handle:Dynamic):Int;
     @:native("_hx_sqlite_result_get_nfields")
-	extern public static function result_get_nfields(handle:Dynamic):Int return 0;
+	extern public static function result_get_nfields(handle:Dynamic):Int;
     @:native("_hx_sqlite_result_get")
-	extern public static function result_get(handle:Dynamic,i:Int) : String return null;
+	extern public static function result_get(handle:Dynamic,i:Int) : String;
     @:native("_hx_sqlite_result_get_int")
-	extern public static function result_get_int(handle:Dynamic,i:Int) : Int return 0;
+	extern public static function result_get_int(handle:Dynamic,i:Int) : Int;
     @:native("_hx_sqlite_result_get_float")
-	extern public static function result_get_float(handle:Dynamic,i:Int):Float return 0.0;
+	extern public static function result_get_float(handle:Dynamic,i:Int):Float;
 
 }
 

+ 1 - 1
std/cpp/cppia/Host.hx

@@ -33,7 +33,7 @@ class Host
 
 
    @:native("hx::EnableJit")
-   extern public static function enableJit(enable:Bool) : Void { }
+   extern public static function enableJit(enable:Bool) : Void;
 
    public static function runFile(filename:String)
    {

+ 3 - 3
std/cpp/objc/NSData.hx

@@ -26,9 +26,9 @@ package cpp.objc;
 @:objc
 extern abstract NSData( NSDataData )
 {
-   @:native("_hx_value_to_objc") extern static function to_data(b:haxe.io.BytesData) : NSData return null;
-   @:native("_hx_value_to_objc") extern static function to_data_data(b:haxe.io.BytesData) : NSDataData return null;
-   @:native("_hx_objc_to_bytes") extern static function NSDataDataToBytes(d:NSDataData) : haxe.io.BytesData return null;
+   @:native("_hx_value_to_objc") extern static function to_data(b:haxe.io.BytesData) : NSData;
+   @:native("_hx_value_to_objc") extern static function to_data_data(b:haxe.io.BytesData) : NSDataData;
+   @:native("_hx_objc_to_bytes") extern static function NSDataDataToBytes(d:NSDataData) : haxe.io.BytesData;
 
 
    inline function new(d:NSDataData) this = d;

+ 2 - 2
std/cpp/objc/NSDictionary.hx

@@ -26,8 +26,8 @@ package cpp.objc;
 @:objc
 extern abstract NSDictionary( DictionaryData )
 {
-   @:native("_hx_obj_to_nsdictionary") extern static function _hx_obj_to_nsdictionary(obj:Dynamic) : DictionaryData return null;
-   @:native("_hx_nsdictionary_to_obj") extern static function _hx_nsdictionary_to_obj(d:DictionaryData) : Dynamic return null;
+   @:native("_hx_obj_to_nsdictionary") extern static function _hx_obj_to_nsdictionary(obj:Dynamic) : DictionaryData;
+   @:native("_hx_nsdictionary_to_obj") extern static function _hx_nsdictionary_to_obj(d:DictionaryData) : Dynamic;
 
 
    inline function new(dict:DictionaryData) this = dict;

+ 2 - 2
std/cpp/objc/NSObject.hx

@@ -26,8 +26,8 @@ package cpp.objc;
 @:objc
 extern abstract NSObject( NSObjectData )
 {
-   @:native("_hx_value_to_objc") extern static function _hx_value_to_objc(obj:Dynamic) : NSObject return null;
-   @:native("_hx_objc_to_dynamic") extern static function _hx_objc_to_dynamic(d:NSObjectData) : Dynamic return null;
+   @:native("_hx_value_to_objc") extern static function _hx_value_to_objc(obj:Dynamic) : NSObject;
+   @:native("_hx_objc_to_dynamic") extern static function _hx_objc_to_dynamic(d:NSObjectData) : Dynamic;
 
 
    inline function new(d:NSObjectData) this = d;

+ 3 - 3
std/cpp/objc/NSString.hx

@@ -27,10 +27,10 @@ package cpp.objc;
 extern abstract NSString( NSStringData )
 {
    inline function new(s:NSStringData) this = s;
-   @:native("(id)") extern static function toObject(d:NSStringData) : NSObject return null;
+   @:native("(id)") extern static function toObject(d:NSStringData) : NSObject;
 
-   @:native("(NSString *)") extern static function castFromString(s:String) : NSString return null;
-   @:native("String") extern static function castToString(s:NSStringData) : String return null;
+   @:native("(NSString *)") extern static function castFromString(s:String) : NSString;
+   @:native("String") extern static function castToString(s:NSStringData) : String;
 
 
    @:from extern

+ 1 - 1
std/cpp/vm/Gc.hx

@@ -106,7 +106,7 @@ class Gc
 
    #if !cppia
    @:native("__hxcpp_set_finalizer") extern
-   static public function setFinalizer<T>(inObject:T, inFinalizer:cpp.Callable<T->Void> ) : Void { }
+   static public function setFinalizer<T>(inObject:T, inFinalizer:cpp.Callable<T->Void> ) : Void;
    #end
 }
 

+ 27 - 20
std/eval/_std/Sys.hx

@@ -23,19 +23,19 @@
 @:require(sys)
 @:coreApi
 class Sys {
-	extern static public function print(v:Dynamic):Void { }
-	extern static public function println(v:Dynamic):Void { }
-	extern static public function args():Array<String> { return []; }
-	extern static public function getEnv(s:String):String { return ""; }
-	extern static public function putEnv(s:String, v:String):Void { }
-	extern static public function environment():Map<String, String> { return null; }
-	extern static public function sleep(seconds:Float):Void { }
-	extern static public function setTimeLocale(loc:String):Bool { return false; }
-	extern static public function getCwd():String { return ""; }
-	extern static public function setCwd(s:String):Void { }
-	extern static public function systemName():String { return ""; }
+	extern static public function print(v:Dynamic):Void;
+	extern static public function println(v:Dynamic):Void;
+	extern static public function args():Array<String>;
+	extern static public function getEnv(s:String):String;
+	extern static public function putEnv(s:String, v:String):Void;
+	extern static public function environment():Map<String, String>;
+	extern static public function sleep(seconds:Float):Void;
+	extern static public function setTimeLocale(loc:String):Bool;
+	extern static public function getCwd():String;
+	extern static public function setCwd(s:String):Void;
+	extern static public function systemName():String;
 
-	extern static function _command(cmd:String):Int { return 0; }
+	extern static function _command(cmd:String):Int;
 
 	static public function command(cmd:String, ?args:Array<String>):Int {
 		if (args == null) {
@@ -57,12 +57,19 @@ class Sys {
 
 	static public function executablePath():String { return programPath(); }
 
-	extern static public function exit(code:Int):Void { }
-	extern static public function time():Float { return 0.; }
-	extern static public function cpuTime():Float { return 0.; }
-	extern static public function programPath():String { return ""; }
-	extern static public function getChar(echo:Bool):Int { return 0; }
-	extern static public function stdin():haxe.io.Input { return (null : sys.io.FileInput); }
-	extern static public function stdout():haxe.io.Output { return (null : sys.io.FileOutput); }
-	extern static public function stderr():haxe.io.Output { return (null : sys.io.FileOutput); }
+	extern static public function exit(code:Int):Void;
+	extern static public function time():Float;
+	extern static public function cpuTime():Float;
+	extern static public function programPath():String;
+	extern static public function getChar(echo:Bool):Int;
+	extern static public function stdin():haxe.io.Input;
+	extern static public function stdout():haxe.io.Output;
+	extern static public function stderr():haxe.io.Output;
+
+	static function __init__():Void {
+		// This nonsense causes the classes to be loaded. Otherwise they might not make
+		// it into the interpreter, and then stderr() et. al. don't work.
+		var _ = (null : sys.io.FileOutput);
+		var _ = (null : sys.io.FileInput);
+	}
 }

+ 8 - 8
std/eval/_std/sys/io/File.hx

@@ -23,14 +23,14 @@ package sys.io;
 
 @:coreApi
 class File {
-	extern static public function getContent(path:String):String { return ""; }
-	extern static public function saveContent(path:String, content:String):Void { }
-	extern static public function getBytes(path:String):haxe.io.Bytes { return haxe.io.Bytes.alloc(0); }
-	extern static public function saveBytes(path:String, bytes:haxe.io.Bytes):Void { }
-	extern static public function read(path:String, binary:Bool = true):FileInput { return null; }
-	extern static public function write(path:String, binary:Bool = true):FileOutput { return null; }
-	extern static public function append(path:String, binary:Bool = true):FileOutput { return null; }
-	extern static public function update(path:String, binary:Bool = true):FileOutput { return null; }
+	extern static public function getContent(path:String):String;
+	extern static public function saveContent(path:String, content:String):Void;
+	extern static public function getBytes(path:String):haxe.io.Bytes;
+	extern static public function saveBytes(path:String, bytes:haxe.io.Bytes):Void;
+	extern static public function read(path:String, binary:Bool = true):FileInput;
+	extern static public function write(path:String, binary:Bool = true):FileOutput;
+	extern static public function append(path:String, binary:Bool = true):FileOutput;
+	extern static public function update(path:String, binary:Bool = true):FileOutput;
 
 	static public function copy(srcPath:String, dstPath:String):Void {
 		var s = read(srcPath, true);

+ 6 - 6
std/eval/_std/sys/io/FileInput.hx

@@ -25,10 +25,10 @@ package sys.io;
 
 @:coreApi
 class FileInput extends haxe.io.Input {
-	extern public override function close():Void { }
-	extern public function eof():Bool { return false; }
-	extern public function seek(p:Int, pos:FileSeek):Void { }
-	extern public function tell():Int { return 0; }
-	extern public override function readByte():Int { return 0; }
-	extern public override function readBytes(bytes:haxe.io.Bytes, pos:Int, len:Int):Int { return 0; }
+	extern public override function close():Void;
+	extern public function eof():Bool;
+	extern public function seek(p:Int, pos:FileSeek):Void;
+	extern public function tell():Int;
+	extern public override function readByte():Int;
+	extern public override function readBytes(bytes:haxe.io.Bytes, pos:Int, len:Int):Int;
 }

+ 6 - 6
std/eval/_std/sys/io/FileOutput.hx

@@ -25,10 +25,10 @@ package sys.io;
 
 @:coreApi
 class FileOutput extends haxe.io.Output {
-	extern public override function close():Void { }
-	extern public override function flush():Void { }
-	extern public function seek(p:Int, pos:FileSeek):Void { }
-	extern public function tell():Int { return 0; }
-	extern public override function writeByte(c:Int):Void { }
-	extern public override function writeBytes(bytes:haxe.io.Bytes, pos:Int, len:Int):Int { return 0; }
+	extern public override function close():Void;
+	extern public override function flush():Void;
+	extern public function seek(p:Int, pos:FileSeek):Void;
+	extern public function tell():Int;
+	extern public override function writeByte(c:Int):Void;
+	extern public override function writeBytes(bytes:haxe.io.Bytes, pos:Int, len:Int):Int;
 }

+ 4 - 4
std/eval/_std/sys/net/Host.hx

@@ -42,8 +42,8 @@ class Host {
 		this.ip = ip;
 	}
 
-	extern static public function localhost() { return ""; }
-	extern static function hostReverse(ip:Int) { return ""; }
-	extern static function hostToString(ip:Int) { return ""; }
-	extern static function resolve(name:String) { return 0; }
+	extern static public function localhost();
+	extern static function hostReverse(ip:Int);
+	extern static function hostToString(ip:Int);
+	extern static function resolve(name:String);
 }

+ 5 - 7
std/haxe/EnumTools.hx

@@ -24,8 +24,8 @@ package haxe;
 
 /**
 	This class provides advanced methods on enums. It is ideally used with
-	`using EnumTools` and then acts as an 
-  [extension](https://haxe.org/manual/lf-static-extension.html) to the 
+	`using EnumTools` and then acts as an
+  [extension](https://haxe.org/manual/lf-static-extension.html) to the
   `enum` types.
 
 	If the first argument to any of the methods is null, the result is
@@ -112,8 +112,8 @@ extern class EnumTools {
 
 /**
 	This class provides advanced methods on enum values. It is ideally used with
-	`using EnumValueTools` and then acts as an 
-  [extension](https://haxe.org/manual/lf-static-extension.html) to the 
+	`using EnumValueTools` and then acts as an
+  [extension](https://haxe.org/manual/lf-static-extension.html) to the
   `EnumValue` types.
 
 	If the first argument to any of the methods is null, the result is
@@ -198,7 +198,5 @@ extern class EnumValueTools {
 		This method is implemented in the compiler. This definition exists only
 		for documentation.
 	**/
-	static public function match(e:EnumValue, pattern:Dynamic):Bool {
-		return false;
-	}
+	static public function match(e:EnumValue, pattern:Dynamic):Bool;
 }

+ 1 - 3
std/hl/_std/Std.hx

@@ -64,9 +64,7 @@ class Std {
 		return t.check(v);
 	}
 
-	extern public static function instance<T:{},S:T>( value : T, c : Class<S> ) : S {
-		return null;
-	}
+	extern public static function instance<T:{},S:T>( value : T, c : Class<S> ) : S;
 
 	extern public static inline function int( x : Float ) : Int {
 		return untyped $int(x);

+ 16 - 16
std/python/Syntax.hx

@@ -30,7 +30,7 @@ import haxe.macro.ExprTools;
 import haxe.extern.Rest;
 
 @:noPackageRestrict
-#if !macro extern #end class Syntax {
+extern class Syntax {
 
 	#if macro
 	static var self = macro python.Syntax;
@@ -58,19 +58,19 @@ import haxe.extern.Rest;
 		return macro $self._newInstance($c, $a{params});
 	}
 
-	static function _newInstance(c:Dynamic, args:Array<Dynamic>):Dynamic { return null; }
+	extern static function _newInstance(c:Dynamic, args:Array<Dynamic>):Dynamic;
 
 	@:noUsing
-	public static function isIn(a:Dynamic, b:Dynamic):Bool { return false; }
+	extern public static function isIn(a:Dynamic, b:Dynamic):Bool;
 
 	@:noUsing
-	public static function delete(a:Dynamic):Void { }
+	extern public static function delete(a:Dynamic):Void;
 
 	@:noUsing
-	public static function binop(a:Dynamic, op:String, b:Dynamic):Dynamic { return null; }
+	extern public static function binop(a:Dynamic, op:String, b:Dynamic):Dynamic;
 
 	@:noUsing
-	public static function assign(a:Dynamic, b:Dynamic):Void { }
+	extern public static function assign(a:Dynamic, b:Dynamic):Void;
 
 	#if !macro
 	public static function code(code:String, args:Rest<Dynamic>):Dynamic;
@@ -85,7 +85,7 @@ import haxe.extern.Rest;
 
 	#if !macro
 	@:noUsing
-	public static function _pythonCode<T>(b:String, args:Array<Dynamic>):T { return null; };
+	public static function _pythonCode<T>(b:String, args:Array<Dynamic>):T;
 	#end
 	@:noUsing
 	macro public static function arrayAccess(x:Expr, rest:Array<Expr>):ExprOf<Dynamic> {
@@ -97,13 +97,13 @@ import haxe.extern.Rest;
 		return macro $self._arrayAccess($x, $a{rest}, true);
 	}
 
-	static function _arrayAccess(a:Dynamic, args:Array<Dynamic>, ?trailingColon:Bool = false):Dynamic { return null; }
+	extern static function _arrayAccess(a:Dynamic, args:Array<Dynamic>, ?trailingColon:Bool = false):Dynamic;
 
 	@:noUsing
-	public static function arraySet(a:Dynamic, i:Dynamic, v:Dynamic):Dynamic { return null; }
+	extern public static function arraySet(a:Dynamic, i:Dynamic, v:Dynamic):Dynamic;
 
 
-	static function _foreach(id:Dynamic, it:Dynamic, block:Dynamic):Dynamic { return null; }
+	extern static function _foreach(id:Dynamic, it:Dynamic, block:Dynamic):Dynamic;
 
 
 	@:noUsing
@@ -141,10 +141,10 @@ import haxe.extern.Rest;
 		return macro @:pos(o.pos) $self.call($self.field($o, $field), $a{params});
 	}
 
-	static function call(e:Dynamic, args:Array<Dynamic>):Dynamic { return null; }
+	extern static function call(e:Dynamic, args:Array<Dynamic>):Dynamic;
 
 	@:noUsing
-	public static function field (o:Dynamic, field:String):Dynamic { return null; }
+	extern public static function field (o:Dynamic, field:String):Dynamic;
 
 	@:noUsing
 	macro public static function tuple(args:Array<Expr>):Dynamic {
@@ -152,16 +152,16 @@ import haxe.extern.Rest;
 		return macro $self._tuple($args);
 	}
 
-	static function _tuple(args:Array<Dynamic>):Dynamic { return null; }
+	extern static function _tuple(args:Array<Dynamic>):Dynamic;
 
 	@:noUsing
-	public static function varArgs(args:Array<Dynamic>):Dynamic { return null; }
+	extern public static function varArgs(args:Array<Dynamic>):Dynamic;
 
 	macro public static function callNamedUntyped (e:Expr, args:Expr):Expr {
 		return macro @:pos(e.pos) $self._callNamedUntyped($e, $args);
 	}
 
-	static function _callNamedUntyped(e:Dynamic, args:Dynamic):Dynamic { return null; }
+	extern static function _callNamedUntyped(e:Dynamic, args:Dynamic):Dynamic;
 
-	public static function opPow(a:Int, b:Int):Int { return 0; }
+	extern public static function opPow(a:Int, b:Int):Int;
 }

+ 5 - 15
std/python/_std/Math.hx

@@ -55,21 +55,11 @@ extern class Math
 		return if (v == POSITIVE_INFINITY || v == NEGATIVE_INFINITY) NaN else python.lib.Math.cos(v);
 	}
 
-	static function tan(v:Float):Float {
-		return if (v == POSITIVE_INFINITY || v == NEGATIVE_INFINITY) NaN else python.lib.Math.tan(v);
-	}
-	static function asin(v:Float):Float {
-		return if (v == POSITIVE_INFINITY || v == NEGATIVE_INFINITY) NaN else python.lib.Math.asin(v);
-	}
-	static function acos(v:Float):Float {
-		return if (v == POSITIVE_INFINITY || v == NEGATIVE_INFINITY) NaN else python.lib.Math.acos(v);
-	}
-	static function atan(v:Float):Float {
-		return if (v == POSITIVE_INFINITY || v == NEGATIVE_INFINITY) NaN else python.lib.Math.atan(v);
-	}
-	static function atan2(y:Float, x:Float):Float {
-		return if (v == POSITIVE_INFINITY || v == NEGATIVE_INFINITY) NaN else python.lib.Math.atan2(v);
-	}
+	static function tan(v:Float):Float;
+	static function asin(v:Float):Float;
+	static function acos(v:Float):Float;
+	static function atan(v:Float):Float;
+	static function atan2(y:Float, x:Float):Float;
 
 	public static inline function exp(v:Float):Float
 	{

+ 1 - 1
tests/unit/src/unit/issues/Issue2813.hx

@@ -4,7 +4,7 @@ import unit.Test;
 private extern class Ext {
 	static inline var v = "foo";
 
-	public function new() { }
+	public function new();
 
 	public inline function test():Void { }