| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2009 Apple Inc. All rights reserved. | 2 * Copyright (C) 2009 Apple Inc. All rights reserved. |
| 3 * Copyright (C) 2009 Google Inc. All rights reserved. | 3 * Copyright (C) 2009 Google Inc. All rights reserved. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
| 7 * are met: | 7 * are met: |
| 8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 86 // Template function used by XXXArrayConstructors. | 86 // Template function used by XXXArrayConstructors. |
| 87 // If this returns 0, it will already have thrown a JavaScript exception. | 87 // If this returns 0, it will already have thrown a JavaScript exception. |
| 88 template<class C, typename T> | 88 template<class C, typename T> |
| 89 PassRefPtr<C> constructArrayBufferViewWithArrayBufferArgument(JSC::ExecState* ex
ec) | 89 PassRefPtr<C> constructArrayBufferViewWithArrayBufferArgument(JSC::ExecState* ex
ec) |
| 90 { | 90 { |
| 91 RefPtr<ArrayBuffer> buffer = toArrayBuffer(exec->argument(0)); | 91 RefPtr<ArrayBuffer> buffer = toArrayBuffer(exec->argument(0)); |
| 92 if (!buffer) | 92 if (!buffer) |
| 93 return 0; | 93 return 0; |
| 94 | 94 |
| 95 unsigned offset = (exec->argumentCount() > 1) ? exec->argument(1).toUInt32(e
xec) : 0; | 95 unsigned offset = (exec->argumentCount() > 1) ? exec->argument(1).toUInt32(e
xec) : 0; |
| 96 if ((buffer->byteLength() - offset) % sizeof(T)) | 96 unsigned int length = 0; |
| 97 throwError(exec, createRangeError(exec, "ArrayBuffer length minus the by
teOffset is not a multiple of the element size.")); | |
| 98 unsigned int length = (buffer->byteLength() - offset) / sizeof(T); | |
| 99 if (exec->argumentCount() > 2) | 97 if (exec->argumentCount() > 2) |
| 100 length = exec->argument(2).toUInt32(exec); | 98 length = exec->argument(2).toUInt32(exec); |
| 99 else { |
| 100 if ((buffer->byteLength() - offset) % sizeof(T)) { |
| 101 throwError(exec, createRangeError(exec, "ArrayBuffer length minus th
e byteOffset is not a multiple of the element size.")); |
| 102 return 0; |
| 103 } |
| 104 length = (buffer->byteLength() - offset) / sizeof(T); |
| 105 } |
| 101 RefPtr<C> array = C::create(buffer, offset, length); | 106 RefPtr<C> array = C::create(buffer, offset, length); |
| 102 if (!array) | 107 if (!array) |
| 103 setDOMException(exec, INDEX_SIZE_ERR); | 108 setDOMException(exec, INDEX_SIZE_ERR); |
| 104 return array; | 109 return array; |
| 105 } | 110 } |
| 106 | 111 |
| 107 template<class C, typename T> | 112 template<class C, typename T> |
| 108 PassRefPtr<C> constructArrayBufferView(JSC::ExecState* exec) | 113 PassRefPtr<C> constructArrayBufferView(JSC::ExecState* exec) |
| 109 { | 114 { |
| 110 // There are 3 constructors: | 115 // There are 3 constructors: |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 166 if (JSDOMWrapper* wrapper = getCachedWrapper(currentWorld(exec), object)) | 171 if (JSDOMWrapper* wrapper = getCachedWrapper(currentWorld(exec), object)) |
| 167 return wrapper; | 172 return wrapper; |
| 168 | 173 |
| 169 exec->heap()->reportExtraMemoryCost(object->byteLength()); | 174 exec->heap()->reportExtraMemoryCost(object->byteLength()); |
| 170 return createWrapper<JSType>(exec, globalObject, object); | 175 return createWrapper<JSType>(exec, globalObject, object); |
| 171 } | 176 } |
| 172 | 177 |
| 173 } // namespace WebCore | 178 } // namespace WebCore |
| 174 | 179 |
| 175 #endif // JSArrayBufferViewHelper_h | 180 #endif // JSArrayBufferViewHelper_h |
| OLD | NEW |