94 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
package jvm;
 | 
						|
 | 
						|
import haxe.ds.StringMap;
 | 
						|
 | 
						|
@:keep
 | 
						|
@:native('haxe.jvm.DynamicObject')
 | 
						|
@:nativeGen
 | 
						|
class DynamicObject implements java.lang.Cloneable extends Object {
 | 
						|
	@:private static var __hx_toString_depth = 0;
 | 
						|
 | 
						|
	@:private var _hx_fields:Null<StringMap<Dynamic>>;
 | 
						|
 | 
						|
	@:jvm.synthetic public var _hx_deletedAField:Null<Bool>;
 | 
						|
 | 
						|
	public function toString() {
 | 
						|
		if (__hx_toString_depth >= 5) {
 | 
						|
			return "...";
 | 
						|
		}
 | 
						|
		++__hx_toString_depth;
 | 
						|
		_hx_initReflection();
 | 
						|
		if (_hx_hasField("toString")) {
 | 
						|
			--__hx_toString_depth;
 | 
						|
			return _hx_getField("toString")();
 | 
						|
		}
 | 
						|
		var buf = new StringBuf();
 | 
						|
		buf.addChar("{".code);
 | 
						|
		var first = true;
 | 
						|
		try {
 | 
						|
			for (key in _hx_fields.keys()) {
 | 
						|
				if (first)
 | 
						|
					first = false
 | 
						|
				else
 | 
						|
					buf.add(", ");
 | 
						|
				buf.add(key);
 | 
						|
				buf.add(": ");
 | 
						|
				buf.add(_hx_fields.get(key));
 | 
						|
			}
 | 
						|
		} catch (e:Dynamic) {
 | 
						|
			--__hx_toString_depth;
 | 
						|
			throw(e);
 | 
						|
		}
 | 
						|
		--__hx_toString_depth;
 | 
						|
		buf.addChar("}".code);
 | 
						|
		return buf.toString();
 | 
						|
	}
 | 
						|
 | 
						|
	@:jvm.synthetic final public function _hx_deleteField(name:String) {
 | 
						|
		_hx_initReflection();
 | 
						|
		_hx_deletedAField = true;
 | 
						|
		try {
 | 
						|
			Jvm.writeFieldNoObject(this, name, null);
 | 
						|
		} catch (_:Dynamic) {}
 | 
						|
		return _hx_fields.remove(name);
 | 
						|
	}
 | 
						|
 | 
						|
	@:jvm.synthetic final public function _hx_getFields() {
 | 
						|
		_hx_initReflection();
 | 
						|
		return [for (key in _hx_fields.keys()) key];
 | 
						|
	}
 | 
						|
 | 
						|
	@:jvm.synthetic override public function _hx_getField<T>(name:String) {
 | 
						|
		_hx_initReflection();
 | 
						|
		return _hx_fields.get(name);
 | 
						|
	}
 | 
						|
 | 
						|
	@:jvm.synthetic final public function _hx_hasField(name:String) {
 | 
						|
		_hx_initReflection();
 | 
						|
		return _hx_fields.exists(name);
 | 
						|
	}
 | 
						|
 | 
						|
	@:jvm.synthetic override public function _hx_setField(name:String, value:Dynamic) {
 | 
						|
		_hx_initReflection();
 | 
						|
		_hx_fields.set(name, value);
 | 
						|
	}
 | 
						|
 | 
						|
	@:jvm.synthetic final public function _hx_clone() {
 | 
						|
		var clone:DynamicObject = (cast this : java.lang.Object).clone();
 | 
						|
		if (_hx_fields != null) {
 | 
						|
			clone._hx_fields = this._hx_fields.copy();
 | 
						|
		}
 | 
						|
		return clone;
 | 
						|
	}
 | 
						|
 | 
						|
	@:jvm.synthetic final function _hx_initReflection() {
 | 
						|
		if (_hx_fields == null) {
 | 
						|
			_hx_fields = _hx_getKnownFields();
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	@:jvm.synthetic function _hx_getKnownFields():StringMap<Dynamic> {
 | 
						|
		return new StringMap();
 | 
						|
	}
 | 
						|
}
 |