1 // Copyright 2016 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "src/wasm/signature-map.h"
6 
7 namespace v8 {
8 namespace internal {
9 namespace wasm {
10 
FindOrInsert(FunctionSig * sig)11 uint32_t SignatureMap::FindOrInsert(FunctionSig* sig) {
12   auto pos = map_.find(sig);
13   if (pos != map_.end()) {
14     return pos->second;
15   } else {
16     uint32_t index = next_++;
17     map_[sig] = index;
18     return index;
19   }
20 }
21 
Find(FunctionSig * sig) const22 int32_t SignatureMap::Find(FunctionSig* sig) const {
23   auto pos = map_.find(sig);
24   if (pos != map_.end()) {
25     return static_cast<int32_t>(pos->second);
26   } else {
27     return -1;
28   }
29 }
30 
operator ()(FunctionSig * a,FunctionSig * b) const31 bool SignatureMap::CompareFunctionSigs::operator()(FunctionSig* a,
32                                                    FunctionSig* b) const {
33   if (a == b) return false;
34   if (a->return_count() < b->return_count()) return true;
35   if (a->return_count() > b->return_count()) return false;
36   if (a->parameter_count() < b->parameter_count()) return true;
37   if (a->parameter_count() > b->parameter_count()) return false;
38   for (size_t r = 0; r < a->return_count(); r++) {
39     if (a->GetReturn(r) < b->GetReturn(r)) return true;
40     if (a->GetReturn(r) > b->GetReturn(r)) return false;
41   }
42   for (size_t p = 0; p < a->parameter_count(); p++) {
43     if (a->GetParam(p) < b->GetParam(p)) return true;
44     if (a->GetParam(p) > b->GetParam(p)) return false;
45   }
46   return false;
47 }
48 
49 }  // namespace wasm
50 }  // namespace internal
51 }  // namespace v8
52