# File lib/more/facets/platform.rb, line 82
  def initialize(arch)
    case arch
    when Array then
      @cpu, @os, @version = arch
    when String then
      arch = arch.split '-'

      if arch.length > 2 and arch.last !~ /\d/ then # reassemble x86-linux-gnu
        extra = arch.pop
        arch.last << "-#{extra}"
      end

      cpu = arch.shift

      @cpu = case cpu
             when /i\d86/ then 'x86'
             else cpu
             end

      if arch.length == 2 and arch.last =~ /^\d+$/ then # for command-line
        @os, @version = arch
        return
      end

      os, = arch
      @cpu, os = nil, cpu if os.nil? # legacy jruby

      @os, @version = case os
        when /aix(\d+)/ then             [ 'aix',       $1  ]
        when /cygwin/ then               [ 'cygwin',    nil ]
        when /darwin(\d+)?/ then         [ 'darwin',    $1  ]
        when /freebsd(\d+)/ then         [ 'freebsd',   $1  ]
        when /hpux(\d+)/ then            [ 'hpux',      $1  ]
        when /^java$/, /^jruby$/ then    [ 'java',      nil ]
        when /^java([\d.]*)/ then        [ 'java',      $1  ]
        when /linux/ then                [ 'linux',     $1  ]
        when /mingw32/ then              [ 'mingw32',   nil ]
        when /(mswin\d+)(\_(\d+))?/ then
          os, version = $1, $3
          @cpu = 'x86' if @cpu.nil? and os =~ /32$/
          [os, version]
        when /netbsdelf/ then            [ 'netbsdelf', nil ]
        when /openbsd(\d+\.\d+)/ then    [ 'openbsd',   $1  ]
        when /solaris(\d+\.\d+)/ then    [ 'solaris',   $1  ]
        # test
        when /^(\w+_platform)(\d+)/ then [ $1,          $2  ]
        else                             [ 'unknown',   nil ]
      end
    when Platform then
      @cpu = arch.cpu
      @os = arch.os
      @version = arch.version
    else
      raise ArgumentError, "invalid argument #{arch.inspect}"
    end
  end