Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Delta Between Two Patch Sets: lib/typedObjects/objectTypes.js

Issue 5728072976302080: Issue 151 - [Typed objects] Implement dynamically-sized array types (Closed)
Left Patch Set: Created May 16, 2014, 12:44 p.m.
Right Patch Set: Created July 11, 2014, 7:26 a.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
Left: Side by side diff | Download
Right: Side by side diff | Download
« no previous file with change/comment | « lib/typedObjects/arrayTypes.js ('k') | lib/typedObjects/primitiveTypes.js » ('j') | no next file with change/comment »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
LEFTRIGHT
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 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 let [bufferIndex, byteOffset] = alloc(this.firstFree, this.byteLength, 51 let [bufferIndex, byteOffset] = alloc(this.firstFree, this.byteLength,
52 this.bufferSize, this.buffers, this.viewTypes, this.views); 52 this.bufferSize, this.buffers, this.viewTypes, this.views);
53 53
54 let result = Object.create(this.proto, { 54 let result = Object.create(this.proto, {
55 typeId: fixedPropertyDescriptor(this.typeId), 55 typeId: fixedPropertyDescriptor(this.typeId),
56 bufferIndex: fixedPropertyDescriptor(bufferIndex), 56 bufferIndex: fixedPropertyDescriptor(bufferIndex),
57 byteOffset: fixedPropertyDescriptor(byteOffset) 57 byteOffset: fixedPropertyDescriptor(byteOffset)
58 }); 58 });
59 59
60 result._state = STATE_UNINITIALIZED; 60 result._state = STATE_UNINITIALIZED;
61 for (let [prop, value] of this.cleanupValues) 61 for (let [prop, value] of this.initialValues)
62 result[prop] = value; 62 result[prop] = value;
63 result._state = STATE_CREATED; 63 result._state = STATE_CREATED;
64 result._refCount = 1; 64 result._refCount = 1;
65 65
66 if (this.constructor) 66 if (this.constructor)
67 this.constructor.apply(result, arguments); 67 this.constructor.apply(result, arguments);
68 return result; 68 return result;
69 } 69 }
70 70
71 function free(obj) 71 function free(obj)
72 { 72 {
73 try 73 try
74 { 74 {
75 if (this.destructor) 75 if (this.destructor)
76 { 76 {
77 this.destructor.call(obj); 77 this.destructor.call(obj);
78 if (obj._refCount | 0) 78 if (obj._refCount | 0)
79 throw new Error("Reference count is no longer zero after calling the des tructor"); 79 throw new Error("Reference count is no longer zero after calling the des tructor");
80 } 80 }
81 } 81 }
82 finally 82 finally
83 { 83 {
84 for (let [prop, value] of this.cleanupValues) 84 for (let [prop, value] of this.initialValues)
85 obj[prop] = value; 85 obj[prop] = value;
86 86
87 dealloc(this.firstFree, obj.bufferIndex, obj.byteOffset); 87 dealloc(this.firstFree, obj.bufferIndex, obj.byteOffset);
88 } 88 }
89 } 89 }
90 90
91 function createGetter(offset) 91 function createGetter(offset)
92 { 92 {
93 offset = offset | 0; 93 offset = offset | 0;
94 94
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 { 209 {
210 watchers = Object.create(watchers); 210 watchers = Object.create(watchers);
211 for (let key in meta.watch) 211 for (let key in meta.watch)
212 watchers[key] = meta.watch[key]; 212 watchers[key] = meta.watch[key];
213 } 213 }
214 214
215 let proto = {}; 215 let proto = {};
216 let buffers = []; 216 let buffers = [];
217 let viewTypes = []; 217 let viewTypes = [];
218 let views = []; 218 let views = [];
219 let cleanupValues = []; 219 let initialValues = [];
220 let byteLength = defineProperties(proto, properties, viewTypes, views, 0, watc hers, cleanupValues); 220 let byteLength = defineProperties(proto, properties, viewTypes, views, 0, watc hers, initialValues);
221 Object.defineProperties(proto, methods); 221 Object.defineProperties(proto, methods);
222 222
223 // Round up to be a multiple of the maximal property size 223 // Round up to be a multiple of the maximal property size
224 byteLength = ((byteLength - 1) | (maxReferenceLength - 1)) + 1; 224 byteLength = ((byteLength - 1) | (maxReferenceLength - 1)) + 1;
225 225
226 // We need to be able to store a typed reference in the object's buffer 226 // We need to be able to store a typed reference in the object's buffer
227 byteLength = Math.max(byteLength, TypedReference.byteLength) | 0; 227 byteLength = Math.max(byteLength, TypedReference.byteLength) | 0;
228 let typedReferenceViews = getViewsForType(TypedReference, viewTypes, views); 228 let typedReferenceViews = getViewsForType(TypedReference, viewTypes, views);
229 229
230 // Take constructor and destructor from meta parameters, allow calling 230 // Take constructor and destructor from meta parameters, allow calling
(...skipping 21 matching lines...) Expand all
252 byteLength: byteLength, 252 byteLength: byteLength,
253 bufferSize: "bufferSize" in meta ? Math.max(meta.bufferSize | 0, 2) : 128, 253 bufferSize: "bufferSize" in meta ? Math.max(meta.bufferSize | 0, 2) : 128,
254 firstFree: new TypedReference(typeId, typedReferenceViews), 254 firstFree: new TypedReference(typeId, typedReferenceViews),
255 proto: proto, 255 proto: proto,
256 properties: properties, 256 properties: properties,
257 methods: methods, 257 methods: methods,
258 watchers: watchers, 258 watchers: watchers,
259 buffers: buffers, 259 buffers: buffers,
260 viewTypes: viewTypes, 260 viewTypes: viewTypes,
261 views: views, 261 views: views,
262 cleanupValues: cleanupValues, 262 initialValues: initialValues,
263 typeId: typeId, 263 typeId: typeId,
264 parentTypeInfo: parentTypeInfo, 264 parentTypeInfo: parentTypeInfo,
265 constructor: constructor, 265 constructor: constructor,
266 destructor: destructor 266 destructor: destructor
267 }; 267 };
268 268
269 let result = create.bind(typeInfo); 269 let result = create.bind(typeInfo);
270 Object.defineProperties(result, { 270 Object.defineProperties(result, {
271 byteLength: fixedPropertyDescriptor(byteLength), 271 byteLength: fixedPropertyDescriptor(byteLength),
272 272
273 referenceLength: fixedPropertyDescriptor(Reference.byteLength), 273 referenceLength: fixedPropertyDescriptor(Reference.byteLength),
274 viewTypes: fixedPropertyDescriptor(Reference.viewTypes), 274 viewTypes: fixedPropertyDescriptor(Reference.viewTypes),
275 cleanupValue: fixedPropertyDescriptor(null), 275 initialValue: fixedPropertyDescriptor(null),
276 276
277 typeId: fixedPropertyDescriptor(typeId), 277 typeId: fixedPropertyDescriptor(typeId),
278 extend: fixedPropertyDescriptor(extend.bind(null, typeInfo)), 278 extend: fixedPropertyDescriptor(extend.bind(null, typeInfo)),
279 isInstance: fixedPropertyDescriptor(isInstance.bind(null, typeId)), 279 isInstance: fixedPropertyDescriptor(isInstance.bind(null, typeId)),
280 Array: fixedPropertyDescriptor(createArrayType.bind(null, result)), 280 Array: fixedPropertyDescriptor(createArrayType.bind(null, result)),
281 281
282 createGetter: fixedPropertyDescriptor(createGetter), 282 createGetter: fixedPropertyDescriptor(createGetter),
283 createSetter: fixedPropertyDescriptor(createSetter.bind(null, typeId)) 283 createSetter: fixedPropertyDescriptor(createSetter.bind(null, typeId))
284 }); 284 });
285 types.push(typeInfo); 285 types.push(typeInfo);
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
323 this._refCount--; 323 this._refCount--;
324 if (this._refCount == 0 && this._state < STATE_RELEASING) 324 if (this._refCount == 0 && this._state < STATE_RELEASING)
325 { 325 {
326 this._state = STATE_RELEASING; 326 this._state = STATE_RELEASING;
327 free.call(types[this.typeId | 0], this); 327 free.call(types[this.typeId | 0], this);
328 } 328 }
329 } 329 }
330 }, null); 330 }, null);
331 331
332 exports.ObjectType = ObjectBase.extend; 332 exports.ObjectType = ObjectBase.extend;
LEFTRIGHT

Powered by Google App Engine
This is Rietveld