From f73ef91b9ceb619d8489773d80c2aca555879495 Mon Sep 17 00:00:00 2001 From: kumavis Date: Thu, 10 Nov 2016 21:41:55 -0800 Subject: [PATCH] parseSignature - fix no args case Fixes #35 --- lib/index.js | 29 ++++++++++++----------------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/lib/index.js b/lib/index.js index 1af16d5..82eceb4 100644 --- a/lib/index.js +++ b/lib/index.js @@ -76,27 +76,22 @@ function parseNumber (arg) { } } +// someMethod() // someMethod(bytes,uint) // someMethod(bytes,uint):(boolean) -function parseSignature (sig) { - var tmp = /^(\w+)\((.+)\)$/.exec(sig) - if (tmp.length !== 3) { +function parseSignature (sigString) { + var methodEndIndex = sigString.indexOf('(') + if (methodEndIndex === -1) { throw new Error('Invalid method signature') } - - var args = /^(.+)\):\((.+)$/.exec(tmp[2]) - - if (args !== null && args.length === 3) { - return { - method: tmp[1], - args: args[1].split(','), - retargs: args[2].split(',') - } - } else { - return { - method: tmp[1], - args: tmp[2].split(',') - } + var methodName = sigString.slice(0,methodEndIndex) + var allArgs = sigString.slice(methodEndIndex+1,-1) + var [ inputArgs, outputArgs ] = allArgs.split(':') + + return { + method: methodName, + args: (inputArgs ? inputArgs.split(',') : []), + retargs: (outputArgs ? outputArgs.split(',') : null), } }