void AppBinding::CreateProperties(const ValueList& args, SharedValue result) { AutoPtr<PropertiesBinding> properties = new PropertiesBinding(); result->SetObject(properties); if (args.size() > 0 && args.at(0)->IsObject()) { SharedKObject p = args.at(0)->ToObject(); SharedStringList names = p->GetPropertyNames(); for (size_t i = 0; i < names->size(); i++) { SharedValue value = p->Get(names->at(i)); ValueList setterArgs; setterArgs.push_back(Value::NewString(names->at(i))); setterArgs.push_back(value); PropertiesBinding::Type type; if (value->IsList()) type = PropertiesBinding::List; else if (value->IsInt()) type = PropertiesBinding::Int; else if (value->IsDouble()) type = PropertiesBinding::Double; else if (value->IsBool()) type = PropertiesBinding::Bool; else type = PropertiesBinding::String; properties->Setter(setterArgs, type); } } }
bool KObject::GetBool(const char* name, bool defaultValue) { SharedValue prop = this->Get(name); if (prop->IsBool()) { return prop->ToBool(); } else { return defaultValue; } }
VALUE RubyUtils::ToRubyValue(SharedValue value) { if (value->IsNull() || value->IsUndefined()) { return Qnil; } if (value->IsBool()) { return value->ToBool() ? Qtrue : Qfalse; } else if (value->IsNumber()) { return rb_float_new(value->ToNumber()); } else if (value->IsString()) { return rb_str_new2(value->ToString()); } else if (value->IsObject()) { AutoPtr<KRubyObject> ro = value->ToObject().cast<KRubyObject>(); if (!ro.isNull()) return ro->ToRuby(); AutoPtr<KRubyHash> rh = value->ToObject().cast<KRubyHash>(); if (!rh.isNull()) return rh->ToRuby(); return RubyUtils::KObjectToRubyValue(value); } else if (value->IsMethod()) { AutoPtr<KRubyMethod> rm = value->ToMethod().cast<KRubyMethod>(); if (!rm.isNull()) return rm->ToRuby(); else return RubyUtils::KMethodToRubyValue(value); } else if (value->IsList()) { AutoPtr<KRubyList> rl = value->ToList().cast<KRubyList>(); if (!rl.isNull()) return rl->ToRuby(); else return RubyUtils::KListToRubyValue(value); } return Qnil; }
void KPHPArrayObject::AddKrollValueToPHPArray(SharedValue value, zval *phpArray) { if (value->IsNull() || value->IsUndefined()) { add_next_index_null(phpArray); } else if (value->IsBool()) { if (value->ToBool()) add_next_index_bool(phpArray, 1); else add_next_index_bool(phpArray, 0); } else if (value->IsNumber()) { /* No way to check whether the number is an integer or a double here. All Kroll numbers are doubles, so return a double. This could cause some PHP to function incorrectly if it's doing strict type checking. */ add_next_index_double(phpArray, value->ToNumber()); } else if (value->IsString()) { add_next_index_stringl(phpArray, (char *) value->ToString(), strlen(value->ToString()), 1); } else if (value->IsObject()) { /*TODO: Implement*/ } else if (value->IsMethod()) { /*TODO: Implement*/ } else if (value->IsList()) { zval *phpValue; AutoPtr<KPHPArrayObject> pl = value->ToList().cast<KPHPArrayObject>(); if (!pl.isNull()) phpValue = pl->ToPHP(); else phpValue = PHPUtils::ToPHPValue(value); add_next_index_zval(phpArray, phpValue); } }