AslpParsePattern

INT64 __stdcall AslpParsePattern(UINT64 a1, INT64 *a2){
  __int64 v2; 
  INT64 v5; 
  char v6; 
  UINT64 i; 
  __int16 v8; 
  INT64 result; 
  v2 = -1i64;
  do
    ++v2;
  while( *(_WORD *)(a1 + 2 * v2) );
  v5 = a1 + 2i64 * (unsigned int)v2;
  v6 = 0;
  for( i = v5 - 2; i > a1; i -= 2i64 )
  {
    v8 = *(_WORD *)i;
    if( *(_WORD *)i == 42 || v8 == 63 )
    {
      v6 = 1;
    }
    else if( v8 == 92 )
    {
      if( v6 )
      {
        result = AslpAllocMatchNode((VOID *)(i + 2), v5, (INT64)a2);
        if( (int)result < 0 )
          return result;
        v5 = i;
        *(_WORD *)i = 0;
        v6 = 0;
      }
      else
      {
        v5 = i;
      }
    }
  }
  if( !v6 )
    v5 = i;
  return AslpAllocMatchNode((VOID *)(i & -(__int64)(v6 != 0)), v5, (INT64)a2);
}

Referenced by:

AslRegWildcardFindFirst