History

Added JS exceptions + fixed up floating precision mess up

Atlante45 committed 12 years ago

Commit b9fe5b21 parent d456adf7 files · +105 −52Browse files

Showing the changes to libraries/script-engine/src/DataViewPrototype.cpp (1 of 7 files). Show all

Unified · Split

libraries/script-engine/src/DataViewPrototype.cpp+25−17
@@ -26,7 +26,10 @@ QByteArray* DataViewPrototype::thisArrayBuffer() const { · 25 unmodified lines
2626 return qscriptvalue_cast<QByteArray*>(bufferObject.data());
2727 }
2828
29−bool DataViewPrototype::realOffset(quint32& offset, size_t size) const {
29+bool DataViewPrototype::realOffset(qint32& offset, size_t size) const {
30+ if (offset < 0) {
31+ return false;
32+ }
3033 quint32 viewOffset = thisObject().data().property(BYTE_OFFSET_PROPERTY_NAME).toInt32();
3134 quint32 viewLength = thisObject().data().property(BYTE_LENGTH_PROPERTY_NAME).toInt32();
3235 //qDebug() << "View Offset: " << viewOffset << ", View Lenght: " << viewLength;
@@ -38,7 +41,7 @@ bool DataViewPrototype::realOffset(quint32& offset, size_t size) const { · 5 unmodified lines
3841
3942 ///////////////// GETTERS ////////////////////////////
4043
41−qint32 DataViewPrototype::getInt8(quint32 byteOffset) {
44+qint32 DataViewPrototype::getInt8(qint32 byteOffset) {
4245 if (realOffset(byteOffset, sizeof(qint8))) {
4346 QDataStream stream(*thisArrayBuffer());
4447 stream.skipRawData(byteOffset);
@@ -51,7 +54,7 @@ qint32 DataViewPrototype::getInt8(quint32 byteOffset) { · 6 unmodified lines
5154 return 0;
5255 }
5356
54−quint32 DataViewPrototype::getUint8(quint32 byteOffset) {
57+quint32 DataViewPrototype::getUint8(qint32 byteOffset) {
5558 if (realOffset(byteOffset, sizeof(quint8))) {
5659 QDataStream stream(*thisArrayBuffer());
5760 stream.skipRawData(byteOffset);
@@ -64,7 +67,7 @@ quint32 DataViewPrototype::getUint8(quint32 byteOffset) { · 6 unmodified lines
6467 return 0;
6568 }
6669
67−qint32 DataViewPrototype::getInt16(quint32 byteOffset, bool littleEndian) {
70+qint32 DataViewPrototype::getInt16(qint32 byteOffset, bool littleEndian) {
6871 if (realOffset(byteOffset, sizeof(qint16))) {
6972 QDataStream stream(*thisArrayBuffer());
7073 stream.skipRawData(byteOffset);
@@ -78,7 +81,7 @@ qint32 DataViewPrototype::getInt16(quint32 byteOffset, bool littleEndian) { · 7 unmodified lines
7881 return 0;
7982 }
8083
81−quint32 DataViewPrototype::getUint16(quint32 byteOffset, bool littleEndian) {
84+quint32 DataViewPrototype::getUint16(qint32 byteOffset, bool littleEndian) {
8285 if (realOffset(byteOffset, sizeof(quint16))) {
8386 QDataStream stream(*thisArrayBuffer());
8487 stream.skipRawData(byteOffset);
@@ -92,7 +95,7 @@ quint32 DataViewPrototype::getUint16(quint32 byteOffset, bool littleEndian) { · 7 unmodified lines
9295 return 0;
9396 }
9497
95−qint32 DataViewPrototype::getInt32(quint32 byteOffset, bool littleEndian) {
98+qint32 DataViewPrototype::getInt32(qint32 byteOffset, bool littleEndian) {
9699 if (realOffset(byteOffset, sizeof(qint32))) {
97100 QDataStream stream(*thisArrayBuffer());
98101 stream.skipRawData(byteOffset);
@@ -106,7 +109,7 @@ qint32 DataViewPrototype::getInt32(quint32 byteOffset, bool littleEndian) { · 7 unmodified lines
106109 return 0;
107110 }
108111
109−quint32 DataViewPrototype::getUint32(quint32 byteOffset, bool littleEndian) {
112+quint32 DataViewPrototype::getUint32(qint32 byteOffset, bool littleEndian) {
110113 if (realOffset(byteOffset, sizeof(quint32))) {
111114 QDataStream stream(*thisArrayBuffer());
112115 stream.skipRawData(byteOffset);
@@ -120,25 +123,28 @@ quint32 DataViewPrototype::getUint32(quint32 byteOffset, bool littleEndian) { · 7 unmodified lines
120123 return 0;
121124 }
122125
123−float DataViewPrototype::getFloat32(quint32 byteOffset, bool littleEndian) {
126+float DataViewPrototype::getFloat32(qint32 byteOffset, bool littleEndian) {
124127 if (realOffset(byteOffset, sizeof(float))) {
125128 QDataStream stream(*thisArrayBuffer());
126129 stream.skipRawData(byteOffset);
127130 stream.setByteOrder((littleEndian) ? QDataStream::LittleEndian : QDataStream::BigEndian);
131+ stream.setFloatingPointPrecision(QDataStream::SinglePrecision);
128132
129133 float result;
130134 stream >> result;
135+ qDebug() << "Get: " << result;
131136 return result;
132137 }
133138 thisObject().engine()->evaluate("throw \"RangeError: byteOffset out of range\"");
134139 return 0;
135140 }
136141
137−double DataViewPrototype::getFloat64(quint32 byteOffset, bool littleEndian) {
142+double DataViewPrototype::getFloat64(qint32 byteOffset, bool littleEndian) {
138143 if (realOffset(byteOffset, sizeof(double))) {
139144 QDataStream stream(*thisArrayBuffer());
140145 stream.skipRawData(byteOffset);
141146 stream.setByteOrder((littleEndian) ? QDataStream::LittleEndian : QDataStream::BigEndian);
147+ stream.setFloatingPointPrecision(QDataStream::DoublePrecision);
142148
143149 double result;
144150 stream >> result;
@@ -150,7 +156,7 @@ double DataViewPrototype::getFloat64(quint32 byteOffset, bool littleEndian) { · 5 unmodified lines
150156
151157 ///////////////// SETTERS ////////////////////////////
152158
153−void DataViewPrototype::setInt8(quint32 byteOffset, qint32 value) {
159+void DataViewPrototype::setInt8(qint32 byteOffset, qint32 value) {
154160 if (realOffset(byteOffset, sizeof(qint8))) {
155161 QDataStream stream(thisArrayBuffer(), QIODevice::ReadWrite);
156162 stream.skipRawData(byteOffset);
@@ -161,7 +167,7 @@ void DataViewPrototype::setInt8(quint32 byteOffset, qint32 value) { · 4 unmodified lines
161167 }
162168 }
163169
164−void DataViewPrototype::setUint8(quint32 byteOffset, quint32 value) {
170+void DataViewPrototype::setUint8(qint32 byteOffset, quint32 value) {
165171 if (realOffset(byteOffset, sizeof(quint8))) {
166172 QDataStream stream(thisArrayBuffer(), QIODevice::ReadWrite);
167173 stream.skipRawData(byteOffset);
@@ -172,7 +178,7 @@ void DataViewPrototype::setUint8(quint32 byteOffset, quint32 value) { · 4 unmodified lines
172178 }
173179 }
174180
175−void DataViewPrototype::setInt16(quint32 byteOffset, qint32 value, bool littleEndian) {
181+void DataViewPrototype::setInt16(qint32 byteOffset, qint32 value, bool littleEndian) {
176182 if (realOffset(byteOffset, sizeof(qint16))) {
177183 QDataStream stream(thisArrayBuffer(), QIODevice::ReadWrite);
178184 stream.skipRawData(byteOffset);
@@ -184,7 +190,7 @@ void DataViewPrototype::setInt16(quint32 byteOffset, qint32 value, bool littleEn · 5 unmodified lines
184190 }
185191 }
186192
187−void DataViewPrototype::setUint16(quint32 byteOffset, quint32 value, bool littleEndian) {
193+void DataViewPrototype::setUint16(qint32 byteOffset, quint32 value, bool littleEndian) {
188194 if (realOffset(byteOffset, sizeof(quint16))) {
189195 QDataStream stream(thisArrayBuffer(), QIODevice::ReadWrite);
190196 stream.skipRawData(byteOffset);
@@ -196,7 +202,7 @@ void DataViewPrototype::setUint16(quint32 byteOffset, quint32 value, bool little · 5 unmodified lines
196202 }
197203 }
198204
199−void DataViewPrototype::setInt32(quint32 byteOffset, qint32 value, bool littleEndian) {
205+void DataViewPrototype::setInt32(qint32 byteOffset, qint32 value, bool littleEndian) {
200206 if (realOffset(byteOffset, sizeof(qint32))) {
201207 QDataStream stream(thisArrayBuffer(), QIODevice::ReadWrite);
202208 stream.skipRawData(byteOffset);
@@ -208,7 +214,7 @@ void DataViewPrototype::setInt32(quint32 byteOffset, qint32 value, bool littleEn · 5 unmodified lines
208214 }
209215 }
210216
211−void DataViewPrototype::setUint32(quint32 byteOffset, quint32 value, bool littleEndian) {
217+void DataViewPrototype::setUint32(qint32 byteOffset, quint32 value, bool littleEndian) {
212218 if (realOffset(byteOffset, sizeof(quint32))) {
213219 QDataStream stream(thisArrayBuffer(), QIODevice::ReadWrite);
214220 stream.skipRawData(byteOffset);
@@ -220,11 +226,12 @@ void DataViewPrototype::setUint32(quint32 byteOffset, quint32 value, bool little · 5 unmodified lines
220226 }
221227 }
222228
223−void DataViewPrototype::setFloat32(quint32 byteOffset, float value, bool littleEndian) {
229+void DataViewPrototype::setFloat32(qint32 byteOffset, float value, bool littleEndian) {
224230 if (realOffset(byteOffset, sizeof(float))) {
225231 QDataStream stream(thisArrayBuffer(), QIODevice::ReadWrite);
226232 stream.skipRawData(byteOffset);
227233 stream.setByteOrder((littleEndian) ? QDataStream::LittleEndian : QDataStream::BigEndian);
234+ stream.setFloatingPointPrecision(QDataStream::SinglePrecision);
228235
229236 stream << value;
230237 } else {
@@ -232,11 +239,12 @@ void DataViewPrototype::setFloat32(quint32 byteOffset, float value, bool littleE · 1 unmodified line
232239 }
233240 }
234241
235−void DataViewPrototype::setFloat64(quint32 byteOffset, double value, bool littleEndian) {
242+void DataViewPrototype::setFloat64(qint32 byteOffset, double value, bool littleEndian) {
236243 if (realOffset(byteOffset, sizeof(double))) {
237244 QDataStream stream(thisArrayBuffer(), QIODevice::ReadWrite);
238245 stream.skipRawData(byteOffset);
239246 stream.setByteOrder((littleEndian) ? QDataStream::LittleEndian : QDataStream::BigEndian);
247+ stream.setFloatingPointPrecision(QDataStream::DoublePrecision);
240248
241249 stream << value;
242250 } else {