| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 583 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 594 Isolate* isolate = Isolate::Current(); \ | 594 Isolate* isolate = Isolate::Current(); \ |
| 595 Handle<Object> argv[] = args; \ | 595 Handle<Object> argv[] = args; \ |
| 596 ASSERT(has_pending_exception != NULL); \ | 596 ASSERT(has_pending_exception != NULL); \ |
| 597 return Call(isolate->name##_fun(), \ | 597 return Call(isolate->name##_fun(), \ |
| 598 isolate->js_builtins_object(), \ | 598 isolate->js_builtins_object(), \ |
| 599 ARRAY_SIZE(argv), argv, \ | 599 ARRAY_SIZE(argv), argv, \ |
| 600 has_pending_exception); \ | 600 has_pending_exception); \ |
| 601 } while (false) | 601 } while (false) |
| 602 | 602 |
| 603 | 603 |
| 604 Handle<Object> Execution::ToBoolean(Isolate* isolate, Handle<Object> obj) { | |
| 605 // See the similar code in runtime.js:ToBoolean. | |
| 606 if (obj->IsBoolean()) return obj; | |
| 607 bool result = true; | |
| 608 if (obj->IsString()) { | |
| 609 result = Handle<String>::cast(obj)->length() != 0; | |
| 610 } else if (obj->IsNull() || obj->IsUndefined()) { | |
| 611 result = false; | |
| 612 } else if (obj->IsNumber()) { | |
| 613 double value = obj->Number(); | |
| 614 result = !((value == 0) || isnan(value)); | |
| 615 } | |
| 616 return Handle<Object>(isolate->heap()->ToBoolean(result), isolate); | |
| 617 } | |
| 618 | |
| 619 | |
| 620 Handle<Object> Execution::ToNumber(Handle<Object> obj, bool* exc) { | 604 Handle<Object> Execution::ToNumber(Handle<Object> obj, bool* exc) { |
| 621 RETURN_NATIVE_CALL(to_number, { obj }, exc); | 605 RETURN_NATIVE_CALL(to_number, { obj }, exc); |
| 622 } | 606 } |
| 623 | 607 |
| 624 | 608 |
| 625 Handle<Object> Execution::ToString(Handle<Object> obj, bool* exc) { | 609 Handle<Object> Execution::ToString(Handle<Object> obj, bool* exc) { |
| 626 RETURN_NATIVE_CALL(to_string, { obj }, exc); | 610 RETURN_NATIVE_CALL(to_string, { obj }, exc); |
| 627 } | 611 } |
| 628 | 612 |
| 629 | 613 |
| (...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 942 } | 926 } |
| 943 if (stack_guard->IsInterrupted()) { | 927 if (stack_guard->IsInterrupted()) { |
| 944 stack_guard->Continue(INTERRUPT); | 928 stack_guard->Continue(INTERRUPT); |
| 945 return isolate->StackOverflow(); | 929 return isolate->StackOverflow(); |
| 946 } | 930 } |
| 947 return isolate->heap()->undefined_value(); | 931 return isolate->heap()->undefined_value(); |
| 948 } | 932 } |
| 949 | 933 |
| 950 | 934 |
| 951 } } // namespace v8::internal | 935 } } // namespace v8::internal |
| OLD | NEW |