Skip to content

Commit

Permalink
[json-schema-compiler] Using T& internally for out params
Browse files Browse the repository at this point in the history
This CL updates the utility functions used internally by the schema
compiler, to make use of reference types when dealing with out params.

Bug: 1415155
Change-Id: I59e8fee5fd227b80bb959aa9c796a0a8ad9e752e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4243560
Commit-Queue: Claudio DeSouza <cdesouza@igalia.com>
Reviewed-by: David Bertoni <dbertoni@chromium.org>
Reviewed-by: Devlin Cronin <rdevlin.cronin@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1121710}
  • Loading branch information
cdesouza-chromium authored and Chromium LUCI CQ committed Mar 24, 2023
1 parent c0339c2 commit db3dda8
Show file tree
Hide file tree
Showing 5 changed files with 110 additions and 105 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -385,7 +385,7 @@ RulesMonitorService::GetSessionRules(const ExtensionId& extension_id) const {
std::vector<api::declarative_net_request::Rule> result;
std::u16string error;
bool populate_result = json_schema_compiler::util::PopulateArrayFromList(
GetSessionRulesValue(extension_id), &result, &error);
GetSessionRulesValue(extension_id), result, &error);
DCHECK(populate_result);
DCHECK(error.empty());
return result;
Expand Down
2 changes: 1 addition & 1 deletion tools/json_schema_compiler/cc_generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -1108,7 +1108,7 @@ def _GeneratePopulateVariableFromValue(self,
failure_value,
is_ptr=is_ptr))
else:
args = ['%(src_var)s.GetList()', '&%(dst_var)s']
args = ['%(src_var)s.GetList()', '%(dst_var)s']
if self._generate_error_messages:
c.Append('std::u16string array_parse_error;')
args.append('&array_parse_error')
Expand Down
2 changes: 1 addition & 1 deletion tools/json_schema_compiler/manifest_parse_util.h
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ bool ParseFromDictionary(const base::Value::Dict& dict,
return false;

bool result = json_schema_compiler::util::PopulateArrayFromList(
value->GetList(), &out, error);
value->GetList(), out, error);
if (!result) {
DCHECK(error_path_reversed);
DCHECK(error_path_reversed->empty());
Expand Down
108 changes: 56 additions & 52 deletions tools/json_schema_compiler/util.cc
Original file line number Diff line number Diff line change
Expand Up @@ -25,119 +25,123 @@ bool ReportError(const base::Value& from,

} // namespace

bool PopulateItem(const base::Value& from, int* out) {
if (out && from.is_int()) {
*out = from.GetInt();
return true;
bool PopulateItem(const base::Value& from, int& out) {
if (!from.is_int()) {
return false;
}
return from.is_int();
out = from.GetInt();
return true;
}

bool PopulateItem(const base::Value& from, int* out, std::u16string* error) {
bool PopulateItem(const base::Value& from, int& out, std::u16string* error) {
if (!PopulateItem(from, out))
return ReportError(from, base::Value::Type::INTEGER, error);
return true;
}

bool PopulateItem(const base::Value& from, bool* out) {
if (out && from.is_bool()) {
*out = from.GetBool();
return true;
bool PopulateItem(const base::Value& from, bool& out) {
if (!from.is_bool()) {
return false;
}
return from.is_bool();
out = from.GetBool();
return true;
}

bool PopulateItem(const base::Value& from, bool* out, std::u16string* error) {
if (!from.is_bool())
bool PopulateItem(const base::Value& from, bool& out, std::u16string* error) {
if (!from.is_bool()) {
return ReportError(from, base::Value::Type::BOOLEAN, error);
if (out)
*out = from.GetBool();
}

out = from.GetBool();
return true;
}

bool PopulateItem(const base::Value& from, double* out) {
absl::optional<double> maybe_double = from.GetIfDouble();
if (maybe_double.has_value()) {
if (out)
*out = maybe_double.value();
return true;
bool PopulateItem(const base::Value& from, double& out) {
if (!from.is_double()) {
return false;
}
return false;
out = from.GetDouble();
return true;
}

bool PopulateItem(const base::Value& from, double* out, std::u16string* error) {
if (!from.is_double())
bool PopulateItem(const base::Value& from, double& out, std::u16string* error) {
if (!from.is_double()) {
return ReportError(from, base::Value::Type::DOUBLE, error);
*out = from.GetDouble();
}

out = from.GetDouble();
return true;
}

bool PopulateItem(const base::Value& from, std::string* out) {
bool PopulateItem(const base::Value& from, std::string& out) {
if (!from.is_string())
return false;
*out = from.GetString();
out = from.GetString();
return true;
}

bool PopulateItem(const base::Value& from,
std::string* out,
std::string& out,
std::u16string* error) {
if (!from.is_string())
if (!from.is_string()) {
return ReportError(from, base::Value::Type::STRING, error);
*out = from.GetString();
}
out = from.GetString();
return true;
}

bool PopulateItem(const base::Value& from, std::vector<uint8_t>* out) {
if (!from.is_blob())
bool PopulateItem(const base::Value& from, std::vector<uint8_t>& out) {
if (!from.is_blob()) {
return false;
*out = from.GetBlob();
}
out = from.GetBlob();
return true;
}

bool PopulateItem(const base::Value& from,
std::vector<uint8_t>* out,
std::vector<uint8_t>& out,
std::u16string* error) {
if (!from.is_blob())
if (!from.is_blob()) {
return ReportError(from, base::Value::Type::BINARY, error);
*out = from.GetBlob();
}
out = from.GetBlob();
return true;
}

bool PopulateItem(const base::Value& from, base::Value* out) {
*out = from.Clone();
bool PopulateItem(const base::Value& from, base::Value& out) {
out = from.Clone();
return true;
}

bool PopulateItem(const base::Value& from,
base::Value* out,
base::Value& out,
std::u16string* error) {
*out = from.Clone();
out = from.Clone();
return true;
}

void AddItemToList(const int from, base::Value::List* out) {
out->Append(from);
void AddItemToList(const int from, base::Value::List& out) {
out.Append(from);
}

void AddItemToList(const bool from, base::Value::List* out) {
out->Append(from);
void AddItemToList(const bool from, base::Value::List& out) {
out.Append(from);
}

void AddItemToList(const double from, base::Value::List* out) {
out->Append(from);
void AddItemToList(const double from, base::Value::List& out) {
out.Append(from);
}

void AddItemToList(const std::string& from, base::Value::List* out) {
out->Append(from);
void AddItemToList(const std::string& from, base::Value::List& out) {
out.Append(from);
}

void AddItemToList(const std::vector<uint8_t>& from, base::Value::List* out) {
out->Append(base::Value(from));
void AddItemToList(const std::vector<uint8_t>& from, base::Value::List& out) {
out.Append(base::Value(from));
}

void AddItemToList(const base::Value& from, base::Value::List* out) {
out->Append(from.Clone());
void AddItemToList(const base::Value& from, base::Value::List& out) {
out.Append(from.Clone());
}

} // namespace util
Expand Down
Loading

0 comments on commit db3dda8

Please sign in to comment.