📄 api.cc.svn-base
字号:
return static_cast<int>(result->Number());}int Message::GetStartPosition() { if (IsDeadCheck("v8::Message::GetStartPosition()")) return 0; HandleScope scope; i::Handle<i::JSObject> data_obj = Utils::OpenHandle(this); return static_cast<int>(GetProperty(data_obj, "startPos")->Number());}int Message::GetEndPosition() { if (IsDeadCheck("v8::Message::GetEndPosition()")) return 0; HandleScope scope; i::Handle<i::JSObject> data_obj = Utils::OpenHandle(this); return static_cast<int>(GetProperty(data_obj, "endPos")->Number());}int Message::GetStartColumn() { if (IsDeadCheck("v8::Message::GetStartColumn()")) return 0; HandleScope scope; i::Handle<i::JSObject> data_obj = Utils::OpenHandle(this); EXCEPTION_PREAMBLE(); i::Handle<i::Object> start_col_obj = CallV8HeapFunction( "GetPositionInLine", data_obj, &has_pending_exception); EXCEPTION_BAILOUT_CHECK(0); return static_cast<int>(start_col_obj->Number());}int Message::GetEndColumn() { if (IsDeadCheck("v8::Message::GetEndColumn()")) return 0; HandleScope scope; i::Handle<i::JSObject> data_obj = Utils::OpenHandle(this); EXCEPTION_PREAMBLE(); i::Handle<i::Object> start_col_obj = CallV8HeapFunction( "GetPositionInLine", data_obj, &has_pending_exception); EXCEPTION_BAILOUT_CHECK(0); int start = static_cast<int>(GetProperty(data_obj, "startPos")->Number()); int end = static_cast<int>(GetProperty(data_obj, "endPos")->Number()); return static_cast<int>(start_col_obj->Number()) + (end - start);}Local<String> Message::GetSourceLine() { ON_BAILOUT("v8::Message::GetSourceLine()", return Local<String>()); HandleScope scope; EXCEPTION_PREAMBLE(); i::Handle<i::Object> result = CallV8HeapFunction("GetSourceLine", Utils::OpenHandle(this), &has_pending_exception); EXCEPTION_BAILOUT_CHECK(Local<v8::String>()); if (result->IsString()) { return scope.Close(Utils::ToLocal(i::Handle<i::String>::cast(result))); } else { return Local<String>(); }}char* Message::GetUnderline(char* source_line, char underline_char) { if (IsDeadCheck("v8::Message::GetUnderline()")) return 0; HandleScope scope; i::Handle<i::JSObject> data_obj = Utils::OpenHandle(this); int start_pos = static_cast<int>(GetProperty(data_obj, "startPos")->Number()); int end_pos = static_cast<int>(GetProperty(data_obj, "endPos")->Number()); EXCEPTION_PREAMBLE(); i::Handle<i::Object> start_col_obj = CallV8HeapFunction( "GetPositionInLine", data_obj, &has_pending_exception); EXCEPTION_BAILOUT_CHECK(0); int start_col = static_cast<int>(start_col_obj->Number()); int end_col = start_col + (end_pos - start_pos); // Any tabs before or between the selected columns have to be // expanded into spaces. We assume that a tab character advances // the cursor up until the next 8-character boundary and at least // one character. int real_start_col = 0; for (int i = 0; i < start_col; i++) { real_start_col++; if (source_line[i] == '\t') { real_start_col++; while (real_start_col % 8 != 0) real_start_col++; } } int real_end_col = real_start_col; for (int i = start_col; i < end_col; i++) { real_end_col++; if (source_line[i] == '\t') { while (real_end_col % 8 != 0) real_end_col++; } } char* result = i::NewArray<char>(real_end_col + 1); for (int i = 0; i < real_start_col; i++) result[i] = ' '; for (int i = real_start_col; i < real_end_col; i++) result[i] = underline_char; result[real_end_col] = '\0'; return result;}void Message::PrintCurrentStackTrace(FILE* out) { if (IsDeadCheck("v8::Message::PrintCurrentStackTrace()")) return; i::Top::PrintCurrentStackTrace(out);}// --- D a t a ---bool Value::IsUndefined() { if (IsDeadCheck("v8::Value::IsUndefined()")) return false; return Utils::OpenHandle(this)->IsUndefined();}bool Value::IsNull() { if (IsDeadCheck("v8::Value::IsNull()")) return false; return Utils::OpenHandle(this)->IsNull();}bool Value::IsTrue() { if (IsDeadCheck("v8::Value::IsTrue()")) return false; return Utils::OpenHandle(this)->IsTrue();}bool Value::IsFalse() { if (IsDeadCheck("v8::Value::IsFalse()")) return false; return Utils::OpenHandle(this)->IsFalse();}bool Value::IsFunction() { if (IsDeadCheck("v8::Value::IsFunction()")) return false; return Utils::OpenHandle(this)->IsJSFunction();}bool Value::IsString() { if (IsDeadCheck("v8::Value::IsString()")) return false; return Utils::OpenHandle(this)->IsString();}bool Value::IsArray() { if (IsDeadCheck("v8::Value::IsArray()")) return false; return Utils::OpenHandle(this)->IsJSArray();}bool Value::IsObject() { if (IsDeadCheck("v8::Value::IsObject()")) return false; return Utils::OpenHandle(this)->IsJSObject();}bool Value::IsNumber() { if (IsDeadCheck("v8::Value::IsNumber()")) return false; return Utils::OpenHandle(this)->IsNumber();}bool Value::IsBoolean() { if (IsDeadCheck("v8::Value::IsBoolean()")) return false; return Utils::OpenHandle(this)->IsBoolean();}bool Value::IsExternal() { if (IsDeadCheck("v8::Value::IsExternal()")) return false; return Utils::OpenHandle(this)->IsProxy();}bool Value::IsInt32() { if (IsDeadCheck("v8::Value::IsInt32()")) return false; i::Handle<i::Object> obj = Utils::OpenHandle(this); if (obj->IsSmi()) return true; if (obj->IsNumber()) { double value = obj->Number(); return i::FastI2D(i::FastD2I(value)) == value; } return false;}Local<String> Value::ToString() { if (IsDeadCheck("v8::Value::ToString()")) return Local<String>(); LOG_API("ToString"); i::Handle<i::Object> obj = Utils::OpenHandle(this); i::Handle<i::Object> str; if (obj->IsString()) { str = obj; } else { EXCEPTION_PREAMBLE(); str = i::Execution::ToString(obj, &has_pending_exception); EXCEPTION_BAILOUT_CHECK(Local<String>()); } return Local<String>(ToApi<String>(str));}Local<String> Value::ToDetailString() { if (IsDeadCheck("v8::Value::ToDetailString()")) return Local<String>(); LOG_API("ToDetailString"); i::Handle<i::Object> obj = Utils::OpenHandle(this); i::Handle<i::Object> str; if (obj->IsString()) { str = obj; } else { EXCEPTION_PREAMBLE(); str = i::Execution::ToDetailString(obj, &has_pending_exception); EXCEPTION_BAILOUT_CHECK(Local<String>()); } return Local<String>(ToApi<String>(str));}Local<v8::Object> Value::ToObject() { if (IsDeadCheck("v8::Value::ToObject()")) return Local<v8::Object>(); LOG_API("ToObject"); i::Handle<i::Object> obj = Utils::OpenHandle(this); i::Handle<i::Object> val; if (obj->IsJSObject()) { val = obj; } else { EXCEPTION_PREAMBLE(); val = i::Execution::ToObject(obj, &has_pending_exception); EXCEPTION_BAILOUT_CHECK(Local<v8::Object>()); } return Local<v8::Object>(ToApi<Object>(val));}Local<Boolean> Value::ToBoolean() { if (IsDeadCheck("v8::Value::ToBoolean()")) return Local<Boolean>(); LOG_API("ToBoolean"); i::Handle<i::Object> obj = Utils::OpenHandle(this); i::Handle<i::Object> val = obj->IsBoolean() ? obj : i::Execution::ToBoolean(obj); return Local<Boolean>(ToApi<Boolean>(val));}Local<Number> Value::ToNumber() { if (IsDeadCheck("v8::Value::ToNumber()")) return Local<Number>(); LOG_API("ToNumber"); i::Handle<i::Object> obj = Utils::OpenHandle(this); i::Handle<i::Object> num; if (obj->IsNumber()) { num = obj; } else { EXCEPTION_PREAMBLE(); num = i::Execution::ToNumber(obj, &has_pending_exception); EXCEPTION_BAILOUT_CHECK(Local<Number>()); } return Local<Number>(ToApi<Number>(num));}Local<Integer> Value::ToInteger() { if (IsDeadCheck("v8::Value::ToInteger()")) return Local<Integer>(); LOG_API("ToInteger"); i::Handle<i::Object> obj = Utils::OpenHandle(this); i::Handle<i::Object> num; if (obj->IsSmi()) { num = obj; } else { EXCEPTION_PREAMBLE(); num = i::Execution::ToInteger(obj, &has_pending_exception); EXCEPTION_BAILOUT_CHECK(Local<Integer>()); } return Local<Integer>(ToApi<Integer>(num));}External* External::Cast(v8::Value* that) { if (IsDeadCheck("v8::External::Cast()")) return 0; i::Handle<i::Object> obj = Utils::OpenHandle(that); ApiCheck(obj->IsProxy(), "v8::External::Cast()", "Could not convert to external"); return static_cast<External*>(that);}v8::Object* v8::Object::Cast(Value* that) { if (IsDeadCheck("v8::Object::Cast()")) return 0; i::Handle<i::Object> obj = Utils::OpenHandle(that); ApiCheck(obj->IsJSObject(), "v8::Object::Cast()", "Could not convert to object"); return static_cast<v8::Object*>(that);}v8::Function* v8::Function::Cast(Value* that) { if (IsDeadCheck("v8::Function::Cast()")) return 0; i::Handle<i::Object> obj = Utils::OpenHandle(that); ApiCheck(obj->IsJSFunction(), "v8::Function::Cast()", "Could not convert to function"); return static_cast<v8::Function*>(that);}v8::String* v8::String::Cast(v8::Value* that) { if (IsDeadCheck("v8::String::Cast()")) return 0; i::Handle<i::Object> obj = Utils::OpenHandle(that); ApiCheck(obj->IsString(), "v8::String::Cast()", "Could not convert to string"); return static_cast<v8::String*>(that);}v8::Number* v8::Number::Cast(v8::Value* that) { if (IsDeadCheck("v8::Number::Cast()")) return 0; i::Handle<i::Object> obj = Utils::OpenHandle(that); ApiCheck(obj->IsNumber(), "v8::Number::Cast()", "Could not convert to number"); return static_cast<v8::Number*>(that);}v8::Integer* v8::Integer::Cast(v8::Value* that) { if (IsDeadCheck("v8::Integer::Cast()")) return 0; i::Handle<i::Object> obj = Utils::OpenHandle(that); ApiCheck(obj->IsNumber(), "v8::Integer::Cast()", "Could not convert to number"); return static_cast<v8::Integer*>(that);}v8::Array* v8::Array::Cast(Value* that) { if (IsDeadCheck("v8::Array::Cast()")) return 0; i::Handle<i::Object> obj = Utils::OpenHandle(that); ApiCheck(obj->IsJSArray(), "v8::Array::Cast()", "Could not convert to array"); return static_cast<v8::Array*>(that);}bool Value::BooleanValue() { if (IsDeadCheck("v8::Value::BooleanValue()")) return false; LOG_API("BooleanValue"); i::Handle<i::Object> obj = Utils::OpenHandle(this); i::Handle<i::Object> value = obj->IsBoolean() ? obj : i::Execution::ToBoolean(obj); return value->IsTrue();}double Value::NumberValue() { if (IsDeadCheck("v8::Value::NumberValue()")) return i::OS::nan_value(); LOG_API("NumberValue"); i::Handle<i::Object> obj = Utils::OpenHandle(this); i::Handle<i::Object> num; if (obj->IsNumber()) { num = obj; } else { EXCEPTION_PREAMBLE(); num = i::Execution::ToNumber(obj, &has_pending_exception); EXCEPTION_BAILOUT_CHECK(i::OS::nan_value()); } return num->Number();}int64_t Value::IntegerValue() { if (IsDeadCheck("v8::Value::IntegerValue()")) return 0; LOG_API("IntegerValue"); i::Handle<i::Object> obj = Utils::OpenHandle(this); i::Handle<i::Object> num; if (obj->IsNumber()) { num = obj; } else { EXCEPTION_PREAMBLE(); num = i::Execution::ToInteger(obj, &has_pending_exception); EXCEPTION_BAILOUT_CHECK(0); } if (num->IsSmi()) { return i::Smi::cast(*num)->value(); } else { return static_cast<int64_t>(num->Number()); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -