Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(239)

Side by Side Diff: runtime/lib/linked_hash_map.cc

Issue 1151523002: VM-internalize the default Map implementation. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Fix fingerprints. Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « runtime/lib/compact_hash.dart ('k') | runtime/lib/linked_hash_map.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "platform/assert.h" 5 #include "platform/assert.h"
6 6
7 #include "vm/assembler.h" 7 #include "vm/assembler.h"
8 #include "vm/bootstrap_natives.h" 8 #include "vm/bootstrap_natives.h"
9 #include "vm/exceptions.h" 9 #include "vm/exceptions.h"
10 #include "vm/flags.h" 10 #include "vm/flags.h"
11 #include "vm/native_entry.h" 11 #include "vm/native_entry.h"
12 #include "vm/object.h" 12 #include "vm/object.h"
13 13
14 namespace dart { 14 namespace dart {
15 15
16 DEFINE_FLAG(bool, use_internal_hash_map, false, "Use internal hash map.");
17
18
19 DEFINE_NATIVE_ENTRY(LinkedHashMap_allocate, 1) { 16 DEFINE_NATIVE_ENTRY(LinkedHashMap_allocate, 1) {
20 const TypeArguments& type_arguments = 17 const TypeArguments& type_arguments =
21 TypeArguments::CheckedHandle(arguments->NativeArgAt(0)); 18 TypeArguments::CheckedHandle(arguments->NativeArgAt(0));
22 const LinkedHashMap& map = 19 const LinkedHashMap& map =
23 LinkedHashMap::Handle(LinkedHashMap::New()); 20 LinkedHashMap::Handle(LinkedHashMap::NewDefault());
24 map.SetTypeArguments(type_arguments); 21 map.SetTypeArguments(type_arguments);
25 return map.raw(); 22 return map.raw();
26 } 23 }
27 24
28 25
29 DEFINE_NATIVE_ENTRY(LinkedHashMap_getLength, 1) { 26 DEFINE_NATIVE_ENTRY(LinkedHashMap_getIndex, 1) {
30 const LinkedHashMap& map = 27 const LinkedHashMap& map =
31 LinkedHashMap::CheckedHandle(arguments->NativeArgAt(0)); 28 LinkedHashMap::CheckedHandle(arguments->NativeArgAt(0));
32 return Smi::New(map.Length()); 29 return map.index();
33 } 30 }
34 31
35 32
36 DEFINE_NATIVE_ENTRY(LinkedHashMap_lookUp, 2) { 33 DEFINE_NATIVE_ENTRY(LinkedHashMap_setIndex, 2) {
37 const LinkedHashMap& map = 34 const LinkedHashMap& map =
38 LinkedHashMap::CheckedHandle(arguments->NativeArgAt(0)); 35 LinkedHashMap::CheckedHandle(arguments->NativeArgAt(0));
39 GET_NON_NULL_NATIVE_ARGUMENT(Instance, key, arguments->NativeArgAt(1)); 36 const TypedData& index =
40 return map.LookUp(key); 37 TypedData::CheckedHandle(arguments->NativeArgAt(1));
41 } 38 map.SetIndex(index);
42
43
44 DEFINE_NATIVE_ENTRY(LinkedHashMap_containsKey, 2) {
45 const LinkedHashMap& map =
46 LinkedHashMap::CheckedHandle(arguments->NativeArgAt(0));
47 GET_NON_NULL_NATIVE_ARGUMENT(Instance, key, arguments->NativeArgAt(1));
48 return Bool::Get(map.Contains(key)).raw();
49 }
50
51
52 DEFINE_NATIVE_ENTRY(LinkedHashMap_insertOrUpdate, 3) {
53 LinkedHashMap& map =
54 LinkedHashMap::CheckedHandle(arguments->NativeArgAt(0));
55 GET_NON_NULL_NATIVE_ARGUMENT(Instance, key, arguments->NativeArgAt(1));
56 GET_NON_NULL_NATIVE_ARGUMENT(Instance, value, arguments->NativeArgAt(2));
57 map.InsertOrUpdate(key, value);
58 return Object::null(); 39 return Object::null();
59 } 40 }
60 41
61 42
62 DEFINE_NATIVE_ENTRY(LinkedHashMap_remove, 2) { 43 DEFINE_NATIVE_ENTRY(LinkedHashMap_getData, 1) {
63 const LinkedHashMap& map = 44 const LinkedHashMap& map =
64 LinkedHashMap::CheckedHandle(arguments->NativeArgAt(0)); 45 LinkedHashMap::CheckedHandle(arguments->NativeArgAt(0));
65 GET_NON_NULL_NATIVE_ARGUMENT(Instance, key, arguments->NativeArgAt(1)); 46 return map.data();
66 return map.Remove(key);
67 } 47 }
68 48
69 49
70 DEFINE_NATIVE_ENTRY(LinkedHashMap_clear, 1) { 50 DEFINE_NATIVE_ENTRY(LinkedHashMap_setData, 2) {
71 const LinkedHashMap& map = 51 const LinkedHashMap& map =
72 LinkedHashMap::CheckedHandle(arguments->NativeArgAt(0)); 52 LinkedHashMap::CheckedHandle(arguments->NativeArgAt(0));
73 map.Clear(); 53 const Array& data =
54 Array::CheckedHandle(arguments->NativeArgAt(1));
55 map.SetData(data);
74 return Object::null(); 56 return Object::null();
75 } 57 }
76 58
77 59
78 DEFINE_NATIVE_ENTRY(LinkedHashMap_toArray, 1) { 60 DEFINE_NATIVE_ENTRY(LinkedHashMap_getHashMask, 1) {
79 const LinkedHashMap& map = 61 const LinkedHashMap& map =
80 LinkedHashMap::CheckedHandle(arguments->NativeArgAt(0)); 62 LinkedHashMap::CheckedHandle(arguments->NativeArgAt(0));
81 return map.ToArray(); 63 return map.hash_mask();
82 } 64 }
83 65
84 66
85 DEFINE_NATIVE_ENTRY(LinkedHashMap_getModMark, 2) { 67 DEFINE_NATIVE_ENTRY(LinkedHashMap_setHashMask, 2) {
86 const LinkedHashMap& map = 68 const LinkedHashMap& map =
87 LinkedHashMap::CheckedHandle(arguments->NativeArgAt(0)); 69 LinkedHashMap::CheckedHandle(arguments->NativeArgAt(0));
88 GET_NON_NULL_NATIVE_ARGUMENT(Bool, create, arguments->NativeArgAt(1)); 70 const Smi& hashMask =
89 return map.GetModificationMark(create.value()); 71 Smi::CheckedHandle(arguments->NativeArgAt(1));
72 map.SetHashMask(hashMask.Value());
73 return Object::null();
90 } 74 }
91 75
92 76
93 DEFINE_NATIVE_ENTRY(LinkedHashMap_useInternal, 0) { 77 DEFINE_NATIVE_ENTRY(LinkedHashMap_getDeletedKeys, 1) {
94 return Bool::Get(FLAG_use_internal_hash_map).raw(); 78 const LinkedHashMap& map =
79 LinkedHashMap::CheckedHandle(arguments->NativeArgAt(0));
80 return map.deleted_keys();
81 }
82
83
84 DEFINE_NATIVE_ENTRY(LinkedHashMap_setDeletedKeys, 2) {
85 const LinkedHashMap& map =
86 LinkedHashMap::CheckedHandle(arguments->NativeArgAt(0));
87 const Smi& deletedKeys =
88 Smi::CheckedHandle(arguments->NativeArgAt(1));
89 map.SetDeletedKeys(deletedKeys.Value());
90 return Object::null();
91 }
92
93
94 DEFINE_NATIVE_ENTRY(LinkedHashMap_getUsedData, 1) {
95 const LinkedHashMap& map =
96 LinkedHashMap::CheckedHandle(arguments->NativeArgAt(0));
97 return map.used_data();
98 }
99
100
101 DEFINE_NATIVE_ENTRY(LinkedHashMap_setUsedData, 2) {
102 const LinkedHashMap& map =
103 LinkedHashMap::CheckedHandle(arguments->NativeArgAt(0));
104 const Smi& usedData =
105 Smi::CheckedHandle(arguments->NativeArgAt(1));
106 map.SetUsedData(usedData.Value());
107 return Object::null();
95 } 108 }
96 109
97 } // namespace dart 110 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/lib/compact_hash.dart ('k') | runtime/lib/linked_hash_map.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698