| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent dd39422 commit d36127d
4 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -28,10 +28,6 @@ const { | |||
| 28 | 28 | SymbolFor, | |
| 29 | 29 | } = primordials; | |
| 30 | 30 | ||
| 31 | - const { | ||
| 32 | - toUSVString: _toUSVString, | ||
| 33 | - } = internalBinding('url'); | ||
| 34 | - | ||
| 35 | 31 | const { | |
| 36 | 32 | hideStackFrames, | |
| 37 | 33 | codes: { | |
@@ -47,7 +43,8 @@ const { | |||
| 47 | 43 | setHiddenValue, | |
| 48 | 44 | arrow_message_private_symbol: kArrowMessagePrivateSymbolIndex, | |
| 49 | 45 | decorated_private_symbol: kDecoratedPrivateSymbolIndex, | |
| 50 | - sleep: _sleep | ||
| 46 | + sleep: _sleep, | ||
| 47 | + toUSVString: _toUSVString, | ||
| 51 | 48 | } = internalBinding('util'); | |
| 52 | 49 | const { isNativeError } = internalBinding('types'); | |
| 53 | 50 | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -52,9 +52,6 @@ namespace { | |||
| 52 | 52 | // https://url.spec.whatwg.org/#eof-code-point | |
| 53 | 53 | constexpr char kEOL = -1; | |
| 54 | 54 | ||
| 55 | - // Used in ToUSVString(). | ||
| 56 | - constexpr char16_t kUnicodeReplacementCharacter = 0xFFFD; | ||
| 57 | - | ||
| 58 | 55 | // https://url.spec.whatwg.org/#concept-host | |
| 59 | 56 | class URLHost { | |
| 60 | 57 | public: | |
@@ -160,14 +157,6 @@ enum url_error_cb_args { | |||
| 160 | 157 | #undef XX | |
| 161 | 158 | }; | |
| 162 | 159 | ||
| 163 | - #define CHAR_TEST(bits, name, expr) \ | ||
| 164 | - template <typename T> \ | ||
| 165 | - bool name(const T ch) { \ | ||
| 166 | - static_assert(sizeof(ch) >= (bits) / 8, \ | ||
| 167 | - "Character must be wider than " #bits " bits"); \ | ||
| 168 | - return (expr); \ | ||
| 169 | - } | ||
| 170 | - | ||
| 171 | 160 | #define TWO_CHAR_STRING_TEST(bits, name, expr) \ | |
| 172 | 161 | template <typename T> \ | |
| 173 | 162 | bool name(const T ch1, const T ch2) { \ | |
@@ -225,19 +214,8 @@ TWO_CHAR_STRING_TEST(8, IsWindowsDriveLetter, | |||
| 225 | 214 | TWO_CHAR_STRING_TEST(8, IsNormalizedWindowsDriveLetter, | |
| 226 | 215 | (IsASCIIAlpha(ch1) && ch2 == ':')) | |
| 227 | 216 | ||
| 228 | - // If a UTF-16 character is a low/trailing surrogate. | ||
| 229 | - CHAR_TEST(16, IsUnicodeTrail, (ch & 0xFC00) == 0xDC00) | ||
| 230 | - | ||
| 231 | - // If a UTF-16 character is a surrogate. | ||
| 232 | - CHAR_TEST(16, IsUnicodeSurrogate, (ch & 0xF800) == 0xD800) | ||
| 233 | - | ||
| 234 | - // If a UTF-16 surrogate is a low/trailing one. | ||
| 235 | - CHAR_TEST(16, IsUnicodeSurrogateTrail, (ch & 0x400) != 0) | ||
| 236 | - | ||
| 237 | - #undef CHAR_TEST | ||
| 238 | 217 | #undef TWO_CHAR_STRING_TEST | |
| 239 | 218 | ||
| 240 | - | ||
| 241 | 219 | bool BitAt(const uint8_t a[], const uint8_t i) { | |
| 242 | 220 | return !!(a[i >> 3] & (1 << (i & 7))); | |
| 243 | 221 | } | |
@@ -1736,40 +1714,6 @@ void EncodeAuthSet(const FunctionCallbackInfo<Value>& args) { | |||
| 1736 | 1714 | String::NewFromUtf8(env->isolate(), output.c_str()).ToLocalChecked()); | |
| 1737 | 1715 | } | |
| 1738 | 1716 | ||
| 1739 | - void ToUSVString(const FunctionCallbackInfo<Value>& args) { | ||
| 1740 | - Environment* env = Environment::GetCurrent(args); | ||
| 1741 | - CHECK_GE(args.Length(), 2); | ||
| 1742 | - CHECK(args[0]->IsString()); | ||
| 1743 | - CHECK(args[1]->IsNumber()); | ||
| 1744 | - | ||
| 1745 | - TwoByteValue value(env->isolate(), args[0]); | ||
| 1746 | - | ||
| 1747 | - int64_t start = args[1]->IntegerValue(env->context()).FromJust(); | ||
| 1748 | - CHECK_GE(start, 0); | ||
| 1749 | - | ||
| 1750 | - for (size_t i = start; i < value.length(); i++) { | ||
| 1751 | - char16_t c = value[i]; | ||
| 1752 | - if (!IsUnicodeSurrogate(c)) { | ||
| 1753 | - continue; | ||
| 1754 | - } else if (IsUnicodeSurrogateTrail(c) || i == value.length() - 1) { | ||
| 1755 | - value[i] = kUnicodeReplacementCharacter; | ||
| 1756 | - } else { | ||
| 1757 | - char16_t d = value[i + 1]; | ||
| 1758 | - if (IsUnicodeTrail(d)) { | ||
| 1759 | - i++; | ||
| 1760 | - } else { | ||
| 1761 | - value[i] = kUnicodeReplacementCharacter; | ||
| 1762 | - } | ||
| 1763 | - } | ||
| 1764 | - } | ||
| 1765 | - | ||
| 1766 | - args.GetReturnValue().Set( | ||
| 1767 | - String::NewFromTwoByte(env->isolate(), | ||
| 1768 | - *value, | ||
| 1769 | - NewStringType::kNormal, | ||
| 1770 | - value.length()).ToLocalChecked()); | ||
| 1771 | - } | ||
| 1772 | - | ||
| 1773 | 1717 | void DomainToASCII(const FunctionCallbackInfo<Value>& args) { | |
| 1774 | 1718 | Environment* env = Environment::GetCurrent(args); | |
| 1775 | 1719 | CHECK_GE(args.Length(), 1); | |
@@ -1820,7 +1764,6 @@ void Initialize(Local<Object> target, | |||
| 1820 | 1764 | Environment* env = Environment::GetCurrent(context); | |
| 1821 | 1765 | env->SetMethod(target, "parse", Parse); | |
| 1822 | 1766 | env->SetMethodNoSideEffect(target, "encodeAuth", EncodeAuthSet); | |
| 1823 | - env->SetMethodNoSideEffect(target, "toUSVString", ToUSVString); | ||
| 1824 | 1767 | env->SetMethodNoSideEffect(target, "domainToASCII", DomainToASCII); | |
| 1825 | 1768 | env->SetMethodNoSideEffect(target, "domainToUnicode", DomainToUnicode); | |
| 1826 | 1769 | env->SetMethod(target, "setURLConstructor", SetURLConstructor); | |
@@ -1838,7 +1781,6 @@ void Initialize(Local<Object> target, | |||
| 1838 | 1781 | void RegisterExternalReferences(ExternalReferenceRegistry* registry) { | |
| 1839 | 1782 | registry->Register(Parse); | |
| 1840 | 1783 | registry->Register(EncodeAuthSet); | |
| 1841 | - registry->Register(ToUSVString); | ||
| 1842 | 1784 | registry->Register(DomainToASCII); | |
| 1843 | 1785 | registry->Register(DomainToUnicode); | |
| 1844 | 1786 | registry->Register(SetURLConstructor); | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -35,6 +35,18 @@ using v8::String; | |||
| 35 | 35 | using v8::Uint32; | |
| 36 | 36 | using v8::Value; | |
| 37 | 37 | ||
| 38 | + // Used in ToUSVString(). | ||
| 39 | + constexpr char16_t kUnicodeReplacementCharacter = 0xFFFD; | ||
| 40 | + | ||
| 41 | + // If a UTF-16 character is a low/trailing surrogate. | ||
| 42 | + CHAR_TEST(16, IsUnicodeTrail, (ch & 0xFC00) == 0xDC00) | ||
| 43 | + | ||
| 44 | + // If a UTF-16 character is a surrogate. | ||
| 45 | + CHAR_TEST(16, IsUnicodeSurrogate, (ch & 0xF800) == 0xD800) | ||
| 46 | + | ||
| 47 | + // If a UTF-16 surrogate is a low/trailing one. | ||
| 48 | + CHAR_TEST(16, IsUnicodeSurrogateTrail, (ch & 0x400) != 0) | ||
| 49 | + | ||
| 38 | 50 | static void GetOwnNonIndexProperties( | |
| 39 | 51 | const FunctionCallbackInfo<Value>& args) { | |
| 40 | 52 | Environment* env = Environment::GetCurrent(args); | |
@@ -282,6 +294,40 @@ static void IsConstructor(const FunctionCallbackInfo<Value>& args) { | |||
| 282 | 294 | args.GetReturnValue().Set(args[0].As<v8::Function>()->IsConstructor()); | |
| 283 | 295 | } | |
| 284 | 296 | ||
| 297 | + static void ToUSVString(const FunctionCallbackInfo<Value>& args) { | ||
| 298 | + Environment* env = Environment::GetCurrent(args); | ||
| 299 | + CHECK_GE(args.Length(), 2); | ||
| 300 | + CHECK(args[0]->IsString()); | ||
| 301 | + CHECK(args[1]->IsNumber()); | ||
| 302 | + | ||
| 303 | + TwoByteValue value(env->isolate(), args[0]); | ||
| 304 | + | ||
| 305 | + int64_t start = args[1]->IntegerValue(env->context()).FromJust(); | ||
| 306 | + CHECK_GE(start, 0); | ||
| 307 | + | ||
| 308 | + for (size_t i = start; i < value.length(); i++) { | ||
| 309 | + char16_t c = value[i]; | ||
| 310 | + if (!IsUnicodeSurrogate(c)) { | ||
| 311 | + continue; | ||
| 312 | + } else if (IsUnicodeSurrogateTrail(c) || i == value.length() - 1) { | ||
| 313 | + value[i] = kUnicodeReplacementCharacter; | ||
| 314 | + } else { | ||
| 315 | + char16_t d = value[i + 1]; | ||
| 316 | + if (IsUnicodeTrail(d)) { | ||
| 317 | + i++; | ||
| 318 | + } else { | ||
| 319 | + value[i] = kUnicodeReplacementCharacter; | ||
| 320 | + } | ||
| 321 | + } | ||
| 322 | + } | ||
| 323 | + | ||
| 324 | + args.GetReturnValue().Set( | ||
| 325 | + String::NewFromTwoByte(env->isolate(), | ||
| 326 | + *value, | ||
| 327 | + v8::NewStringType::kNormal, | ||
| 328 | + value.length()).ToLocalChecked()); | ||
| 329 | + } | ||
| 330 | + | ||
| 285 | 331 | void RegisterExternalReferences(ExternalReferenceRegistry* registry) { | |
| 286 | 332 | registry->Register(GetHiddenValue); | |
| 287 | 333 | registry->Register(SetHiddenValue); | |
@@ -299,6 +345,7 @@ void RegisterExternalReferences(ExternalReferenceRegistry* registry) { | |||
| 299 | 345 | registry->Register(WeakReference::DecRef); | |
| 300 | 346 | registry->Register(GuessHandleType); | |
| 301 | 347 | registry->Register(IsConstructor); | |
| 348 | + registry->Register(ToUSVString); | ||
| 302 | 349 | } | |
| 303 | 350 | ||
| 304 | 351 | void Initialize(Local<Object> target, | |
@@ -370,6 +417,8 @@ void Initialize(Local<Object> target, | |||
| 370 | 417 | env->SetConstructorFunction(target, "WeakReference", weak_ref); | |
| 371 | 418 | ||
| 372 | 419 | env->SetMethod(target, "guessHandleType", GuessHandleType); | |
| 420 | + | ||
| 421 | + env->SetMethodNoSideEffect(target, "toUSVString", ToUSVString); | ||
| 373 | 422 | } | |
| 374 | 423 | ||
| 375 | 424 | } // namespace util | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -64,6 +64,14 @@ | |||
| 64 | 64 | (((x) & 0x00000000000000FFull) << 56) | |
| 65 | 65 | #endif | |
| 66 | 66 | ||
| 67 | + #define CHAR_TEST(bits, name, expr) \ | ||
| 68 | + template <typename T> \ | ||
| 69 | + bool name(const T ch) { \ | ||
| 70 | + static_assert(sizeof(ch) >= (bits) / 8, \ | ||
| 71 | + "Character must be wider than " #bits " bits"); \ | ||
| 72 | + return (expr); \ | ||
| 73 | + } | ||
| 74 | + | ||
| 67 | 75 | namespace node { | |
| 68 | 76 | ||
| 69 | 77 | template <typename T> | |
| Back | FazBrowse Home | New Git URL |
0 commit comments