Bläddra i källkod

fix reflection of core type fields paritally

frabbit 11 år sedan
förälder
incheckning
2c388bc4cf
3 ändrade filer med 23 tillägg och 0 borttagningar
  1. 15 0
      std/python/_std/Reflect.hx
  2. 1 0
      std/python/_std/Sys.hx
  3. 7 0
      std/python/internal/StringImpl.hx

+ 15 - 0
std/python/_std/Reflect.hx

@@ -66,6 +66,21 @@ class Reflect {
 	@:keep public static function field( o : Dynamic, field : String ) : Dynamic
 	{
 		if (field == null) return null;
+
+		if (Builtin.isinstance(o, String)) {
+			switch (field) {
+				case "length": return Builtin.len.bind(o);
+				case "toLowerCase": return python.internal.StringImpl.toLowerCase.bind(o);
+				case "toUpperCase": return python.internal.StringImpl.toUpperCase.bind(o);
+			}
+		} else if (Builtin.isinstance(o, Array)) {
+
+			switch (field) {
+				case "map": return python.internal.ArrayImpl.map.bind(o);
+				case "filter": return python.internal.ArrayImpl.filter.bind(o);
+				case "length": return python.internal.ArrayImpl.get_length(o);
+			}
+		}
 		var field = handleKeywords(field);
 		return if (Builtin.hasattr(o, field)) Builtin.getattr(o, field) else null;
 	}

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

@@ -93,6 +93,7 @@ class Sys {
 	static function __init__():Void {
 		environ = new haxe.ds.StringMap();
 		var env = python.lib.Os.environ;
+
 		for (key in env.keys()) {
 			environ.set(key, env.get(key, null));
 		}

+ 7 - 0
std/python/internal/StringImpl.hx

@@ -33,6 +33,13 @@ class StringImpl {
 		}
 	}
 
+	public static function toUpperCase (s:String) {
+		return s.toUpperCase();
+	}
+	public static function toLowerCase (s:String) {
+		return s.toLowerCase();
+	}
+
 	public static inline function fromCharCode( code : Int ) : String {
 		#if doc_gen
 		return "";