| OLD | NEW |
| 1 /* | 1 /* |
| 2 * This file is part of Adblock Plus <http://adblockplus.org/>, | 2 * This file is part of Adblock Plus <http://adblockplus.org/>, |
| 3 * Copyright (C) 2006-2014 Eyeo GmbH | 3 * Copyright (C) 2006-2014 Eyeo GmbH |
| 4 * | 4 * |
| 5 * Adblock Plus is free software: you can redistribute it and/or modify | 5 * Adblock Plus is free software: you can redistribute it and/or modify |
| 6 * it under the terms of the GNU General Public License version 3 as | 6 * it under the terms of the GNU General Public License version 3 as |
| 7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
| 8 * | 8 * |
| 9 * Adblock Plus is distributed in the hope that it will be useful, | 9 * Adblock Plus is distributed in the hope that it will be useful, |
| 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 88 }; | 88 }; |
| 89 | 89 |
| 90 /** | 90 /** |
| 91 * Defines properties with given name and type on an object. | 91 * Defines properties with given name and type on an object. |
| 92 * | 92 * |
| 93 * @param obj object to define properties on | 93 * @param obj object to define properties on |
| 94 * @param properties object mapping property names to their respective types | 94 * @param properties object mapping property names to their respective types |
| 95 * @param viewTypes see getViewsForType() | 95 * @param viewTypes see getViewsForType() |
| 96 * @param views see getViewsForType() | 96 * @param views see getViewsForType() |
| 97 * @param [offset] byte array offset at which the properties should start | 97 * @param [offset] byte array offset at which the properties should start |
| 98 * @param [cleanupValues] array of property/value combinations to be set when th
e object is created or destroyed |
| 98 * @return new start offset for additional properties | 99 * @return new start offset for additional properties |
| 99 */ | 100 */ |
| 100 exports.defineProperties = function defineProperties(obj, properties, viewTypes,
views, offset) | 101 exports.defineProperties = function defineProperties(obj, properties, viewTypes,
views, offset, cleanupValues) |
| 101 { | 102 { |
| 102 offset = offset | 0; | 103 offset = offset | 0; |
| 103 | 104 |
| 104 let propList = []; | 105 let propList = []; |
| 105 for (let name in properties) | 106 for (let name in properties) |
| 106 propList.push([name, properties[name]]); | 107 propList.push([name, properties[name]]); |
| 107 | 108 |
| 108 // Put larger properties first to make sure alignment requirements are met. | 109 // Put larger properties first to make sure alignment requirements are met. |
| 109 propList.sort(function(a, b) | 110 propList.sort(function(a, b) |
| 110 { | 111 { |
| 111 return b[1].referenceLength - a[1].referenceLength; | 112 return b[1].referenceLength - a[1].referenceLength; |
| 112 }); | 113 }); |
| 113 | 114 |
| 114 // Generates getters and setters for each property. | 115 // Generates getters and setters for each property. |
| 115 let descriptors = {}; | 116 let descriptors = {}; |
| 116 for (let i = 0, l = propList.length | 0; i < l; i++) | 117 for (let i = 0, l = propList.length | 0; i < l; i++) |
| 117 { | 118 { |
| 118 let [name, type] = propList[i]; | 119 let [name, type] = propList[i]; |
| 119 | 120 |
| 120 let viewParams = getViewsForType(type, viewTypes, views); | 121 let viewParams = getViewsForType(type, viewTypes, views); |
| 121 descriptors[name] = { | 122 descriptors[name] = { |
| 122 get: type.createGetter.apply(type, [offset].concat(viewParams)), | 123 get: type.createGetter.apply(type, [offset].concat(viewParams)), |
| 123 set: type.createSetter.apply(type, [offset].concat(viewParams)), | 124 set: type.createSetter.apply(type, [offset].concat(viewParams)), |
| 124 configurable: false, | 125 configurable: false, |
| 125 enumerable: true | 126 enumerable: true |
| 126 }; | 127 }; |
| 127 offset += type.referenceLength; | 128 offset += type.referenceLength; |
| 129 if (cleanupValues && typeof type.cleanupValue != "undefined") |
| 130 cleanupValues.push([name, type.cleanupValue]); |
| 128 } | 131 } |
| 129 | 132 |
| 130 // Define properties | 133 // Define properties |
| 131 Object.defineProperties(obj, descriptors); | 134 Object.defineProperties(obj, descriptors); |
| 132 | 135 |
| 133 return offset; | 136 return offset; |
| 134 }; | 137 }; |
| OLD | NEW |