OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 "vm/object.h" | 5 #include "vm/object.h" |
6 | 6 |
7 #include "include/dart_api.h" | 7 #include "include/dart_api.h" |
8 #include "platform/assert.h" | 8 #include "platform/assert.h" |
9 #include "vm/assembler.h" | 9 #include "vm/assembler.h" |
10 #include "vm/bigint_operations.h" | 10 #include "vm/bigint_operations.h" |
(...skipping 2173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2184 | 2184 |
2185 RawFunction* Class::LookupDynamicFunction(const String& name) const { | 2185 RawFunction* Class::LookupDynamicFunction(const String& name) const { |
2186 Function& function = Function::Handle(LookupFunction(name)); | 2186 Function& function = Function::Handle(LookupFunction(name)); |
2187 if (function.IsNull() || !function.IsDynamicFunction()) { | 2187 if (function.IsNull() || !function.IsDynamicFunction()) { |
2188 return Function::null(); | 2188 return Function::null(); |
2189 } | 2189 } |
2190 return function.raw(); | 2190 return function.raw(); |
2191 } | 2191 } |
2192 | 2192 |
2193 | 2193 |
| 2194 RawFunction* Class::LookupDynamicFunctionAllowPrivate( |
| 2195 const String& name) const { |
| 2196 Function& function = Function::Handle(LookupFunctionAllowPrivate(name)); |
| 2197 if (function.IsNull() || !function.IsDynamicFunction()) { |
| 2198 return Function::null(); |
| 2199 } |
| 2200 return function.raw(); |
| 2201 } |
| 2202 |
| 2203 |
2194 RawFunction* Class::LookupStaticFunction(const String& name) const { | 2204 RawFunction* Class::LookupStaticFunction(const String& name) const { |
2195 Function& function = Function::Handle(LookupFunction(name)); | 2205 Function& function = Function::Handle(LookupFunction(name)); |
2196 if (function.IsNull() || !function.IsStaticFunction()) { | 2206 if (function.IsNull() || !function.IsStaticFunction()) { |
2197 return Function::null(); | 2207 return Function::null(); |
2198 } | 2208 } |
2199 return function.raw(); | 2209 return function.raw(); |
2200 } | 2210 } |
2201 | 2211 |
2202 | 2212 |
| 2213 RawFunction* Class::LookupStaticFunctionAllowPrivate(const String& name) const { |
| 2214 Function& function = Function::Handle(LookupFunctionAllowPrivate(name)); |
| 2215 if (function.IsNull() || !function.IsStaticFunction()) { |
| 2216 return Function::null(); |
| 2217 } |
| 2218 return function.raw(); |
| 2219 } |
| 2220 |
| 2221 |
2203 RawFunction* Class::LookupConstructor(const String& name) const { | 2222 RawFunction* Class::LookupConstructor(const String& name) const { |
2204 Function& function = Function::Handle(LookupFunction(name)); | 2223 Function& function = Function::Handle(LookupFunction(name)); |
2205 if (function.IsNull() || !function.IsConstructor()) { | 2224 if (function.IsNull() || !function.IsConstructor()) { |
2206 return Function::null(); | 2225 return Function::null(); |
2207 } | 2226 } |
2208 ASSERT(!function.is_static()); | 2227 ASSERT(!function.is_static()); |
2209 return function.raw(); | 2228 return function.raw(); |
2210 } | 2229 } |
2211 | 2230 |
2212 | 2231 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2246 | 2265 |
2247 RawFunction* Class::LookupFunction(const String& name) const { | 2266 RawFunction* Class::LookupFunction(const String& name) const { |
2248 Isolate* isolate = Isolate::Current(); | 2267 Isolate* isolate = Isolate::Current(); |
2249 ASSERT(name.IsOneByteString()); | 2268 ASSERT(name.IsOneByteString()); |
2250 Array& funcs = Array::Handle(isolate, functions()); | 2269 Array& funcs = Array::Handle(isolate, functions()); |
2251 if (funcs.IsNull()) { | 2270 if (funcs.IsNull()) { |
2252 // This can occur, e.g., for Null classes. | 2271 // This can occur, e.g., for Null classes. |
2253 return Function::null(); | 2272 return Function::null(); |
2254 } | 2273 } |
2255 Function& function = Function::Handle(isolate, Function::null()); | 2274 Function& function = Function::Handle(isolate, Function::null()); |
| 2275 if (name.IsSymbol()) { |
| 2276 // Quick Symbol compare. |
| 2277 intptr_t len = funcs.Length(); |
| 2278 for (intptr_t i = 0; i < len; i++) { |
| 2279 function ^= funcs.At(i); |
| 2280 if (function.name() == name.raw()) { |
| 2281 return function.raw(); |
| 2282 } |
| 2283 } |
| 2284 } else { |
| 2285 String& function_name = String::Handle(isolate, String::null()); |
| 2286 intptr_t len = funcs.Length(); |
| 2287 for (intptr_t i = 0; i < len; i++) { |
| 2288 function ^= funcs.At(i); |
| 2289 function_name ^= function.name(); |
| 2290 if (function_name.Equals(name)) { |
| 2291 return function.raw(); |
| 2292 } |
| 2293 } |
| 2294 } |
| 2295 // No function found. |
| 2296 return Function::null(); |
| 2297 } |
| 2298 |
| 2299 |
| 2300 RawFunction* Class::LookupFunctionAllowPrivate(const String& name) const { |
| 2301 Isolate* isolate = Isolate::Current(); |
| 2302 ASSERT(name.IsOneByteString()); |
| 2303 Array& funcs = Array::Handle(isolate, functions()); |
| 2304 if (funcs.IsNull()) { |
| 2305 // This can occur, e.g., for Null classes. |
| 2306 return Function::null(); |
| 2307 } |
| 2308 Function& function = Function::Handle(isolate, Function::null()); |
2256 String& function_name = String::Handle(isolate, String::null()); | 2309 String& function_name = String::Handle(isolate, String::null()); |
2257 intptr_t len = funcs.Length(); | 2310 intptr_t len = funcs.Length(); |
2258 for (intptr_t i = 0; i < len; i++) { | 2311 for (intptr_t i = 0; i < len; i++) { |
2259 function ^= funcs.At(i); | 2312 function ^= funcs.At(i); |
2260 function_name ^= function.name(); | 2313 function_name ^= function.name(); |
2261 if (OneByteString::EqualsIgnoringPrivateKey(function_name, name)) { | 2314 if (OneByteString::EqualsIgnoringPrivateKey(function_name, name)) { |
2262 return function.raw(); | 2315 return function.raw(); |
2263 } | 2316 } |
2264 } | 2317 } |
2265 | |
2266 // No function found. | 2318 // No function found. |
2267 return Function::null(); | 2319 return Function::null(); |
2268 } | 2320 } |
2269 | 2321 |
2270 | 2322 |
2271 RawFunction* Class::LookupGetterFunction(const String& name) const { | 2323 RawFunction* Class::LookupGetterFunction(const String& name) const { |
2272 return LookupAccessorFunction(kGetterPrefix, kGetterPrefixLength, name); | 2324 return LookupAccessorFunction(kGetterPrefix, kGetterPrefixLength, name); |
2273 } | 2325 } |
2274 | 2326 |
2275 | 2327 |
(...skipping 3906 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6182 lib_url ^= lib.url(); | 6234 lib_url ^= lib.url(); |
6183 lib_key = lib_url.Hash(); | 6235 lib_key = lib_url.Hash(); |
6184 if (lib_key == key) { | 6236 if (lib_key == key) { |
6185 return true; | 6237 return true; |
6186 } | 6238 } |
6187 } | 6239 } |
6188 return false; | 6240 return false; |
6189 } | 6241 } |
6190 | 6242 |
6191 | 6243 |
| 6244 static bool IsPrivate(const String& name) { |
| 6245 if (ShouldBePrivate(name)) return true; |
| 6246 // Factory names: List._fromLiteral. |
| 6247 for (intptr_t i = 1; i < name.Length() - 1; i++) { |
| 6248 if (name.CharAt(i) == '.') { |
| 6249 if (name.CharAt(i + 1) == '_') { |
| 6250 return true; |
| 6251 } |
| 6252 } |
| 6253 } |
| 6254 return false; |
| 6255 } |
| 6256 |
| 6257 |
| 6258 // Cannot handle qualified names properly as it only appends private key to |
| 6259 // the end (e.g. _Alfa.foo -> _Alfa.foo@...). |
6192 RawString* Library::PrivateName(const String& name) const { | 6260 RawString* Library::PrivateName(const String& name) const { |
6193 ASSERT(ShouldBePrivate(name)); | 6261 ASSERT(IsPrivate(name)); |
6194 // ASSERT(strchr(name, '@') == NULL); | 6262 // ASSERT(strchr(name, '@') == NULL); |
6195 String& str = String::Handle(); | 6263 String& str = String::Handle(); |
6196 str ^= name.raw(); | 6264 str ^= name.raw(); |
6197 str = String::Concat(str, String::Handle(this->private_key())); | 6265 str = String::Concat(str, String::Handle(this->private_key())); |
6198 str = Symbols::New(str); | 6266 str = Symbols::New(str); |
6199 return str.raw(); | 6267 return str.raw(); |
6200 } | 6268 } |
6201 | 6269 |
6202 | 6270 |
6203 RawLibrary* Library::GetLibrary(intptr_t index) { | 6271 RawLibrary* Library::GetLibrary(intptr_t index) { |
(...skipping 6332 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12536 } | 12604 } |
12537 return result.raw(); | 12605 return result.raw(); |
12538 } | 12606 } |
12539 | 12607 |
12540 | 12608 |
12541 const char* WeakProperty::ToCString() const { | 12609 const char* WeakProperty::ToCString() const { |
12542 return "_WeakProperty"; | 12610 return "_WeakProperty"; |
12543 } | 12611 } |
12544 | 12612 |
12545 } // namespace dart | 12613 } // namespace dart |
OLD | NEW |