OLD | NEW |
1 // Copyright 2010 the V8 project authors. All rights reserved. | 1 // Copyright 2010 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 3481 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3492 int index = Smi::cast(args[1])->value(); | 3492 int index = Smi::cast(args[1])->value(); |
3493 Handle<Object> result = GetCharAt(str, index); | 3493 Handle<Object> result = GetCharAt(str, index); |
3494 return *result; | 3494 return *result; |
3495 } | 3495 } |
3496 | 3496 |
3497 // Fall back to GetObjectProperty. | 3497 // Fall back to GetObjectProperty. |
3498 return Runtime::GetObjectProperty(args.at<Object>(0), | 3498 return Runtime::GetObjectProperty(args.at<Object>(0), |
3499 args.at<Object>(1)); | 3499 args.at<Object>(1)); |
3500 } | 3500 } |
3501 | 3501 |
3502 // Implements part of 8.12.9 DefineOwnProperty. | 3502 |
3503 // There are 3 cases that lead here: | |
3504 // Step 4b - define a new accessor property. | |
3505 // Steps 9c & 12 - replace an existing data property with an accessor property. | |
3506 // Step 12 - update an existing accessor property with an accessor or generic | |
3507 // descriptor. | |
3508 static MaybeObject* Runtime_DefineOrRedefineAccessorProperty(Arguments args) { | 3503 static MaybeObject* Runtime_DefineOrRedefineAccessorProperty(Arguments args) { |
3509 ASSERT(args.length() == 5); | 3504 ASSERT(args.length() == 5); |
3510 HandleScope scope; | 3505 HandleScope scope; |
3511 CONVERT_ARG_CHECKED(JSObject, obj, 0); | 3506 CONVERT_ARG_CHECKED(JSObject, obj, 0); |
3512 CONVERT_CHECKED(String, name, args[1]); | 3507 CONVERT_CHECKED(String, name, args[1]); |
3513 CONVERT_CHECKED(Smi, flag_setter, args[2]); | 3508 CONVERT_CHECKED(Smi, flag_setter, args[2]); |
3514 Object* fun = args[3]; | 3509 Object* fun = args[3]; |
3515 RUNTIME_ASSERT(fun->IsJSFunction() || fun->IsUndefined()); | 3510 RUNTIME_ASSERT(fun->IsJSFunction() || fun->IsUndefined()); |
3516 CONVERT_CHECKED(Smi, flag_attr, args[4]); | 3511 CONVERT_CHECKED(Smi, flag_attr, args[4]); |
3517 int unchecked = flag_attr->value(); | 3512 int unchecked = flag_attr->value(); |
(...skipping 11 matching lines...) Expand all Loading... |
3529 || result.type() == CONSTANT_FUNCTION)) { | 3524 || result.type() == CONSTANT_FUNCTION)) { |
3530 Object* ok; | 3525 Object* ok; |
3531 { MaybeObject* maybe_ok = | 3526 { MaybeObject* maybe_ok = |
3532 obj->DeleteProperty(name, JSObject::NORMAL_DELETION); | 3527 obj->DeleteProperty(name, JSObject::NORMAL_DELETION); |
3533 if (!maybe_ok->ToObject(&ok)) return maybe_ok; | 3528 if (!maybe_ok->ToObject(&ok)) return maybe_ok; |
3534 } | 3529 } |
3535 } | 3530 } |
3536 return obj->DefineAccessor(name, flag_setter->value() == 0, fun, attr); | 3531 return obj->DefineAccessor(name, flag_setter->value() == 0, fun, attr); |
3537 } | 3532 } |
3538 | 3533 |
3539 // Implements part of 8.12.9 DefineOwnProperty. | |
3540 // There are 3 cases that lead here: | |
3541 // Step 4a - define a new data property. | |
3542 // Steps 9b & 12 - replace an existing accessor property with a data property. | |
3543 // Step 12 - update an existing data property with a data or generic | |
3544 // descriptor. | |
3545 static MaybeObject* Runtime_DefineOrRedefineDataProperty(Arguments args) { | 3534 static MaybeObject* Runtime_DefineOrRedefineDataProperty(Arguments args) { |
3546 ASSERT(args.length() == 4); | 3535 ASSERT(args.length() == 4); |
3547 HandleScope scope; | 3536 HandleScope scope; |
3548 CONVERT_ARG_CHECKED(JSObject, js_object, 0); | 3537 CONVERT_ARG_CHECKED(JSObject, js_object, 0); |
3549 CONVERT_ARG_CHECKED(String, name, 1); | 3538 CONVERT_ARG_CHECKED(String, name, 1); |
3550 Handle<Object> obj_value = args.at<Object>(2); | 3539 Handle<Object> obj_value = args.at<Object>(2); |
3551 | 3540 |
3552 CONVERT_CHECKED(Smi, flag, args[3]); | 3541 CONVERT_CHECKED(Smi, flag, args[3]); |
3553 int unchecked = flag->value(); | 3542 int unchecked = flag->value(); |
3554 RUNTIME_ASSERT((unchecked & ~(READ_ONLY | DONT_ENUM | DONT_DELETE)) == 0); | 3543 RUNTIME_ASSERT((unchecked & ~(READ_ONLY | DONT_ENUM | DONT_DELETE)) == 0); |
(...skipping 7284 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10839 } else { | 10828 } else { |
10840 // Handle last resort GC and make sure to allow future allocations | 10829 // Handle last resort GC and make sure to allow future allocations |
10841 // to grow the heap without causing GCs (if possible). | 10830 // to grow the heap without causing GCs (if possible). |
10842 Counters::gc_last_resort_from_js.Increment(); | 10831 Counters::gc_last_resort_from_js.Increment(); |
10843 Heap::CollectAllGarbage(false); | 10832 Heap::CollectAllGarbage(false); |
10844 } | 10833 } |
10845 } | 10834 } |
10846 | 10835 |
10847 | 10836 |
10848 } } // namespace v8::internal | 10837 } } // namespace v8::internal |
OLD | NEW |