6 Nan::Persistent<v8::Function> Boolean::constructor;
7 bool Boolean::constructor_locked = false;
9 Boolean::Boolean(bool v) : value(v) {}
11 Boolean& Boolean::get_singleton(bool v) {
12 static Boolean instance_false(false), instance_true(true);
13 return v ? instance_true : instance_false;
16 v8::Local<v8::Function> Boolean::get_constructor() {
17 Nan::EscapableHandleScope scope;
18 v8::Local<v8::Function> conslocal;
19 if (constructor.IsEmpty()) {
20 v8::Local<v8::FunctionTemplate> tpl = Nan::New<v8::FunctionTemplate>(New);
22 tpl->SetClassName(Nan::New("SassBoolean").ToLocalChecked());
23 tpl->InstanceTemplate()->SetInternalFieldCount(1);
24 Nan::SetPrototypeTemplate(tpl, "getValue", Nan::New<v8::FunctionTemplate>(GetValue));
26 conslocal = Nan::GetFunction(tpl).ToLocalChecked();
27 constructor.Reset(conslocal);
29 get_singleton(false).js_object.Reset(Nan::NewInstance(conslocal).ToLocalChecked());
30 Nan::SetInternalFieldPointer(Nan::New(get_singleton(false).js_object), 0, &get_singleton(false));
31 Nan::Set(conslocal, Nan::New("FALSE").ToLocalChecked(), Nan::New(get_singleton(false).js_object));
33 get_singleton(true).js_object.Reset(Nan::NewInstance(conslocal).ToLocalChecked());
34 Nan::SetInternalFieldPointer(Nan::New(get_singleton(true).js_object), 0, &get_singleton(true));
35 Nan::Set(conslocal, Nan::New("TRUE").ToLocalChecked(), Nan::New(get_singleton(true).js_object));
37 constructor_locked = true;
39 conslocal = Nan::New(constructor);
42 return scope.Escape(conslocal);
45 Sass_Value* Boolean::get_sass_value() {
46 return sass_make_boolean(value);
49 v8::Local<v8::Object> Boolean::get_js_object() {
50 return Nan::New(this->js_object);
53 NAN_METHOD(Boolean::New) {
55 if (info.IsConstructCall()) {
56 if (constructor_locked) {
57 return Nan::ThrowTypeError("Cannot instantiate SassBoolean");
61 if (info.Length() != 1 || !info[0]->IsBoolean()) {
62 return Nan::ThrowTypeError("Expected one boolean argument");
65 info.GetReturnValue().Set(get_singleton(Nan::To<bool>(info[0]).FromJust()).get_js_object());
69 NAN_METHOD(Boolean::GetValue) {
71 if ((out = static_cast<Boolean*>(Factory::unwrap(info.This())))) {
72 info.GetReturnValue().Set(Nan::New(out->value));