/**
  * Build 'type_map', 'all_type_map' and 'undefined_type_map'.
  */
 private static function build_maps()
 {
     foreach (self::$type_map as $type => $params) {
         $params->type = $type;
         self::apply_global($params);
     }
     self::$all_type_map = self::$type_map;
     for ($i = 0; $i < count(self::$all_types); $i++) {
         $tocheck = self::$all_types[$i];
         if (!isset(self::$type_map[$tocheck])) {
             for ($j = $i - 1; $j >= 0; $j--) {
                 $target = self::$all_types[$j];
                 if (isset(self::$type_map[$target])) {
                     self::$all_type_map[$tocheck] = self::$type_map[$target];
                     self::$undefined_type_map[$tocheck] = $target;
                     break;
                 }
             }
         }
     }
 }