Browse Source

Nullsafe api (#12141)

* Null safe std apis

* update targets
RblSb 5 months ago
parent
commit
f593ca0f0b

+ 2 - 2
std/Std.hx

@@ -60,10 +60,10 @@ extern class Std {
 		If `value` is null, the result is null. If `c` is null, the result is
 		unspecified.
 	**/
-	static function downcast<T:{}, S:T>(value:T, c:Class<S>):S;
+	static function downcast<T:{}, S:T>(value:T, c:Class<S>):Null<S>;
 
 	@:deprecated('Std.instance() is deprecated. Use Std.downcast() instead.')
-	static function instance<T:{}, S:T>(value:T, c:Class<S>):S;
+	static function instance<T:{}, S:T>(value:T, c:Class<S>):Null<S>;
 
 	/**
 		Converts any value to a String.

+ 1 - 1
std/StringTools.hx

@@ -151,7 +151,7 @@ class StringTools {
 		- `"` becomes `&quot`;
 		- `'` becomes `&#039`;
 	**/
-	public static function htmlEscape(s:String, ?quotes:Bool):String {
+	public static function htmlEscape(s:String, quotes = false):String {
 		var buf = new StringBuf();
 		for (code in #if neko iterator(s) #else new haxe.iterators.StringIteratorUnicode(s) #end) {
 			switch (code) {

+ 1 - 1
std/Sys.hx

@@ -50,7 +50,7 @@ extern class Sys {
 		Returns the value of the given environment variable, or `null` if it
 		doesn't exist.
 	**/
-	static function getEnv(s:String):String;
+	static function getEnv(s:String):Null<String>;
 
 	/**
 		Sets the value of the given environment variable.

+ 4 - 4
std/Type.hx

@@ -49,7 +49,7 @@ extern class Type {
 
 		In general, type parameter information cannot be obtained at runtime.
 	**/
-	static function getEnum(o:EnumValue):Enum<Dynamic>;
+	static function getEnum(o:EnumValue):Null<Enum<Dynamic>>;
 
 	/**
 		Returns the super-class of class `c`.
@@ -60,7 +60,7 @@ extern class Type {
 
 		In general, type parameter information cannot be obtained at runtime.
 	**/
-	static function getSuperClass(c:Class<Dynamic>):Class<Dynamic>;
+	static function getSuperClass(c:Class<Dynamic>):Null<Class<Dynamic>>;
 
 	/**
 		Returns the name of class `c`, including its path.
@@ -108,7 +108,7 @@ extern class Type {
 
 		The class name must not include any type parameters.
 	**/
-	static function resolveClass(name:String):Class<Dynamic>;
+	static function resolveClass(name:String):Null<Class<Dynamic>>;
 
 	/**
 		Resolves an enum by name.
@@ -123,7 +123,7 @@ extern class Type {
 
 		The enum name must not include any type parameters.
 	**/
-	static function resolveEnum(name:String):Enum<Dynamic>;
+	static function resolveEnum(name:String):Null<Enum<Dynamic>>;
 
 	/**
 		Creates an instance of class `cl`, using `args` as arguments to the

+ 3 - 3
std/Xml.hx

@@ -143,7 +143,7 @@ class Xml {
 		Returns the parent object in the Xml hierarchy.
 		The parent can be `null`, an Element or a Document.
 	**/
-	public var parent(default, null):Xml;
+	public var parent(default, null):Null<Xml>;
 
 	var children:Array<Xml>;
 	var attributeMap:Map<String, String>;
@@ -241,7 +241,7 @@ class Xml {
 		Get the given attribute of an Element node. Returns `null` if not found.
 		Attributes are case-sensitive.
 	**/
-	public function get(att:String):String {
+	public function get(att:String):Null<String> {
 		if (nodeType != Element) {
 			throw 'Bad node type, expected Element but found $nodeType';
 		}
@@ -334,7 +334,7 @@ class Xml {
 	/**
 		Returns the first child node which is an Element.
 	**/
-	public function firstElement():Xml {
+	public function firstElement():Null<Xml> {
 		ensureElementType();
 		for (child in children) {
 			if (child.nodeType == Element) {

+ 2 - 2
std/cpp/_std/Std.hx

@@ -30,12 +30,12 @@
 		return untyped __global__.__instanceof(v, t);
 	}
 
-	@:keep public static function downcast<T:{}, S:T>(value:T, c:Class<S>):S {
+	@:keep public static function downcast<T:{}, S:T>(value:T, c:Class<S>):Null<S> {
 		return Std.isOfType(value, c) ? cast value : null;
 	}
 
 	@:deprecated('Std.instance() is deprecated. Use Std.downcast() instead.')
-	@:keep public static function instance<T:{}, S:T>(value:T, c:Class<S>):S {
+	@:keep public static function instance<T:{}, S:T>(value:T, c:Class<S>):Null<S> {
 		return inline downcast(value, c);
 	}
 

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

@@ -56,7 +56,7 @@ import haxe.SysTools;
 			return __global__.__get_args();
 		}
 
-	public static function getEnv(s:String):String {
+	public static function getEnv(s:String):Null<String> {
 		var v = NativeSys.get_env(s);
 		if (v == null)
 			return null;

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

@@ -46,14 +46,14 @@ enum ValueType {
 			return c;
 		}
 
-	public static function getEnum(o:EnumValue):Enum<Dynamic>
+	public static function getEnum(o:EnumValue):Null<Enum<Dynamic>>
 		untyped {
 			if (o == null)
 				return null;
 			return untyped o.__GetClass();
 		}
 
-	public static function getSuperClass(c:Class<Dynamic>):Class<Dynamic>
+	public static function getSuperClass(c:Class<Dynamic>):Null<Class<Dynamic>>
 		untyped {
 			return c.GetSuper();
 		}
@@ -68,7 +68,7 @@ enum ValueType {
 		return untyped e.__ToString();
 	}
 
-	public static function resolveClass(name:String):Class<Dynamic>
+	public static function resolveClass(name:String):Null<Class<Dynamic>>
 		untyped {
 			var result:Class<Dynamic> = Class.Resolve(name);
 			if (result != null && result.__IsEnum())
@@ -76,7 +76,7 @@ enum ValueType {
 			return result;
 		}
 
-	public static function resolveEnum(name:String):Enum<Dynamic>
+	public static function resolveEnum(name:String):Null<Enum<Dynamic>>
 		untyped {
 			var result:Class<Dynamic> = Class.Resolve(name);
 			if (result != null && !result.__IsEnum())

+ 1 - 1
std/eval/_std/Sys.hx

@@ -31,7 +31,7 @@ class Sys {
 
 	extern static public function args():Array<String>;
 
-	extern static public function getEnv(s:String):String;
+	extern static public function getEnv(s:String):Null<String>;
 
 	extern static public function putEnv(s:String, v:Null<String>):Void;
 

+ 2 - 2
std/flash/_std/Std.hx

@@ -32,12 +32,12 @@ import flash.Boot;
 		return flash.Boot.__instanceof(v, t);
 	}
 
-	public static inline function downcast<T:{}, S:T>(value:T, c:Class<S>):S {
+	public static inline function downcast<T:{}, S:T>(value:T, c:Class<S>):Null<S> {
 		return flash.Lib.as(value, c);
 	}
 
 	@:deprecated('Std.instance() is deprecated. Use Std.downcast() instead.')
-	public static inline function instance<T:{}, S:T>(value:T, c:Class<S>):S {
+	public static inline function instance<T:{}, S:T>(value:T, c:Class<S>):Null<S> {
 		return downcast(value, c);
 	}
 

+ 4 - 4
std/flash/_std/Type.hx

@@ -45,7 +45,7 @@ enum ValueType {
 			return c;
 		}
 
-	public static function getEnum(o:EnumValue):Enum<Dynamic>
+	public static function getEnum(o:EnumValue):Null<Enum<Dynamic>>
 		untyped {
 			var cname = __global__["flash.utils.getQualifiedClassName"](o);
 			if (cname == "null" || cname.substr(0, 8) == "builtin.")
@@ -59,7 +59,7 @@ enum ValueType {
 			return c;
 		}
 
-	public static function getSuperClass(c:Class<Dynamic>):Class<Dynamic>
+	public static function getSuperClass(c:Class<Dynamic>):Null<Class<Dynamic>>
 		untyped {
 			var cname = __global__["flash.utils.getQualifiedSuperclassName"](c);
 			if (cname == null || cname == "Object")
@@ -92,7 +92,7 @@ enum ValueType {
 		return getClassName(cast e);
 	}
 
-	public static function resolveClass(name:String):Class<Dynamic>
+	public static function resolveClass(name:String):Null<Class<Dynamic>>
 		untyped {
 			var cl:Class<Dynamic>;
 			try {
@@ -115,7 +115,7 @@ enum ValueType {
 			return cl;
 		}
 
-	public static function resolveEnum(name:String):Enum<Dynamic>
+	public static function resolveEnum(name:String):Null<Enum<Dynamic>>
 		untyped {
 			var e:Dynamic;
 			try {

+ 1 - 1
std/flash/_std/haxe/Http.hx

@@ -40,7 +40,7 @@ class HttpFlash extends haxe.http.HttpBase {
 		req = null;
 	}
 
-	public override function request(?post:Bool) {
+	public override function request(post = false) {
 		responseAsString = null;
 		responseBytes = null;
 		var loader = req = new flash.net.URLLoader();

+ 2 - 2
std/haxe/Resource.hx

@@ -47,7 +47,7 @@ class Resource {
 
 		If `name` does not match any resource name, `null` is returned.
 	**/
-	public static function getString(name:String):String {
+	public static function getString(name:String):Null<String> {
 		for (x in content)
 			if (x.name == name) {
 				if (x.str != null)
@@ -64,7 +64,7 @@ class Resource {
 
 		If `name` does not match any resource name, `null` is returned.
 	**/
-	public static function getBytes(name:String):haxe.io.Bytes {
+	public static function getBytes(name:String):Null<haxe.io.Bytes> {
 		for (x in content)
 			if (x.name == name) {
 				if (x.str != null)

+ 1 - 1
std/haxe/Template.hx

@@ -29,7 +29,7 @@ using StringTools;
 private enum TemplateExpr {
 	OpVar(v:String);
 	OpExpr(expr:Void->Dynamic);
-	OpIf(expr:Void->Dynamic, eif:TemplateExpr, eelse:TemplateExpr);
+	OpIf(expr:Void->Dynamic, eif:TemplateExpr, ?eelse:TemplateExpr);
 	OpStr(str:String);
 	OpBlock(l:List<TemplateExpr>);
 	OpForeach(expr:Void->Dynamic, loop:TemplateExpr);

+ 8 - 8
std/haxe/Unserializer.hx

@@ -28,8 +28,8 @@ import haxe.ds.List;
 
 @:noDoc
 typedef TypeResolver = {
-	function resolveClass(name:String):Class<Dynamic>;
-	function resolveEnum(name:String):Enum<Dynamic>;
+	function resolveClass(name:String):Null<Class<Dynamic>>;
+	function resolveEnum(name:String):Null<Enum<Dynamic>>;
 }
 
 /**
@@ -56,9 +56,9 @@ class Unserializer {
 
 		A type resolver must provide two methods:
 
-		1. `resolveClass(name:String):Class<Dynamic>` is called to determine a
+		1. `resolveClass(name:String):Null<Class<Dynamic>>` is called to determine a
 				`Class` from a class name
-		2. `resolveEnum(name:String):Enum<Dynamic>` is called to determine an
+		2. `resolveEnum(name:String):Null<Enum<Dynamic>>` is called to determine an
 				`Enum` from an enum name
 
 		This value is applied when a new `Unserializer` instance is created.
@@ -511,20 +511,20 @@ class Unserializer {
 private class DefaultResolver {
 	public function new() {}
 
-	public inline function resolveClass(name:String):Class<Dynamic>
+	public inline function resolveClass(name:String):Null<Class<Dynamic>>
 		return Type.resolveClass(name);
 
-	public inline function resolveEnum(name:String):Enum<Dynamic>
+	public inline function resolveEnum(name:String):Null<Enum<Dynamic>>
 		return Type.resolveEnum(name);
 }
 
 private class NullResolver {
 	function new() {}
 
-	public inline function resolveClass(name:String):Class<Dynamic>
+	public inline function resolveClass(name:String):Null<Class<Dynamic>>
 		return null;
 
-	public inline function resolveEnum(name:String):Enum<Dynamic>
+	public inline function resolveEnum(name:String):Null<Enum<Dynamic>>
 		return null;
 
 	public static var instance(get, null):NullResolver;

+ 1 - 1
std/haxe/format/JsonPrinter.hx

@@ -53,7 +53,7 @@ class JsonPrinter {
 	var pretty:Bool;
 	var nind:Int;
 
-	function new(replacer:(key:Dynamic, value:Dynamic) -> Dynamic, space:String) {
+	function new(replacer:Null<(key:Dynamic, value:Dynamic) -> Dynamic>, space:Null<String>) {
 		this.replacer = replacer;
 		this.indent = space;
 		this.pretty = space != null;

+ 1 - 1
std/haxe/http/HttpBase.hx

@@ -182,7 +182,7 @@ class HttpBase {
 		[js] If `this.async` is false, the callback functions are called before
 		this method returns.
 	**/
-	public function request(?post:Bool):Void {
+	public function request(post = false):Void {
 		throw new haxe.exceptions.NotImplementedException();
 	}
 

+ 1 - 1
std/haxe/http/HttpJs.hx

@@ -51,7 +51,7 @@ class HttpJs extends haxe.http.HttpBase {
 		req = null;
 	}
 
-	public override function request(?post:Bool) {
+	public override function request(post = false) {
 		this.responseAsString = null;
 		this.responseBytes = null;
 		this.responseHeaders = null;

+ 1 - 1
std/haxe/http/HttpNodeJs.hx

@@ -46,7 +46,7 @@ class HttpNodeJs extends haxe.http.HttpBase {
 		req = null;
 	}
 
-	public override function request(?post:Bool) {
+	public override function request(post = false) {
 		responseAsString = null;
 		responseBytes = null;
 		responseHeaders = null;

+ 1 - 1
std/haxe/io/BufferInput.hx

@@ -28,7 +28,7 @@ class BufferInput extends haxe.io.Input {
 	public var available:Int;
 	public var pos:Int;
 
-	public function new(i, buf, ?pos = 0, ?available = 0) {
+	public function new(i, buf, pos = 0, available = 0) {
 		this.i = i;
 		this.buf = buf;
 		this.pos = pos;

+ 1 - 1
std/haxe/macro/Printer.hx

@@ -38,7 +38,7 @@ class Printer {
 	var tabs:String;
 	var tabString:String;
 
-	public function new(?tabString = "\t") {
+	public function new(tabString = "\t") {
 		tabs = "";
 		this.tabString = tabString;
 	}

+ 1 - 1
std/haxe/xml/Printer.hx

@@ -32,7 +32,7 @@ class Printer {
 
 		Set `pretty` to `true` to prettify the result.
 	**/
-	static public function print(xml:Xml, ?pretty = false) {
+	static public function print(xml:Xml, pretty = false) {
 		var printer = new Printer(pretty);
 		printer.writeNode(xml, "");
 		return printer.output.toString();

+ 2 - 2
std/haxe/zip/InflateImpl.hx

@@ -126,7 +126,7 @@ class InflateImpl {
 
 	static var FIXED_HUFFMAN = null;
 
-	public function new(i, ?header = true, ?crc = true) {
+	public function new(i, header = true, crc = true) {
 		isFinal = false;
 		htools = new HuffTools();
 		huffman = buildFixedHuffman();
@@ -385,7 +385,7 @@ class InflateImpl {
 		}
 	}
 
-	public static function run(i:haxe.io.Input, ?bufsize = 65536) {
+	public static function run(i:haxe.io.Input, bufsize = 65536) {
 		var buf = haxe.io.Bytes.alloc(bufsize);
 		var output = new haxe.io.BytesBuffer();
 		var inflate = new InflateImpl(i);

+ 1 - 1
std/haxe/zip/Reader.hx

@@ -75,7 +75,7 @@ class Reader {
 		return fields;
 	}
 
-	public function readEntryHeader():Entry {
+	public function readEntryHeader():Null<Entry> {
 		var i = this.i;
 		var h = i.readInt32();
 		if (h == 0x02014B50 || h == 0x06054B50)

+ 2 - 2
std/hl/_std/Std.hx

@@ -79,10 +79,10 @@ class Std {
 		return t.check(v);
 	}
 
-	extern public static function downcast<T:{}, S:T>(value:T, c:Class<S>):S;
+	extern public static function downcast<T:{}, S:T>(value:T, c:Class<S>):Null<S>;
 
 	@:deprecated('Std.instance() is deprecated. Use Std.downcast() instead.')
-	public static inline function instance<T:{}, S:T>(value:T, c:Class<S>):S {
+	public static inline function instance<T:{}, S:T>(value:T, c:Class<S>):Null<S> {
 		return downcast(value, c);
 	}
 

+ 1 - 1
std/hl/_std/Sys.hx

@@ -79,7 +79,7 @@ class Sys {
 		return @:privateAccess new sys.io.FileOutput(file_stderr());
 	}
 
-	public static function getEnv(s:String):String {
+	public static function getEnv(s:String):Null<String> {
 		var v = get_env(getPath(s));
 		if (v == null)
 			return null;

+ 4 - 4
std/hl/_std/Type.hx

@@ -93,14 +93,14 @@ class Type {
 		return null;
 	}
 
-	public static function getEnum(o:EnumValue):Enum<Dynamic> {
+	public static function getEnum(o:EnumValue):Null<Enum<Dynamic>> {
 		var t = hl.Type.getDynamic(o);
 		if (t.kind == HEnum)
 			return t.getGlobal();
 		return null;
 	}
 
-	public static function getSuperClass(c:Class<Dynamic>):Class<Dynamic>@:privateAccess {
+	public static function getSuperClass(c:Class<Dynamic>):Null<Class<Dynamic>>@:privateAccess {
 		var c:hl.BaseType.Class = cast c;
 		var t = c.__type__.getSuper();
 		return t == hl.Type.void() ? null : t.getGlobal();
@@ -116,14 +116,14 @@ class Type {
 		return e.__ename__;
 	}
 
-	public static function resolveClass(name:String):Class<Dynamic> {
+	public static function resolveClass(name:String):Null<Class<Dynamic>> {
 		var t:hl.BaseType = allTypes.get(@:privateAccess name.bytes);
 		if (t == null || !Std.isOfType(t, hl.BaseType.Class))
 			return null;
 		return cast t;
 	}
 
-	public static function resolveEnum(name:String):Enum<Dynamic> {
+	public static function resolveEnum(name:String):Null<Enum<Dynamic>> {
 		var t:hl.BaseType = allTypes.get(@:privateAccess name.bytes);
 		if (t == null || !Std.isOfType(t, hl.BaseType.Enum))
 			return null;

+ 2 - 2
std/js/_std/Std.hx

@@ -34,12 +34,12 @@ import js.Syntax;
 		return @:privateAccess js.Boot.__instanceof(v, t);
 	}
 
-	public static inline function downcast<T:{}, S:T>(value:T, c:Class<S>):S @:privateAccess {
+	public static inline function downcast<T:{}, S:T>(value:T, c:Class<S>):Null<S> @:privateAccess {
 		return if (js.Boot.__downcastCheck(value, c)) cast value else null;
 	}
 
 	@:deprecated('Std.instance() is deprecated. Use Std.downcast() instead.')
-	public static inline function instance<T:{}, S:T>(value:T, c:Class<S>):S {
+	public static inline function instance<T:{}, S:T>(value:T, c:Class<S>):Null<S> {
 		return downcast(value, c);
 	}
 

+ 6 - 6
std/js/_std/Type.hx

@@ -36,7 +36,7 @@ enum ValueType {
 		return @:privateAccess js.Boot.getClass(o);
 	}
 
-	public static function getEnum(o:EnumValue):Enum<Dynamic>
+	public static function getEnum(o:EnumValue):Null<Enum<Dynamic>>
 		untyped {
 			if (o == null)
 				return null;
@@ -47,7 +47,7 @@ enum ValueType {
 			#end
 		}
 
-	public static inline function getSuperClass(c:Class<Dynamic>):Class<Dynamic> {
+	public static inline function getSuperClass(c:Class<Dynamic>):Null<Class<Dynamic>> {
 		return untyped __define_feature__("Type.getSuperClass", c.__super__);
 	}
 
@@ -60,7 +60,7 @@ enum ValueType {
 	}
 
 	#if js_enums_as_arrays
-	public static function resolveClass(name:String):Class<Dynamic>
+	public static function resolveClass(name:String):Null<Class<Dynamic>>
 		untyped {
 			var cl:Class<Dynamic> = $hxClasses[name];
 			// ensure that this is a class
@@ -69,7 +69,7 @@ enum ValueType {
 			return cl;
 		}
 
-	public static function resolveEnum(name:String):Enum<Dynamic>
+	public static function resolveEnum(name:String):Null<Enum<Dynamic>>
 		untyped {
 			var e:Dynamic = $hxClasses[name];
 			// ensure that this is an enum
@@ -78,11 +78,11 @@ enum ValueType {
 			return e;
 		}
 	#else
-	public static inline function resolveClass(name:String):Class<Dynamic> {
+	public static inline function resolveClass(name:String):Null<Class<Dynamic>> {
 		return untyped __define_feature__("Type.resolveClass", $hxClasses[name]);
 	}
 
-	public static inline function resolveEnum(name:String):Enum<Dynamic> {
+	public static inline function resolveEnum(name:String):Null<Enum<Dynamic>> {
 		return untyped __define_feature__("Type.resolveEnum", $hxEnums[name]);
 	}
 	#end

+ 2 - 2
std/jvm/_std/Std.hx

@@ -182,12 +182,12 @@ class Std {
 		return try java.lang.Double.DoubleClass.parseDouble(x) catch (e:Dynamic) Math.NaN;
 	}
 
-	inline public static function downcast<T:{}, S:T>(value:T, c:Class<S>):S {
+	inline public static function downcast<T:{}, S:T>(value:T, c:Class<S>):Null<S> {
 		return Std.isOfType(value, c) ? cast value : null;
 	}
 
 	@:deprecated('Std.instance() is deprecated. Use Std.downcast() instead.')
-	inline public static function instance<T:{}, S:T>(value:T, c:Class<S>):S {
+	inline public static function instance<T:{}, S:T>(value:T, c:Class<S>):Null<S> {
 		return downcast(value, c);
 	}
 

+ 1 - 1
std/jvm/_std/Sys.hx

@@ -47,7 +47,7 @@ using jvm.NativeTools;
 		return @:privateAccess Array.ofNative(_args);
 	}
 
-	public static function getEnv(s:String):String {
+	public static function getEnv(s:String):Null<String> {
 		return java.lang.System.getenv(s);
 	}
 

+ 4 - 4
std/jvm/_std/Type.hx

@@ -49,7 +49,7 @@ class Type {
 		return c.haxe();
 	}
 
-	public static function getEnum(o:EnumValue):Enum<Dynamic> {
+	public static function getEnum(o:EnumValue):Null<Enum<Dynamic>> {
 		if (o == null) {
 			return null;
 		}
@@ -60,7 +60,7 @@ class Type {
 		return c.haxeEnum();
 	}
 
-	public static function getSuperClass(c:Class<Dynamic>):Class<Dynamic> {
+	public static function getSuperClass(c:Class<Dynamic>):Null<Class<Dynamic>> {
 		if (c == String) {
 			return null;
 		}
@@ -92,7 +92,7 @@ class Type {
 		}
 	}
 
-	public static function resolveClass(name:String):Class<Dynamic> {
+	public static function resolveClass(name:String):Null<Class<Dynamic>> {
 		if (name.indexOf(".") == -1) {
 			name = "haxe.root." + name;
 		}
@@ -107,7 +107,7 @@ class Type {
 		}
 	}
 
-	public static function resolveEnum(name:String):Enum<Dynamic> {
+	public static function resolveEnum(name:String):Null<Enum<Dynamic>> {
 		if (name.indexOf(".") == -1) {
 			name = "haxe.root." + name;
 		}

+ 2 - 2
std/lua/_std/Std.hx

@@ -34,12 +34,12 @@ import lua.NativeStringTools;
 		return untyped lua.Boot.__instanceof(v, t);
 	}
 
-	public static inline function downcast<T:{}, S:T>(value:T, c:Class<S>):S {
+	public static inline function downcast<T:{}, S:T>(value:T, c:Class<S>):Null<S> {
 		return untyped lua.Boot.__instanceof(value, c) ? cast value : null;
 	}
 
 	@:deprecated('Std.instance() is deprecated. Use Std.downcast() instead.')
-	public static inline function instance<T:{}, S:T>(value:T, c:Class<S>):S {
+	public static inline function instance<T:{}, S:T>(value:T, c:Class<S>):Null<S> {
 		return downcast(value, c);
 	}
 

+ 1 - 1
std/lua/_std/Sys.hx

@@ -94,7 +94,7 @@ class Sys {
 	public inline static function setCwd(s:String):Void
 		Misc.chdir(s);
 
-	public inline static function getEnv(s:String):String {
+	public inline static function getEnv(s:String):Null<String> {
 		return Os.getenv(s);
 	}
 

+ 4 - 4
std/lua/_std/Type.hx

@@ -43,14 +43,14 @@ enum ValueType {
 			return lua.Boot.getClass(o);
 		}
 
-	public static function getEnum(o:EnumValue):Enum<Dynamic>
+	public static function getEnum(o:EnumValue):Null<Enum<Dynamic>>
 		untyped {
 			if (o == null)
 				return null;
 			return o.__enum__;
 		}
 
-	public static function getSuperClass(c:Class<Dynamic>):Class<Dynamic>
+	public static function getSuperClass(c:Class<Dynamic>):Null<Class<Dynamic>>
 		untyped {
 			return c.__super__;
 		}
@@ -65,7 +65,7 @@ enum ValueType {
 		return untyped e.__ename__;
 	}
 
-	public static function resolveClass(name:String):Class<Dynamic>
+	public static function resolveClass(name:String):Null<Class<Dynamic>>
 		untyped {
 			// TODO: better tmp name for _hxClasses
 			var cl:Class<Dynamic> = _hxClasses[name];
@@ -75,7 +75,7 @@ enum ValueType {
 			return cl;
 		}
 
-	public static function resolveEnum(name:String):Enum<Dynamic>
+	public static function resolveEnum(name:String):Null<Enum<Dynamic>>
 		untyped {
 			// TODO: better tmp name for _hxClasses
 			var e:Dynamic = _hxClasses[name];

+ 2 - 2
std/neko/_std/Std.hx

@@ -30,12 +30,12 @@
 		return untyped neko.Boot.__instanceof(v, t);
 	}
 
-	public static function downcast<T:{}, S:T>(value:T, c:Class<S>):S {
+	public static function downcast<T:{}, S:T>(value:T, c:Class<S>):Null<S> {
 		return Std.isOfType(value, c) ? cast value : null;
 	}
 
 	@:deprecated('Std.instance() is deprecated. Use Std.downcast() instead.')
-	public static function instance<T:{}, S:T>(value:T, c:Class<S>):S {
+	public static function instance<T:{}, S:T>(value:T, c:Class<S>):Null<S> {
 		return inline downcast(value, c);
 	}
 

+ 1 - 1
std/neko/_std/Sys.hx

@@ -62,7 +62,7 @@ import haxe.SysTools;
 		return r;
 	}
 
-	public static function getEnv( s : String ) : String {
+	public static function getEnv( s : String ) : Null<String> {
 		var v = get_env(untyped s.__s);
 		if( v == null )
 			return null;

+ 4 - 4
std/neko/_std/Type.hx

@@ -43,14 +43,14 @@ enum ValueType {
 		return p.__class__;
 	}
 
-	public static function getEnum( o : EnumValue ) : Enum<Dynamic> untyped {
+	public static function getEnum( o : EnumValue ) : Null<Enum<Dynamic>> untyped {
 		if( __dollar__typeof(o) != __dollar__tobject )
 			return null;
 		return o.__enum__;
 	}
 
 
-	public static function getSuperClass( c : Class<Dynamic> ) : Class<Dynamic> untyped {
+	public static function getSuperClass( c : Class<Dynamic> ) : Null<Class<Dynamic>> untyped {
 		return c.__super__;
 	}
 
@@ -67,7 +67,7 @@ enum ValueType {
 		return a.join(".");
 	}
 
-	public static function resolveClass( name : String ) : Class<Dynamic> untyped {
+	public static function resolveClass( name : String ) : Null<Class<Dynamic>> untyped {
 		var path = name.split(".");
 		var cl = Reflect.field(untyped neko.Boot.__classes,path[0]);
 		var i = 1;
@@ -82,7 +82,7 @@ enum ValueType {
 	}
 
 
-	public static function resolveEnum( name : String ) : Enum<Dynamic> untyped {
+	public static function resolveEnum( name : String ) : Null<Enum<Dynamic>> untyped {
 		var path = name.split(".");
 		var e = Reflect.field(neko.Boot.__classes,path[0]);
 		var i = 1;

+ 2 - 2
std/php/_std/Std.hx

@@ -34,12 +34,12 @@ import php.Syntax;
 		return Boot.isOfType(v, t);
 	}
 
-	public static inline function downcast<T:{}, S:T>(value:T, c:Class<S>):S {
+	public static inline function downcast<T:{}, S:T>(value:T, c:Class<S>):Null<S> {
 		return Boot.isOfType(value, cast c) ? cast value : null;
 	}
 
 	@:deprecated('Std.instance() is deprecated. Use Std.downcast() instead.')
-	public static inline function instance<T:{}, S:T>(value:T, c:Class<S>):S {
+	public static inline function instance<T:{}, S:T>(value:T, c:Class<S>):Null<S> {
 		return Boot.isOfType(value, cast c) ? cast value : null;
 	}
 

+ 1 - 1
std/php/_std/StringTools.hx

@@ -33,7 +33,7 @@ import haxe.iterators.StringKeyValueIterator;
 		return Global.urldecode(s);
 	}
 
-	public inline static function htmlEscape(s:String, ?quotes:Bool):String {
+	public inline static function htmlEscape(s:String, quotes:Bool = false):String {
 		return Global.htmlspecialchars(s, (quotes ? Const.ENT_QUOTES | Const.ENT_HTML401 : Const.ENT_NOQUOTES));
 	}
 

+ 1 - 1
std/php/_std/Sys.hx

@@ -82,7 +82,7 @@ import haxe.SysTools;
 		}
 	}
 
-	public static function getEnv(s:String):String {
+	public static function getEnv(s:String):Null<String> {
 		var value = Global.getenv(s);
 		return value == false ? null : value;
 	}

+ 4 - 4
std/php/_std/Type.hx

@@ -50,13 +50,13 @@ enum ValueType {
 		}
 	}
 
-	public static function getEnum(o:EnumValue):Enum<Dynamic> {
+	public static function getEnum(o:EnumValue):Null<Enum<Dynamic>> {
 		if (o == null)
 			return null;
 		return cast Boot.getClass(Global.get_class(cast o));
 	}
 
-	public static function getSuperClass(c:Class<Dynamic>):Class<Dynamic> {
+	public static function getSuperClass(c:Class<Dynamic>):Null<Class<Dynamic>> {
 		if (c == null)
 			return null;
 		var parentClass = try {
@@ -79,7 +79,7 @@ enum ValueType {
 		return getClassName(cast e);
 	}
 
-	public static function resolveClass(name:String):Class<Dynamic> {
+	public static function resolveClass(name:String):Null<Class<Dynamic>> {
 		if (name == null)
 			return null;
 		switch (name) {
@@ -108,7 +108,7 @@ enum ValueType {
 		return cast hxClass;
 	}
 
-	public static function resolveEnum(name:String):Enum<Dynamic> {
+	public static function resolveEnum(name:String):Null<Enum<Dynamic>> {
 		if (name == null)
 			return null;
 		if (name == 'Bool')

+ 1 - 1
std/python/Boot.hx

@@ -395,7 +395,7 @@ class Boot {
 		}
 	}
 
-	static function getSuperClass(c:Class<Dynamic>):Class<Dynamic> {
+	static function getSuperClass(c:Class<Dynamic>):Null<Class<Dynamic>> {
 		if (c == null)
 			return null;
 

+ 2 - 2
std/python/_std/Std.hx

@@ -31,7 +31,7 @@ import python.Syntax;
 @:keepInit
 @:coreApi class Std {
 	@:access(python.Boot)
-	public static function downcast<T:{}, S:T>(value:T, c:Class<S>):S {
+	public static function downcast<T:{}, S:T>(value:T, c:Class<S>):Null<S> {
 		try {
 			return UBuiltins.isinstance(value, c) || (Inspect.isInterface(c) && Boot.implementsInterface(value, c)) ? cast value : null;
 		} catch (e:Dynamic) {
@@ -40,7 +40,7 @@ import python.Syntax;
 	}
 
 	@:deprecated('Std.instance() is deprecated. Use Std.downcast() instead.')
-	public static inline function instance<T:{}, S:T>(value:T, c:Class<S>):S {
+	public static inline function instance<T:{}, S:T>(value:T, c:Class<S>):Null<S> {
 		return downcast(value, c);
 	}
 

+ 1 - 1
std/python/_std/Sys.hx

@@ -49,7 +49,7 @@ class Sys {
 		return argv.slice(1);
 	}
 
-	public static function getEnv(s:String):String {
+	public static function getEnv(s:String):Null<String> {
 		return Os.environ.get(s, null);
 	}
 

+ 4 - 4
std/python/_std/Type.hx

@@ -60,13 +60,13 @@ enum ValueType {
 		}
 	}
 
-	public static function getEnum(o:EnumValue):Enum<Dynamic> {
+	public static function getEnum(o:EnumValue):Null<Enum<Dynamic>> {
 		if (o == null)
 			return null;
 		return Syntax.field(o, "__class__");
 	}
 
-	public static function getSuperClass(c:Class<Dynamic>):Class<Dynamic> {
+	public static function getSuperClass(c:Class<Dynamic>):Null<Class<Dynamic>> {
 		return python.Boot.getSuperClass(c);
 	}
 
@@ -94,7 +94,7 @@ enum ValueType {
 		return Internal.fieldClassName(e);
 	}
 
-	public static function resolveClass(name:String):Class<Dynamic> {
+	public static function resolveClass(name:String):Null<Class<Dynamic>> {
 		if (name == "Array")
 			return Array;
 		if (name == "Math")
@@ -109,7 +109,7 @@ enum ValueType {
 		return cl;
 	}
 
-	public static function resolveEnum(name:String):Enum<Dynamic> {
+	public static function resolveEnum(name:String):Null<Enum<Dynamic>> {
 		if (name == "Bool")
 			return cast Bool;
 		var o = resolveClass(name);

+ 1 - 1
std/sys/Http.hx

@@ -55,7 +55,7 @@ class Http extends haxe.http.HttpBase {
 		super(url);
 	}
 
-	public override function request(?post:Bool) {
+	public override function request(post = false) {
 		var output = new haxe.io.BytesOutput();
 		var old = onError;
 		var err = false;