OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <stdlib.h> | 5 #include <stdlib.h> |
6 #include <limits> | 6 #include <limits> |
7 | 7 |
8 #include "src/v8.h" | 8 #include "src/v8.h" |
9 | 9 |
10 #include "src/isolate-inl.h" | 10 #include "src/isolate-inl.h" |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
92 DCHECK(args.length() == 3); | 92 DCHECK(args.length() == 3); |
93 CONVERT_ARG_HANDLE_CHECKED(Object, receiver, 0); | 93 CONVERT_ARG_HANDLE_CHECKED(Object, receiver, 0); |
94 CONVERT_ARG_HANDLE_CHECKED(JSObject, home_object, 1); | 94 CONVERT_ARG_HANDLE_CHECKED(JSObject, home_object, 1); |
95 CONVERT_ARG_HANDLE_CHECKED(Object, key, 2); | 95 CONVERT_ARG_HANDLE_CHECKED(Object, key, 2); |
96 | 96 |
97 Handle<Name> name; | 97 Handle<Name> name; |
98 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, name, | 98 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, name, |
99 Runtime::ToName(isolate, key)); | 99 Runtime::ToName(isolate, key)); |
100 uint32_t index; | 100 uint32_t index; |
101 if (name->AsArrayIndex(&index)) { | 101 if (name->AsArrayIndex(&index)) { |
| 102 // TODO(dslomov): Implement. |
102 return ThrowUnsupportedSuper(isolate); | 103 return ThrowUnsupportedSuper(isolate); |
103 } | 104 } |
104 return LoadFromSuper(isolate, receiver, home_object, name); | 105 return LoadFromSuper(isolate, receiver, home_object, name); |
105 } | 106 } |
106 | 107 |
107 | 108 |
108 static Object* StoreToSuper(Isolate* isolate, Handle<JSObject> home_object, | 109 static Object* StoreToSuper(Isolate* isolate, Handle<JSObject> home_object, |
109 Handle<Object> receiver, Handle<Name> name, | 110 Handle<Object> receiver, Handle<Name> name, |
110 Handle<Object> value, StrictMode strict_mode) { | 111 Handle<Object> value, StrictMode strict_mode) { |
111 if (home_object->IsAccessCheckNeeded() && | 112 if (home_object->IsAccessCheckNeeded() && |
(...skipping 15 matching lines...) Expand all Loading... |
127 Object::SUPER_PROPERTY)); | 128 Object::SUPER_PROPERTY)); |
128 return *result; | 129 return *result; |
129 } | 130 } |
130 | 131 |
131 | 132 |
132 RUNTIME_FUNCTION(Runtime_StoreToSuper_Strict) { | 133 RUNTIME_FUNCTION(Runtime_StoreToSuper_Strict) { |
133 HandleScope scope(isolate); | 134 HandleScope scope(isolate); |
134 DCHECK(args.length() == 4); | 135 DCHECK(args.length() == 4); |
135 CONVERT_ARG_HANDLE_CHECKED(Object, receiver, 0); | 136 CONVERT_ARG_HANDLE_CHECKED(Object, receiver, 0); |
136 CONVERT_ARG_HANDLE_CHECKED(JSObject, home_object, 1); | 137 CONVERT_ARG_HANDLE_CHECKED(JSObject, home_object, 1); |
137 CONVERT_ARG_HANDLE_CHECKED(Object, value, 2); | 138 CONVERT_ARG_HANDLE_CHECKED(Name, name, 2); |
138 CONVERT_ARG_HANDLE_CHECKED(Name, name, 3); | 139 CONVERT_ARG_HANDLE_CHECKED(Object, value, 3); |
139 | 140 |
140 return StoreToSuper(isolate, home_object, receiver, name, value, STRICT); | 141 return StoreToSuper(isolate, home_object, receiver, name, value, STRICT); |
141 } | 142 } |
142 | 143 |
143 | 144 |
144 RUNTIME_FUNCTION(Runtime_StoreToSuper_Sloppy) { | 145 RUNTIME_FUNCTION(Runtime_StoreToSuper_Sloppy) { |
145 HandleScope scope(isolate); | 146 HandleScope scope(isolate); |
146 DCHECK(args.length() == 4); | 147 DCHECK(args.length() == 4); |
147 CONVERT_ARG_HANDLE_CHECKED(Object, receiver, 0); | 148 CONVERT_ARG_HANDLE_CHECKED(Object, receiver, 0); |
148 CONVERT_ARG_HANDLE_CHECKED(JSObject, home_object, 1); | 149 CONVERT_ARG_HANDLE_CHECKED(JSObject, home_object, 1); |
149 CONVERT_ARG_HANDLE_CHECKED(Object, value, 2); | 150 CONVERT_ARG_HANDLE_CHECKED(Name, name, 2); |
150 CONVERT_ARG_HANDLE_CHECKED(Name, name, 3); | 151 CONVERT_ARG_HANDLE_CHECKED(Object, value, 3); |
151 | 152 |
152 return StoreToSuper(isolate, home_object, receiver, name, value, SLOPPY); | 153 return StoreToSuper(isolate, home_object, receiver, name, value, SLOPPY); |
153 } | 154 } |
| 155 |
| 156 |
| 157 static Object* StoreKeyedToSuper(Isolate* isolate, Handle<JSObject> home_object, |
| 158 Handle<Object> receiver, Handle<Object> key, |
| 159 Handle<Object> value, StrictMode strict_mode) { |
| 160 Handle<Name> name; |
| 161 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, name, |
| 162 Runtime::ToName(isolate, key)); |
| 163 uint32_t index; |
| 164 if (name->AsArrayIndex(&index)) { |
| 165 // TODO(dslomov): Implement. |
| 166 return ThrowUnsupportedSuper(isolate); |
| 167 } |
| 168 return StoreToSuper(isolate, home_object, receiver, name, value, strict_mode); |
| 169 } |
| 170 |
| 171 |
| 172 RUNTIME_FUNCTION(Runtime_StoreKeyedToSuper_Strict) { |
| 173 HandleScope scope(isolate); |
| 174 DCHECK(args.length() == 4); |
| 175 CONVERT_ARG_HANDLE_CHECKED(Object, receiver, 0); |
| 176 CONVERT_ARG_HANDLE_CHECKED(JSObject, home_object, 1); |
| 177 CONVERT_ARG_HANDLE_CHECKED(Object, key, 2); |
| 178 CONVERT_ARG_HANDLE_CHECKED(Object, value, 3); |
| 179 |
| 180 return StoreKeyedToSuper(isolate, home_object, receiver, key, value, STRICT); |
| 181 } |
| 182 |
| 183 |
| 184 RUNTIME_FUNCTION(Runtime_StoreKeyedToSuper_Sloppy) { |
| 185 HandleScope scope(isolate); |
| 186 DCHECK(args.length() == 4); |
| 187 CONVERT_ARG_HANDLE_CHECKED(Object, receiver, 0); |
| 188 CONVERT_ARG_HANDLE_CHECKED(JSObject, home_object, 1); |
| 189 CONVERT_ARG_HANDLE_CHECKED(Object, key, 2); |
| 190 CONVERT_ARG_HANDLE_CHECKED(Object, value, 3); |
| 191 |
| 192 return StoreKeyedToSuper(isolate, home_object, receiver, key, value, SLOPPY); |
| 193 } |
154 } | 194 } |
155 } // namespace v8::internal | 195 } // namespace v8::internal |
OLD | NEW |