    # File lib/supplemental/facets/platform.rb, line 85
      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