fix: default param name if not found following memory/calldata (#91)

This commit is contained in:
Rohit Narurkar 2020-10-30 15:45:34 +05:30 committed by GitHub
parent eb26915081
commit d67efc9190
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 19 additions and 1 deletions

View File

@ -103,6 +103,7 @@ fn parse_function(fn_string: &str) -> Result<Function, ParseError> {
// internal args
let args: Vec<&str> = split[1].split(')').collect();
let args: Vec<&str> = args[0].split(", ").collect();
let inputs = args
.into_iter()
.filter(|x| !x.is_empty())
@ -146,7 +147,7 @@ fn parse_param(param: &str) -> Result<Param, ParseError> {
// e.g. uint256[] memory x
let mut name = param.next().unwrap_or_default();
if name == "memory" || name == "calldata" {
name = param.next().ok_or(ParseError::Kind)?;
name = param.next().unwrap_or_default();
}
Ok(Param {
@ -271,6 +272,7 @@ mod tests {
"function foo(uint256[] memory x) external view returns (address)",
"function bar(uint256[] memory x) returns (address)",
"function bar(uint256[] memory x, uint32 y) returns (address, uint256)",
"function foo(address[] memory, bytes memory) returns (bytes memory)",
"function bar(uint256[] memory x)",
"function bar()",
]
@ -280,6 +282,22 @@ mod tests {
});
}
#[test]
fn can_parse_params() {
[
"address x",
"address",
"bytes memory y",
"bytes memory",
"bytes32[] memory",
"bytes32[] memory z",
]
.iter()
.for_each(|x| {
parse_param(x).unwrap();
});
}
#[test]
fn can_read_backslashes() {
parse(&[