[security][CVE-2022-27809] Builtins should always take int64_t, not int
[hiphop-php.git] / hphp / runtime / vm / repo-autoload-map-builder.h
blobb7328188c117fb17daab7073326bea3bb133c34e
1 /*
2 +----------------------------------------------------------------------+
3 | HipHop for PHP |
4 +----------------------------------------------------------------------+
5 | Copyright (c) 2010-present Facebook, Inc. (http://www.facebook.com) |
6 +----------------------------------------------------------------------+
7 | This source file is subject to version 3.01 of the PHP license, |
8 | that is bundled with this package in the file LICENSE, and is |
9 | available through the world-wide-web at the following url: |
10 | http://www.php.net/license/3_01.txt |
11 | If you did not receive a copy of the PHP license and are unable to |
12 | obtain it through the world-wide-web, please send a note to |
13 | license@php.net so we can mail you a copy immediately. |
14 +----------------------------------------------------------------------+
16 #pragma once
18 #include "hphp/runtime/base/repo-autoload-map.h"
19 #include "hphp/runtime/base/string-data.h"
21 #include "hphp/util/blob-encoder.h"
22 #include "hphp/util/hash-map.h"
24 namespace HPHP {
26 //////////////////////////////////////////////////////////////////////
28 struct UnitEmitter;
29 struct PreClassEmitter;
30 struct FuncEmitter;
31 struct TypeAlias;
32 struct Constant;
34 struct RepoAutoloadMapBuilder {
36 template <typename Compare>
37 using Map = folly_concurrent_hash_map_simd<
38 const StringData*,
39 int64_t,
40 string_data_hash,
41 Compare
44 using CaseInsensitiveMap = Map<string_data_isame>;
45 using CaseSensitiveMap = Map<string_data_same>;
47 friend struct FuncEmitter;
49 static std::unique_ptr<RepoAutoloadMap> serde(BlobDecoder& sd);
50 void serde(BlobEncoder& sd) const;
52 void addUnit(const UnitEmitter& ue);
54 private:
55 template<typename Compare>
56 static void serdeMap(BlobEncoder& sd, const Map<Compare>& map) {
57 sd(map.size());
58 for (auto const& kv : map) sd(kv.first)(kv.second);
61 template<typename Map>
62 static Map serdeMap(BlobDecoder& sd) {
63 size_t size;
64 sd(size);
65 Map map(size);
66 for (size_t i = 0; i < size; i++) {
67 const StringData* str;
68 int64_t unitSn;
69 sd(str)
70 (unitSn)
72 map[str] = unitSn;
74 return map;
77 CaseInsensitiveMap m_types;
78 CaseInsensitiveMap m_funcs;
79 CaseInsensitiveMap m_typeAliases;
80 CaseSensitiveMap m_constants;
83 //////////////////////////////////////////////////////////////////////