All pastes #259516 Raw Edit

Miscellany

public text v1 · immutable
#259516 ·published 2006-11-27 15:06 UTC
rendered paste body
  const kStateDefault = 0
  const kStateName = 1
  const kStateMeta = 2
  const kStateArray = 3
  
  
  dim results() as VariableDefinition
  dim currentItem as new VariableDefinition()
  dim chars() as string = mangledParams.split( "" )
  dim hasType as boolean
  dim state as integer
  
  for i as integer = 0 to ubound( chars )
    dim char as string = chars( i )
    
    select case state
    case kStateDefault
      if char = "&" then
        currentItem.isByref = True
        
      elseif char = "A" then
        state = kStateArray
        
      else
        if hasType then _
        results.append( currentItem )
        
        hasType = True
        currentItem = new VariableDefinition()
        currentItem.type = char
        
        state = kStateMeta
      end if
      
      
    case kStateMeta
      if char = "<" then
        state = kStateName
        
      elseif isNumeric( char ) then
        currentItem.size = currentItem.size * 10 + val( char )
        
      elseif strcomp( char, "A", 0 ) = 0 then
        state = kStateArray
        
      else
        state = kStateDefault
        
        i = i - 1
        
      end if
      
      
    case kStateName
      if char = ">" then
        state = kStateDefault
        
        continue
      end if
      
      currentItem.className = currentItem.className + char
      
      
    case kStateArray
      if isNumeric( char ) then
        currentItem.dimensions = currentItem.dimensions * 10 + val( char )
        
      else
        state = kStateDefault
        i = i - 1
        
      end if
      
    end select
  next
  
  results.append( currentItem )
  
  return results