1- /* auto-generated on 2023-04-17 12:20:41 -0400. Do not edit! */
1+ /* auto-generated on 2023-04-20 18:39:35 -0400. Do not edit! */
22/* begin file src/ada.cpp */
33#include "ada.h"
44/* begin file src/checkers.cpp */
@@ -10501,18 +10501,18 @@ ada_unused std::string get_state(ada::state s) {
1050110501 }
1050210502}
1050310503
10504- ada_really_inline std::optional<std::string_view> prune_fragment (
10504+ ada_really_inline std::optional<std::string_view> prune_hash (
1050510505 std::string_view& input) noexcept {
1050610506 // compiles down to 20--30 instructions including a class to memchr (C
1050710507 // function). this function should be quite fast.
1050810508 size_t location_of_first = input.find('#');
1050910509 if (location_of_first == std::string_view::npos) {
1051010510 return std::nullopt;
1051110511 }
10512- std::string_view fragment = input;
10513- fragment .remove_prefix(location_of_first + 1);
10512+ std::string_view hash = input;
10513+ hash .remove_prefix(location_of_first + 1);
1051410514 input.remove_suffix(input.size() - location_of_first);
10515- return fragment ;
10515+ return hash ;
1051610516}
1051710517
1051810518ada_really_inline bool shorten_path(std::string& path,
@@ -10523,9 +10523,9 @@ ada_really_inline bool shorten_path(std::string& path,
1052310523 // If url’s scheme is "file", path’s size is 1, and path[0] is a normalized
1052410524 // Windows drive letter, then return.
1052510525 if (type == ada::scheme::type::FILE &&
10526- first_delimiter == std::string_view::npos) {
10526+ first_delimiter == std::string_view::npos && !path.empty() ) {
1052710527 if (checkers::is_normalized_windows_drive_letter(
10528- std::string_view (path.data() + 1, first_delimiter - 1))) {
10528+ helpers::substring (path, 1))) {
1052910529 return false;
1053010530 }
1053110531 }
@@ -10547,9 +10547,9 @@ ada_really_inline bool shorten_path(std::string_view& path,
1054710547 // If url’s scheme is "file", path’s size is 1, and path[0] is a normalized
1054810548 // Windows drive letter, then return.
1054910549 if (type == ada::scheme::type::FILE &&
10550- first_delimiter == std::string_view::npos) {
10550+ first_delimiter == std::string_view::npos && !path.empty() ) {
1055110551 if (checkers::is_normalized_windows_drive_letter(
10552- std::string_view (path.data() + 1, first_delimiter - 1))) {
10552+ helpers::substring (path, 1))) {
1055310553 return false;
1055410554 }
1055510555 }
@@ -10998,8 +10998,8 @@ ada_really_inline void strip_trailing_spaces_from_opaque_path(
1099810998 url_type& url) noexcept {
1099910999 ada_log("helpers::strip_trailing_spaces_from_opaque_path");
1100011000 if (!url.has_opaque_path) return;
11001- if (url.base_fragment_has_value ()) return;
11002- if (url.base_search_has_value ()) return;
11001+ if (url.has_hash ()) return;
11002+ if (url.has_search ()) return;
1100311003
1100411004 auto path = std::string(url.get_pathname());
1100511005 while (!path.empty() && path.back() == ' ') {
@@ -11451,7 +11451,7 @@ ada_really_inline bool url::parse_scheme(const std::string_view input) {
1145111451
1145211452 // If url includes credentials or has a non-null port, and buffer is
1145311453 // "file", then return.
11454- if ((includes_credentials () || port.has_value()) &&
11454+ if ((has_credentials () || port.has_value()) &&
1145511455 parsed_type == ada::scheme::type::FILE) {
1145611456 return true;
1145711457 }
@@ -11496,7 +11496,7 @@ ada_really_inline bool url::parse_scheme(const std::string_view input) {
1149611496
1149711497 // If url includes credentials or has a non-null port, and buffer is
1149811498 // "file", then return.
11499- if ((includes_credentials () || port.has_value()) && _buffer == "file") {
11499+ if ((has_credentials () || port.has_value()) && _buffer == "file") {
1150011500 return true;
1150111501 }
1150211502
@@ -11648,7 +11648,7 @@ std::string url::to_string() const {
1164811648 answer.append("\t\"protocol\":\"");
1164911649 helpers::encode_json(get_protocol(), back);
1165011650 answer.append("\",\n");
11651- if (includes_credentials ()) {
11651+ if (has_credentials ()) {
1165211652 answer.append("\t\"username\":\"");
1165311653 helpers::encode_json(username, back);
1165411654 answer.append("\",\n");
@@ -11671,16 +11671,16 @@ std::string url::to_string() const {
1167111671 answer.append("\",\n");
1167211672 answer.append("\t\"opaque path\":");
1167311673 answer.append((has_opaque_path ? "true" : "false"));
11674- if (base_search_has_value ()) {
11674+ if (has_search ()) {
1167511675 answer.append(",\n");
1167611676 answer.append("\t\"query\":\"");
1167711677 helpers::encode_json(query.value(), back);
1167811678 answer.append("\"");
1167911679 }
11680- if (fragment .has_value()) {
11680+ if (hash .has_value()) {
1168111681 answer.append(",\n");
11682- answer.append("\t\"fragment \":\"");
11683- helpers::encode_json(fragment .value(), back);
11682+ answer.append("\t\"hash \":\"");
11683+ helpers::encode_json(hash .value(), back);
1168411684 answer.append("\"");
1168511685 }
1168611686 answer.append("\n}");
@@ -11781,9 +11781,8 @@ namespace ada {
1178111781[[nodiscard]] std::string url::get_hash() const noexcept {
1178211782 // If this’s URL’s fragment is either null or the empty string, then return
1178311783 // the empty string. Return U+0023 (#), followed by this’s URL’s fragment.
11784- return (!fragment.has_value() || (fragment.value().empty()))
11785- ? ""
11786- : "#" + fragment.value();
11784+ return (!hash.has_value() || (hash.value().empty())) ? ""
11785+ : "#" + hash.value();
1178711786}
1178811787
1178911788} // namespace ada
@@ -11839,7 +11838,7 @@ bool url::set_host_or_hostname(const std::string_view input) {
1183911838 // empty string, and either url includes credentials or url’s port is
1184011839 // non-null, return.
1184111840 else if (host_view.empty() &&
11842- (is_special() || includes_credentials () || port.has_value())) {
11841+ (is_special() || has_credentials () || port.has_value())) {
1184311842 return false;
1184411843 }
1184511844
@@ -11939,16 +11938,16 @@ bool url::set_port(const std::string_view input) {
1193911938
1194011939void url::set_hash(const std::string_view input) {
1194111940 if (input.empty()) {
11942- fragment = std::nullopt;
11941+ hash = std::nullopt;
1194311942 helpers::strip_trailing_spaces_from_opaque_path(*this);
1194411943 return;
1194511944 }
1194611945
1194711946 std::string new_value;
1194811947 new_value = input[0] == '#' ? input.substr(1) : input;
1194911948 helpers::remove_ascii_tab_or_newline(new_value);
11950- fragment = unicode::percent_encode(
11951- new_value, ada::character_sets::FRAGMENT_PERCENT_ENCODE);
11949+ hash = unicode::percent_encode(new_value,
11950+ ada::character_sets::FRAGMENT_PERCENT_ENCODE);
1195211951 return;
1195311952}
1195411953
@@ -12014,7 +12013,7 @@ bool url::set_href(const std::string_view input) {
1201412013 port = out->port;
1201512014 path = out->path;
1201612015 query = out->query;
12017- fragment = out->fragment ;
12016+ hash = out->hash ;
1201812017 type = out->type;
1201912018 non_special_scheme = out->non_special_scheme;
1202012019 has_opaque_path = out->has_opaque_path;
@@ -12106,7 +12105,7 @@ result_type parse_url(std::string_view user_input,
1210612105 helpers::trim_c0_whitespace(url_data);
1210712106
1210812107 // Optimization opportunity. Most websites do not have fragment.
12109- std::optional<std::string_view> fragment = helpers::prune_fragment (url_data);
12108+ std::optional<std::string_view> fragment = helpers::prune_hash (url_data);
1211012109 // We add it last so that an implementation like ada::url_aggregator
1211112110 // can append it last to its internal buffer, thus improving performance.
1211212111
@@ -12463,7 +12462,7 @@ result_type parse_url(std::string_view user_input,
1246312462 // Otherwise, if c is not the EOF code point:
1246412463 else if (input_position != input_size) {
1246512464 // Set url’s query to null.
12466- url.clear_base_search ();
12465+ url.clear_search ();
1246712466 if constexpr (result_type_is_ada_url) {
1246812467 // Shorten url’s path.
1246912468 helpers::shorten_path(url.path, url.type);
@@ -12878,7 +12877,7 @@ result_type parse_url(std::string_view user_input,
1287812877 // Otherwise, if c is not the EOF code point:
1287912878 else if (input_position != input_size) {
1288012879 // Set url’s query to null.
12881- url.clear_base_search ();
12880+ url.clear_search ();
1288212881
1288312882 // If the code point substring from pointer to the end of input does
1288412883 // not start with a Windows drive letter, then shorten url’s path.
@@ -12895,11 +12894,7 @@ result_type parse_url(std::string_view user_input,
1289512894 // Otherwise:
1289612895 else {
1289712896 // Set url’s path to an empty list.
12898- if constexpr (result_type_is_ada_url) {
12899- url.path.clear();
12900- } else {
12901- url.clear_base_pathname();
12902- }
12897+ url.clear_pathname();
1290312898 url.has_opaque_path = true;
1290412899 }
1290512900
@@ -13091,8 +13086,7 @@ template <bool has_state_override>
1309113086
1309213087 // If url includes credentials or has a non-null port, and buffer is
1309313088 // "file", then return.
13094- if ((includes_credentials() ||
13095- components.port != url_components::omitted) &&
13089+ if ((has_credentials() || components.port != url_components::omitted) &&
1309613090 parsed_type == ada::scheme::type::FILE) {
1309713091 return true;
1309813092 }
@@ -13115,7 +13109,7 @@ template <bool has_state_override>
1311513109 // If url’s port is url’s scheme’s default port, then set url’s port to
1311613110 // null.
1311713111 if (components.port == urls_scheme_port) {
13118- clear_base_port ();
13112+ clear_port ();
1311913113 }
1312013114 }
1312113115 } else { // slow path
@@ -13135,8 +13129,7 @@ template <bool has_state_override>
1313513129
1313613130 // If url includes credentials or has a non-null port, and buffer is
1313713131 // "file", then return.
13138- if ((includes_credentials() ||
13139- components.port != url_components::omitted) &&
13132+ if ((has_credentials() || components.port != url_components::omitted) &&
1314013133 _buffer == "file") {
1314113134 return true;
1314213135 }
@@ -13158,7 +13151,7 @@ template <bool has_state_override>
1315813151 // If url’s port is url’s scheme’s default port, then set url’s port to
1315913152 // null.
1316013153 if (components.port == urls_scheme_port) {
13161- clear_base_port ();
13154+ clear_port ();
1316213155 }
1316313156 }
1316413157 }
@@ -13339,7 +13332,7 @@ bool url_aggregator::set_port(const std::string_view input) {
1333913332 std::string trimmed(input);
1334013333 helpers::remove_ascii_tab_or_newline(trimmed);
1334113334 if (trimmed.empty()) {
13342- clear_base_port ();
13335+ clear_port ();
1334313336 return true;
1334413337 }
1334513338 // Input should not start with control characters.
@@ -13370,7 +13363,7 @@ bool url_aggregator::set_pathname(const std::string_view input) {
1337013363 if (has_opaque_path) {
1337113364 return false;
1337213365 }
13373- clear_base_pathname ();
13366+ clear_pathname ();
1337413367 parse_path(input);
1337513368 if (checkers::begins_with(input, "//") && !has_authority() &&
1337613369 !has_dash_dot()) {
@@ -13427,7 +13420,7 @@ void url_aggregator::set_search(const std::string_view input) {
1342713420 ADA_ASSERT_TRUE(validate());
1342813421 ADA_ASSERT_TRUE(!helpers::overlaps(input, buffer));
1342913422 if (input.empty()) {
13430- clear_base_search ();
13423+ clear_search ();
1343113424 helpers::strip_trailing_spaces_from_opaque_path(*this);
1343213425 return;
1343313426 }
@@ -13623,15 +13616,15 @@ bool url_aggregator::set_host_or_hostname(const std::string_view input) {
1362313616 // empty string, and either url includes credentials or url’s port is
1362413617 // non-null, return.
1362513618 else if (host_view.empty() &&
13626- (is_special() || includes_credentials () ||
13619+ (is_special() || has_credentials () ||
1362713620 components.port != url_components::omitted)) {
1362813621 return false;
1362913622 }
1363013623
1363113624 // Let host be the result of host parsing host_view with url is not special.
1363213625 if (host_view.empty()) {
1363313626 if (has_hostname()) {
13634- clear_base_hostname (); // easy!
13627+ clear_hostname (); // easy!
1363513628 } else if (has_dash_dot()) {
1363613629 add_authority_slashes_if_needed();
1363713630 delete_dash_dot();
@@ -13657,7 +13650,7 @@ bool url_aggregator::set_host_or_hostname(const std::string_view input) {
1365713650
1365813651 if (new_host.empty()) {
1365913652 // Set url’s host to the empty string.
13660- clear_base_hostname ();
13653+ clear_hostname ();
1366113654 } else {
1366213655 // Let host be the result of host parsing buffer with url is not special.
1366313656 if (!parse_host(new_host)) {
@@ -13669,7 +13662,7 @@ bool url_aggregator::set_host_or_hostname(const std::string_view input) {
1366913662 // If host is "localhost", then set host to the empty string.
1367013663 if (helpers::substring(buffer, components.host_start,
1367113664 components.host_end) == "localhost") {
13672- clear_base_hostname ();
13665+ clear_hostname ();
1367313666 }
1367413667 }
1367513668 ADA_ASSERT_TRUE(validate());
@@ -13836,7 +13829,7 @@ std::string ada::url_aggregator::to_string() const {
1383613829 helpers::encode_json(get_protocol(), back);
1383713830 answer.append("\",\n");
1383813831
13839- if (includes_credentials ()) {
13832+ if (has_credentials ()) {
1384013833 answer.append("\t\"username\":\"");
1384113834 helpers::encode_json(get_username(), back);
1384213835 answer.append("\",\n");
0 commit comments