const kStateDefault = 0
const kStateLookingForType = 1
const kStateLookingForArrayDimensions = 4
const kStateDefaultValue = 3
const kStateDefaultValueInQuotes = 5
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 )
dim char as string = 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
else
item.name = buffer
end if
buffer = ""
if char = "(" then _
state = kStateLookingForArrayDimensions
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 = " " and buffer = "" then _
continue for i
if char = " " or char = "," or char = "=" then _
item.type = buffer
if char = "," then
state = kStateReset
continue for i
end if
if char = "=" then _
state = kStateDefaultValue
case kStateDefaultValue
if char = " " then _
continue for i
if char = "," and not inQuotes then
item.defaultValue = buffer
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