Created
February 17, 2015 22:30
-
-
Save evilpie/7dcf6be6c9ee19dc12e1 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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