Private Function ParseParameters(meth as RBMemberMethod) As ParameterDefinition() const kStateDefault = 0 const kStateLookingForType = 1 const kStateLookingForArrayDimensions = 4 const kStateDefaultValue = 3 const kStateReset = 9 dim chars() as string = meth.parameters.split( "" ) dim buffer as string dim results() as ParameterDefinition dim item as new ParameterDefinition() dim state as integer dim inQuotes as boolean for i as integer = 0 to ubound( chars ) + 1 dim char as string if i <= ubound( chars ) then _ char = chars( i ) select case state case kStateReset // reset for the next param results.append( item ) item = new ParameterDefinition() state = kStateDefault buffer = "" inQuotes = False i = i - 1 continue for i case kStateDefault if char = " " or char = "(" then if buffer = "as" then state = kStateLookingForType elseif buffer = "optional" then item.isOptional = True elseif buffer = "byref" then item.isByref = True elseif buffer = "paramarray" then item.isParamarray = True elseif buffer = "assigns" then item.isAssigns = True elseif buffer = "extends" then item.isExtends = True elseif buffer = "byval" then item.isByref = False elseif buffer <> "" then item.name = buffer end if buffer = "" if char = "(" then state = kStateLookingForArrayDimensions item.dimensions = 1 end if continue for i end if buffer = buffer + char case kStateLookingForArrayDimensions // valid chars for state: " ", ")", "," if char = ")" then _ state = kStateDefault if char = "," then _ item.dimensions = item.dimensions + 1 case kStateLookingForType if ( char = " " or char = "," or char = "=" or char = "" ) and buffer <> "" then item.type = buffer buffer = "" end if if char = "," then state = kStateReset continue for i end if if char = "=" then state = kStateDefaultValue continue for i end if if char = " " or char = "" then _ continue for i buffer = buffer + char case kStateDefaultValue if char = " " and not inQuotes then _ continue for i if ( char = "," and not inQuotes ) or char = "" then item.defaultValue = buffer item.isOptional = True state = kStateReset continue for i end if if char = """" then inQuotes = not inQuotes continue for i end if buffer = buffer + char end select next results.append( item ) return results End Function