bool Object::Set(Handle<Value> key, Handle<Value> value, PropertyAttribute attribs) { // TODO: use String::Value String::AsciiValue k(key); jsval v = value->native(); if (!JS_SetProperty(cx(), *this, *k, &v)) { TryCatch::CheckForException(); return false; } if (key->IsUint32()) return true; uintN js_attribs = 0; if (attribs & ReadOnly) { js_attribs |= JSPROP_READONLY; } if (!(attribs & DontEnum)) { js_attribs |= JSPROP_ENUMERATE; } if (attribs & DontDelete) { js_attribs |= JSPROP_PERMANENT; } JSBool wasFound; return JS_SetPropertyAttributes(cx(), *this, *k, js_attribs, &wasFound); }
int Conv::GetNaturalType(Handle<Value> val) { if(val.IsEmpty()) return TYPE_INVALID; if(val->IsUndefined()) return TYPE_UNDEFINED; if(val->IsNull()) return TYPE_NULL; if(val->IsBoolean() || val->IsBooleanObject()) return TYPE_BOOL; if(val->IsInt32()) return TYPE_INT; if(val->IsUint32()) return TYPE_LONG; if(val->IsNumber() || val->IsNumberObject()) return TYPE_DOUBLE; if(val->IsString() || val->IsStringObject()) return TYPE_STRING; return GetNaturalType(Handle<Object>::Cast(val)); }
int applyUint32Setting(int (*f)(MDB_env *, T), MDB_env* e, Local<Object> options, MDB_dbi dflt, const char* keyName) { int rc; const Handle<Value> value = options->Get(String::NewSymbol(keyName)); if (value->IsUint32()) { rc = f(e, value->Uint32Value()); } else { rc = f(e, dflt); } return rc; }
VALUE rr_v82rb(Handle<Value> value) { if (value.IsEmpty()) { return rr_v8_value_empty(); } if (value->IsUndefined() || value->IsNull()) { return Qnil; } if (value->IsExternal()) { return rr_reflect_v8_external(value); } if (value->IsUint32()) { return UINT2NUM(value->Uint32Value()); } if (value->IsInt32()) { return INT2FIX(value->Int32Value()); } if (value->IsBoolean()) { return value->BooleanValue() ? Qtrue : Qfalse; } if (value->IsNumber()) { return rb_float_new(value->NumberValue()); } if (value->IsString()) { return rr_reflect_v8_string(value); } if (value->IsFunction()) { return rr_reflect_v8_function(value); } if (value->IsArray()) { return rr_reflect_v8_array(value); } if (value->IsDate()) { return rr_reflect_v8_date(value); } if (value->IsObject()) { return rr_reflect_v8_object(value); } return rr_wrap_v8_value(value); }
jsvalue JsEngine::AnyFromV8(Handle<Value> value, Handle<Object> thisArg) { jsvalue v; // Initialize to a generic error. v.type = JSVALUE_TYPE_UNKNOWN_ERROR; v.length = 0; v.value.str = 0; if (value->IsNull() || value->IsUndefined()) { v.type = JSVALUE_TYPE_NULL; } else if (value->IsBoolean()) { v.type = JSVALUE_TYPE_BOOLEAN; v.value.i32 = value->BooleanValue() ? 1 : 0; } else if (value->IsInt32()) { v.type = JSVALUE_TYPE_INTEGER; v.value.i32 = value->Int32Value(); } else if (value->IsUint32()) { v.type = JSVALUE_TYPE_INDEX; v.value.i64 = value->Uint32Value(); } else if (value->IsNumber()) { v.type = JSVALUE_TYPE_NUMBER; v.value.num = value->NumberValue(); } else if (value->IsString()) { v = StringFromV8(value); } else if (value->IsDate()) { v.type = JSVALUE_TYPE_DATE; v.value.num = value->NumberValue(); } else if (value->IsArray()) { Handle<Array> object = Handle<Array>::Cast(value->ToObject()); v.length = object->Length(); jsvalue* array = new jsvalue[v.length]; if (array != NULL) { for(int i = 0; i < v.length; i++) { array[i] = AnyFromV8(object->Get(i)); } v.type = JSVALUE_TYPE_ARRAY; v.value.arr = array; } } else if (value->IsFunction()) { Handle<Function> function = Handle<Function>::Cast(value); jsvalue* array = new jsvalue[2]; if (array != NULL) { array[0].value.ptr = new Persistent<Object>(Persistent<Function>::New(function)); array[0].length = 0; array[0].type = JSVALUE_TYPE_WRAPPED; if (!thisArg.IsEmpty()) { array[1].value.ptr = new Persistent<Object>(Persistent<Object>::New(thisArg)); array[1].length = 0; array[1].type = JSVALUE_TYPE_WRAPPED; } else { array[1].value.ptr = NULL; array[1].length = 0; array[1].type = JSVALUE_TYPE_NULL; } v.type = JSVALUE_TYPE_FUNCTION; v.value.arr = array; } } else if (value->IsObject()) { Handle<Object> obj = Handle<Object>::Cast(value); if (obj->InternalFieldCount() == 1) v = ManagedFromV8(obj); else v = WrappedFromV8(obj); } return v; }
/* DESCRIPTION Processing in binds PARAMETERS: Handle value, bind struct, eBaton struct */ void Connection::GetInBindParams (Handle<Value> v8val, Bind* bind, eBaton* executeBaton, BindType type) { bind->ind = 0; if(v8val->IsUndefined() || v8val->IsNull()) { bind->value = NULL; bind->ind = -1; bind->type = dpi::DpiVarChar; } else if(v8val->IsString()) { if( bind->type && bind->type != DATA_STR ) { executeBaton->error= NJSMessages::getErrorMsg( errBindValueAndTypeMismatch, 2); goto exitGetInBindParams; } v8::String::Utf8Value str(v8val->ToString()); bind->type = dpi::DpiVarChar; if(type == BIND_INOUT) { bind->len = str.length(); } else // IN { bind->maxSize = bind->len = str.length(); } DPI_SZ_TYPE size = (bind->maxSize >= bind->len ) ? bind->maxSize : bind->len; if(size) { bind->value = (char*)malloc(size); if(str.length()) memcpy(bind->value, *str, str.length()); } } else if(v8val->IsInt32()) { if( bind->type && bind->type != DATA_NUM ) { executeBaton->error= NJSMessages::getErrorMsg( errBindValueAndTypeMismatch, 2); goto exitGetInBindParams; } bind->type = dpi::DpiInteger; bind->maxSize = bind->len = sizeof(int); bind->value = (int*)malloc(bind->len); *(int*)(bind->value) = v8val->ToInt32()->Value(); } else if(v8val->IsUint32()) { if( bind->type && bind->type != DATA_NUM ) { executeBaton->error= NJSMessages::getErrorMsg( errBindValueAndTypeMismatch, 2); goto exitGetInBindParams; } bind->type = dpi::DpiUnsignedInteger; bind->maxSize = bind->len = sizeof(unsigned int); bind->value = (unsigned int*)malloc(bind->len); *(unsigned int*)(bind->value) = v8val->ToUint32()->Value(); } else if(v8val->IsNumber()) { if( bind->type && bind->type != DATA_NUM ) { executeBaton->error= NJSMessages::getErrorMsg(errBindValueAndTypeMismatch, 2); goto exitGetInBindParams; } bind->type = dpi::DpiDouble; bind->maxSize = bind->len = sizeof(double); bind->value = (double*)malloc(bind->len); *(double*)(bind->value) = v8val->NumberValue(); } else if(v8val->IsDate ()) { if( bind->type && bind->type != DATA_DATE ) { executeBaton->error= NJSMessages::getErrorMsg(errBindValueAndTypeMismatch, 2); goto exitGetInBindParams; } /* This has to be allocated after stmt is initialized */ bind->dttmarr = NULL ; bind->extvalue = (long double *) malloc (sizeof ( long double ) ); bind->value = (long double *)malloc (sizeof ( long double )); bind->type = dpi::DpiTimestampLTZ; bind->len = 0; bind->maxSize = 0; /* Convert v8::Date value to long double */ Connection::v8Date2OraDate ( v8val, bind); } else { executeBaton->error= NJSMessages::getErrorMsg(errInvalidBindDataType,2); goto exitGetInBindParams; } executeBaton->binds.push_back(bind); exitGetInBindParams: ; }