Skip to content

Instantly share code, notes, and snippets.

@evilpie
Created February 17, 2015 22:30
Show Gist options
  • Save evilpie/7dcf6be6c9ee19dc12e1 to your computer and use it in GitHub Desktop.
Save evilpie/7dcf6be6c9ee19dc12e1 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
#define JSPROP_READONLY 1
enum class Enumerability {
False,
True
};
const Enumerability Enumerable = Enumerability::True;
const Enumerability NotEnumerable = Enumerability::False;
enum class Writablitiy {
False,
True
};
const Writablitiy Writable = Writablitiy::True;
const Writablitiy NotWritable = Writablitiy::False;
enum class Configurablitiy {
False,
True
};
const Configurablitiy Configurable = Configurablitiy::True;
const Configurablitiy NotConfigurable = Configurablitiy::False;
class AttributesInititializer {
unsigned attrs;
public:
AttributesInititializer(Configurablitiy configurability, Writablitiy writablitiy, Enumerability enumerability) {
attrs |= (configurability == Configurablitiy::True) ? 0 : JSPROP_PERMANENT;
attrs |= (writablitiy == Writablitiy::True) ? 0 : JSPROP_READONLY;
attrs |= (enumerability == Enumerability::True) ? JSPROP_ENUMERATE : 0;
}
AttributesInititializer(Configurablitiy configurability, Enumerability enumerability, Writablitiy writablitiy) {
attrs |= (configurability == Configurablitiy::True) ? 0 : JSPROP_PERMANENT;
attrs |= (enumerability == Enumerability::True) ? JSPROP_ENUMERATE : 0;
attrs |= (writablitiy == Writablitiy::True) ? 0 : JSPROP_READONLY;
}
AttributesInititializer(Writablitiy writablitiy, Configurablitiy configurability, Enumerability enumerability) {
attrs |= (writablitiy == Writablitiy::True) ? 0 : JSPROP_READONLY;
attrs |= (configurability == Configurablitiy::True) ? 0 : JSPROP_PERMANENT;
attrs |= (enumerability == Enumerability::True) ? JSPROP_ENUMERATE : 0;
}
AttributesInititializer(Writablitiy writablitiy, Enumerability enumerability, Configurablitiy configurability) {
attrs |= (writablitiy == Writablitiy::True) ? 0 : JSPROP_READONLY;
attrs |= (enumerability == Enumerability::True) ? JSPROP_ENUMERATE : 0;
attrs |= (configurability == Configurablitiy::True) ? 0 : JSPROP_PERMANENT;
}
AttributesInititializer(Enumerability enumerability, Configurablitiy configurability, Writablitiy writablitiy) {
attrs |= (enumerability == Enumerability::True) ? JSPROP_ENUMERATE : 0;
attrs |= (configurability == Configurablitiy::True) ? 0 : JSPROP_PERMANENT;
attrs |= (writablitiy == Writablitiy::True) ? 0 : JSPROP_READONLY;
}
AttributesInititializer(Enumerability enumerability, Writablitiy writablitiy, Configurablitiy configurability) {
attrs |= (enumerability == Enumerability::True) ? JSPROP_ENUMERATE : 0;
attrs |= (writablitiy == Writablitiy::True) ? 0 : JSPROP_READONLY;
attrs |= (configurability == Configurablitiy::True) ? 0 : JSPROP_PERMANENT;
}
AttributesInititializer(Configurablitiy configurability, Writablitiy writablitiy) {
attrs |= (configurability == Configurablitiy::True) ? 0 : JSPROP_PERMANENT;
attrs |= (writablitiy == Writablitiy::True) ? 0 : JSPROP_READONLY;
attrs |= JSPROP_IGNORE_READONLY;
}
AttributesInititializer(Configurablitiy configurability, Enumerability enumerability) {
attrs |= (configurability == Configurablitiy::True) ? 0 : JSPROP_PERMANENT;
attrs |= (enumerability == Enumerability::True) ? JSPROP_ENUMERATE : 0;
attrs |= JSPROP_IGNORE_ENUMERATE;
}
AttributesInititializer(Writablitiy writablitiy, Configurablitiy configurability) {
attrs |= (writablitiy == Writablitiy::True) ? 0 : JSPROP_READONLY;
attrs |= (configurability == Configurablitiy::True) ? 0 : JSPROP_PERMANENT;
attrs |= JSPROP_IGNORE_PERMANENT;
}
AttributesInititializer(Writablitiy writablitiy, Enumerability enumerability) {
attrs |= (writablitiy == Writablitiy::True) ? 0 : JSPROP_READONLY;
attrs |= (enumerability == Enumerability::True) ? JSPROP_ENUMERATE : 0;
attrs |= JSPROP_IGNORE_ENUMERATE;
}
AttributesInititializer(Enumerability enumerability, Configurablitiy configurability) {
attrs |= (enumerability == Enumerability::True) ? JSPROP_ENUMERATE : 0;
attrs |= (configurability == Configurablitiy::True) ? 0 : JSPROP_PERMANENT;
attrs |= JSPROP_IGNORE_PERMANENT;
}
AttributesInititializer(Enumerability enumerability, Writablitiy writablitiy) {
attrs |= (enumerability == Enumerability::True) ? JSPROP_ENUMERATE : 0;
attrs |= (writablitiy == Writablitiy::True) ? 0 : JSPROP_READONLY;
attrs |= JSPROP_IGNORE_READONLY;
}
AttributesInititializer(Configurablitiy configurability) {
attrs |= (configurability == Configurablitiy::True) ? 0 : JSPROP_PERMANENT;
attrs |= JSPROP_IGNORE_ENUMERATE;
attrs |= JSPROP_IGNORE_READONLY;
}
AttributesInititializer(Writablitiy writablitiy) {
attrs |= (writablitiy == Writablitiy::True) ? 0 : JSPROP_READONLY;
attrs |= JSPROP_IGNORE_ENUMERATE;
attrs |= JSPROP_IGNORE_PERMANENT;
}
AttributesInititializer(Enumerability enumerability) {
attrs |= (enumerability == Enumerability::True) ? JSPROP_ENUMERATE : 0;
attrs |= JSPROP_IGNORE_READONLY;
attrs |= JSPROP_IGNORE_PERMANENT;
}
};
void
test(AttributesInititializer init) {
}
int main() {
test({Enumerable, Configurable});
test({NotEnumerable, Configurable});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment