/// // Integer conversions function WebidlEnforceRange(val, min, max) { var num = ToNumber(val); if (!Number_isFinite(num)) ThrowTypeError("Value isn't finite!"); if (val < 0) num = -std_Math_floor(std_Math_abs(num)); else num = std_Math_floor(std_Math_abs(num)); if (num < min || num > max) ThrowTypeError("Value is out of range"); return num; } function WebidlClamp(val, min, max) { var num = ToNumber(val); if (Number_isNaN(num)) return 0; num = std_Math_min(std_Math_max(num, min), max); var to_truncate = num + 0.5; num = num | 0; if (to_truncate == num) { return num & ~1; } return num; } function ToWebidlByte(val) { var num = (val >>> 0) % (1 << 8); if (num >= (1 << 7)) return num - (1 << 8); return num; } function ToWebidlByteEnforceRange(val) { return WebidlEnforceRange(val, -(1 << 7), (1 << 7) - 1); } function ToWebidlByteClamp(val) { return WebidlClamp(val, -(1 << 7), (1 << 7) - 1); } function ToWebidlOctet(val) { return (val >>> 0) % (1 << 8); } function ToWebidlOctetEnforceRange(val) { return WebidlEnforceRange(val, 0, (1 << 8) - 1); } function ToWebidlOctetClamp(val) { return WebidlClamp(val, 0, (1 << 8) - 1); } function ToWebidlShort(val) { var num = (val >>> 0) % (1 << 16); if (num >= (1 << 15)) return num - (1 << 16); return num; } function ToWebidlShortEnforceRange(val) { return WebidlEnforceRange(val, -(1 << 15), (1 << 15) - 1); } function ToWebidlShortClamp(val) { return WebidlClamp(val, -(1 << 15), (1 << 15) - 1); } function ToWebidlUnsignedShort(val) { return (val >>> 0) % (1 << 16); } function ToWebidlUnsignedShortEnforceRange(val) { return WebidlEnforceRange(val, 0, (1 << 16) - 1); } function ToWebidlUnsignedShortClamp(val) { return WebidlClamp(val, 0, (1 << 16) - 1); } function ToWebidlLong(val) { return val | 0; } function ToWebidlLongEnforceRange(val) { return WebidlEnforceRange(val, -(1 << 31), (1 << 31) - 1); } function ToWebidlLongClamp(val) { return WebidlClamp(val, -(1 << 31), (1 << 31) - 1); } function ToWebidlUnsignedLong(val) { return val >>> 0; } function ToWebidlUnsignedLongEnforceRange(val) { return WebidlEnforceRange(val, 0, ~0 >>> 0); } function ToWebidlUnsignedLongClamp(val) { return WebidlClamp(val, 0, ~0 >>> 0); } // XXX add long long conversions function ToWebidlFloat(val) { var num = ToNumber(val); if (!Number_isFinite(num)) ThrowTypeError("Value must be finite"); var rval = std_Math_fround(num); // XXX Check and throw on 2 ^ 128 if (rval === 0.0 && num < 0) rval = -0.0; return rval; } function ToWebidlUnrestrictedFloat(val) { var num = ToNumber(val); if (!Number_isFinite(num)) ThrowTypeError("Value must be finite"); var rval = std_Math_fround(num); // XXX Check for 2 ^ 128 and return infinity if so if (rval === 0.0 && num < 0) rval = -0.0; return rval; } function ToWebidlDouble(val) { var num = ToNumber(val); if (!Number_isFinite(num)) ThrowTypeError("Value must be finite"); return num; } function ToWebidlByteString(val) { var str = ToString(val); for (var i = 0; i < str.length; i++) { if (callFunction(std_String_charCodeAt, str, i) > 255) ThrowTypeError("Value at " + i + "is greater than 255"); } return str; } function ToWebidlObject(val) { if (!IsObject(val)) ThrowTypeError("Value is not an object"); return val; } class Node { constructor(obj) { this.obj = obj; } get parent_node() { return UnsafeGetReservedSlot(this.obj, 1); } get first_child() { return UnsafeGetReservedSlot(this.obj, 2); } get last_child() { return UnsafeGetReservedSlot(this.obj, 3); } get next_sibling() { return UnsafeGetReservedSlot(this.obj, 4); } get prev_sibling() { return UnsafeGetReservedSlot(this.obj, 5); } get owner_doc() { return UnsafeGetReservedSlot(this.obj, 6); } get child_list() { return UnsafeGetReservedSlot(this.obj, 7); } set child_list(val) { UnsafeSetReservedSlot(this.obj, 7, val); } get children_count() { return UnsafeGetReservedSlot(this.obj, 8); } get flags() { return UnsafeGetInt32FromReservedSlot(this.obj, 9); } get layout_data() { return UnsafeGetReservedSlot(this.obj, 10); } get unique_id() { return UnsafeGetStringFromReservedSlot(this.obj, 11); } } function NodeImpl_fn_hasChildNodes(self) { return !!self.first_child; } function NodeImpl_get_firstChild(self) { return self.first_child; } /// /// /// function Node_fn_hasChildNodes() { if (!CheckDOMProtochain(this, 112, 1)) ThrowTypeError("\"this\" object does not implement interface Node."); return NodeImpl_fn_hasChildNodes(new Node(this)); } function Node_get_firstChild() { if (!CheckDOMProtochain(this, 112, 1)) ThrowTypeError("\"this\" object does not implement interface Node."); return NodeImpl_get_firstChild(new Node(this)); }