Skip to content

Instantly share code, notes, and snippets.

@evilpie
Created February 17, 2015 22:14
Show Gist options
  • Save evilpie/289ba8db3758c95d6754 to your computer and use it in GitHub Desktop.
Save evilpie/289ba8db3758c95d6754 to your computer and use it in GitHub Desktop.
#define JSPROP_IGNORE_ENUMERATE 0x1000 /* ignore the value in JSPROP_ENUMERATE.
This flag only valid when defining over
an existing property. */
#define JSPROP_IGNORE_READONLY 0x2000 /* ignore the value in JSPROP_READONLY.
This flag only valid when defining over
an existing property. */
#define JSPROP_IGNORE_PERMANENT 0x4000 /* ignore the value in JSPROP_PERMANENT. */
#define JSPROP_ENUMERATE 0
#define JSPROP_PERMANENT 1
enum class Enumerable {
False,
True
};
enum class Writable {
False,
True
};
enum class Configurable {
False,
True
};
class AttributesInititializer {
unsigned attrs;
public:
AttributesInititializer(Enumerable enumerability, Writable writablitiy, Configurable configurability) {
attrs |= (enumerability == Enumerable::True) ? JSPROP_ENUMERATE : 0;
attrs |= (writablitiy == Writable::True) ? 0 : JSPROP_READONLY;
attrs |= (configurability == Configurable::True) ? 0 : JSPROP_PERMANENT;
}
AttributesInititializer(Writable writablitiy, Enumerable enumerability, Configurable configurability) {
attrs |= (writablitiy == Writable::True) ? 0 : JSPROP_READONLY;
attrs |= (enumerability == Enumerable::True) ? JSPROP_ENUMERATE : 0;
attrs |= (configurability == Configurable::True) ? 0 : JSPROP_PERMANENT;
}
AttributesInititializer(Enumerable enumerability, Configurable configurability, Writable writablitiy) {
attrs |= (enumerability == Enumerable::True) ? JSPROP_ENUMERATE : 0;
attrs |= (configurability == Configurable::True) ? 0 : JSPROP_PERMANENT;
attrs |= (writablitiy == Writable::True) ? 0 : JSPROP_READONLY;
}
AttributesInititializer(Configurable configurability, Enumerable enumerability, Writable writablitiy) {
attrs |= (configurability == Configurable::True) ? 0 : JSPROP_PERMANENT;
attrs |= (enumerability == Enumerable::True) ? JSPROP_ENUMERATE : 0;
attrs |= (writablitiy == Writable::True) ? 0 : JSPROP_READONLY;
}
AttributesInititializer(Writable writablitiy, Configurable configurability, Enumerable enumerability) {
attrs |= (writablitiy == Writable::True) ? 0 : JSPROP_READONLY;
attrs |= (configurability == Configurable::True) ? 0 : JSPROP_PERMANENT;
attrs |= (enumerability == Enumerable::True) ? JSPROP_ENUMERATE : 0;
}
AttributesInititializer(Configurable configurability, Writable writablitiy, Enumerable enumerability) {
attrs |= (configurability == Configurable::True) ? 0 : JSPROP_PERMANENT;
attrs |= (writablitiy == Writable::True) ? 0 : JSPROP_READONLY;
attrs |= (enumerability == Enumerable::True) ? JSPROP_ENUMERATE : 0;
}
};
void
test(AttributesInititializer init) {
}
int main() {
test({Enumerable::True, Configurable::True});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment