diff options
author | Rohan Prinja <rohan@cs.unc.edu> | 2016-10-28 21:24:05 -0400 |
---|---|---|
committer | Rohan Prinja <rohan.prinja@gmail.com> | 2016-10-30 20:35:13 -0400 |
commit | 11f08395072e420bf43fddc5ffc9ce41d1cb1107 (patch) | |
tree | 009bfd15d9a789049c60c09bbc9bbeb6446d2260 | |
parent | f7b5fae91b212345bc8ce462cc700f4619e2a708 (diff) |
change return type of Comment::get_tag_attr_{name,value} to Option<String>
-rwxr-xr-x | src/clang.rs | 24 | ||||
-rw-r--r-- | src/ir/annotations.rs | 17 |
2 files changed, 27 insertions, 14 deletions
diff --git a/src/clang.rs b/src/clang.rs index c0934055..63bd5b91 100755 --- a/src/clang.rs +++ b/src/clang.rs @@ -817,17 +817,29 @@ impl Comment { /// Given that this comment is an HTML start tag, get the `idx`th /// attribute's name. - pub fn get_tag_attr_name(&self, idx: c_uint) -> String { - unsafe { - String_ { x: clang_HTMLStartTag_getAttrName(self.x, idx) }.to_string() + pub fn get_tag_attr_name(&self, idx: c_uint) -> Option<String> { + if idx >= self.get_num_tag_attrs() { + None + } else { + unsafe { + Some(String_ { + x: clang_HTMLStartTag_getAttrName(self.x, idx) + }.to_string()) + } } } /// Given that this comment is an HTML start tag, get the `idx`th /// attribute's value. - pub fn get_tag_attr_value(&self, idx: c_uint) -> String { - unsafe { - String_ { x: clang_HTMLStartTag_getAttrValue(self.x, idx) }.to_string() + pub fn get_tag_attr_value(&self, idx: c_uint) -> Option<String> { + if idx >= self.get_num_tag_attrs() { + None + } else { + unsafe { + Some(String_ { + x: clang_HTMLStartTag_getAttrValue(self.x, idx) + }.to_string()) + } } } } diff --git a/src/ir/annotations.rs b/src/ir/annotations.rs index f0d9715e..c5adcd87 100644 --- a/src/ir/annotations.rs +++ b/src/ir/annotations.rs @@ -134,19 +134,20 @@ impl Annotations { if comment.kind() == CXComment_HTMLStartTag && comment.get_tag_name() == "div" && comment.get_num_tag_attrs() > 1 && - comment.get_tag_attr_name(0) == "rustbindgen" { + comment.get_tag_attr_name(0).as_ref().map(|s| s.as_str()) + == Some("rustbindgen") { *matched = true; for i in 0..comment.get_num_tag_attrs() { - let value = comment.get_tag_attr_value(i); - let name = comment.get_tag_attr_name(i); - match name.as_str() { + let value_opt = comment.get_tag_attr_value(i); + match comment.get_tag_attr_name(i).unwrap().as_str() { "opaque" => self.opaque = true, "hide" => self.hide = true, "nocopy" => self.disallow_copy = true, - "replaces" => self.use_instead_of = Some(value), - "private" => self.private_fields = Some(value != "false"), - "accessor" - => self.accessor_kind = Some(parse_accessor(&value)), + "replaces" => self.use_instead_of = value_opt, + "private" => self.private_fields = value_opt.map(|v| + v != "false"), + "accessor" => self.accessor_kind = value_opt.map(|v| + parse_accessor(&v)), _ => {}, } } |