On Mon, Nov 16, 2015 at 9:44 PM, Arthur O'Dwyer <[email protected]>
wrote:
> I'm going to start using the following function for debugging purposes,
> but *man* it would be nice if V8 provided something like this out of the
> box. This is just Too Much Typing.
>
> uint64_t GetTypeFlags(const v8::Local<v8::Value>& v)
> {
> uint64_t result = 0;
> if (v->IsArgumentsObject() ) result |= 0x0000000000000001;
> if (v->IsArrayBuffer() ) result |= 0x0000000000000002;
> if (v->IsArrayBufferView() ) result |= 0x0000000000000004;
> if (v->IsArray() ) result |= 0x0000000000000008;
> if (v->IsBooleanObject() ) result |= 0x0000000000000010;
> if (v->IsBoolean() ) result |= 0x0000000000000020;
> if (v->IsDataView() ) result |= 0x0000000000000040;
> if (v->IsDate() ) result |= 0x0000000000000080;
> if (v->IsExternal() ) result |= 0x0000000000000100;
> if (v->IsFalse() ) result |= 0x0000000000000200;
> if (v->IsFloat32Array() ) result |= 0x0000000000000400;
> if (v->IsFloat64Array() ) result |= 0x0000000000000800;
> if (v->IsFunction() ) result |= 0x0000000000001000;
> if (v->IsGeneratorFunction() ) result |= 0x0000000000002000;
> if (v->IsGeneratorObject() ) result |= 0x0000000000004000;
> if (v->IsInt16Array() ) result |= 0x0000000000008000;
> if (v->IsInt32Array() ) result |= 0x0000000000010000;
> if (v->IsInt32() ) result |= 0x0000000000020000;
> if (v->IsInt8Array() ) result |= 0x0000000000040000;
> if (v->IsMapIterator() ) result |= 0x0000000000080000;
> if (v->IsMap() ) result |= 0x0000000000100000;
> if (v->IsName() ) result |= 0x0000000000200000;
> if (v->IsNativeError() ) result |= 0x0000000000400000;
> if (v->IsNull() ) result |= 0x0000000000800000;
> if (v->IsNumberObject() ) result |= 0x0000000001000000;
> if (v->IsNumber() ) result |= 0x0000000002000000;
> if (v->IsObject() ) result |= 0x0000000004000000;
> if (v->IsPromise() ) result |= 0x0000000008000000;
> if (v->IsRegExp() ) result |= 0x0000000010000000;
> if (v->IsSetIterator() ) result |= 0x0000000020000000;
> if (v->IsSet() ) result |= 0x0000000040000000;
> if (v->IsStringObject() ) result |= 0x0000000080000000;
> if (v->IsString() ) result |= 0x0000000100000000;
> if (v->IsSymbolObject() ) result |= 0x0000000200000000;
> if (v->IsSymbol() ) result |= 0x0000000400000000;
> if (v->IsTrue() ) result |= 0x0000000800000000;
> if (v->IsTypedArray() ) result |= 0x0000001000000000;
> if (v->IsUint16Array() ) result |= 0x0000002000000000;
> if (v->IsUint32Array() ) result |= 0x0000004000000000;
> if (v->IsUint32() ) result |= 0x0000008000000000;
> if (v->IsUint8Array() ) result |= 0x0000010000000000;
> if (v->IsUint8ClampedArray() ) result |= 0x0000020000000000;
> if (v->IsUndefined() ) result |= 0x0000040000000000;
> if (v->IsWeakMap() ) result |= 0x0000080000000000;
> if (v->IsWeakSet() ) result |= 0x0000100000000000;
> return result;
> }
>
>
Somebody correct me if I'm wrong, but OR'ing can result in an object
tripping multiple flags. Like a `var s = new String( "yo!" );` would
trigger an IsObject & IsStringObject, and `var x = 42;` would trigger
IsNumber, IsInt32, IsUint32. Is that your intent Arthur? Do you really
want to do duck typing via bit masking?
--
--
v8-users mailing list
[email protected]
http://groups.google.com/group/v8-users
---
You received this message because you are subscribed to the Google Groups
"v8-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.