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();
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 |