OLD | NEW |
1 // Copyright 2006-2008 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2008 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 // This files contains runtime support implemented in JavaScript. | 5 // This files contains runtime support implemented in JavaScript. |
6 | 6 |
7 // CAUTION: Some of the functions specified in this file are called | 7 // CAUTION: Some of the functions specified in this file are called |
8 // directly from compiled code. These are the functions with names in | 8 // directly from compiled code. These are the functions with names in |
9 // ALL CAPS. The compiled code passes the first argument in 'this'. | 9 // ALL CAPS. The compiled code passes the first argument in 'this'. |
10 | 10 |
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
159 function CONCAT_ITERABLE_TO_ARRAY(iterable) { | 159 function CONCAT_ITERABLE_TO_ARRAY(iterable) { |
160 return %concat_iterable_to_array(this, iterable); | 160 return %concat_iterable_to_array(this, iterable); |
161 }; | 161 }; |
162 | 162 |
163 | 163 |
164 /* ------------------------------------- | 164 /* ------------------------------------- |
165 - - - C o n v e r s i o n s - - - | 165 - - - C o n v e r s i o n s - - - |
166 ------------------------------------- | 166 ------------------------------------- |
167 */ | 167 */ |
168 | 168 |
169 // ECMA-262, section 9.2, page 30 | |
170 function ToBoolean(x) { | |
171 if (IS_BOOLEAN(x)) return x; | |
172 if (IS_STRING(x)) return x.length != 0; | |
173 if (x == null) return false; | |
174 if (IS_NUMBER(x)) return !((x == 0) || NUMBER_IS_NAN(x)); | |
175 return true; | |
176 } | |
177 | |
178 | |
179 // ES5, section 9.12 | 169 // ES5, section 9.12 |
180 function SameValue(x, y) { | 170 function SameValue(x, y) { |
181 if (typeof x != typeof y) return false; | 171 if (typeof x != typeof y) return false; |
182 if (IS_NUMBER(x)) { | 172 if (IS_NUMBER(x)) { |
183 if (NUMBER_IS_NAN(x) && NUMBER_IS_NAN(y)) return true; | 173 if (NUMBER_IS_NAN(x) && NUMBER_IS_NAN(y)) return true; |
184 // x is +0 and y is -0 or vice versa. | 174 // x is +0 and y is -0 or vice versa. |
185 if (x === 0 && y === 0 && %_IsMinusZero(x) != %_IsMinusZero(y)) { | 175 if (x === 0 && y === 0 && %_IsMinusZero(x) != %_IsMinusZero(y)) { |
186 return false; | 176 return false; |
187 } | 177 } |
188 } | 178 } |
(...skipping 26 matching lines...) Expand all Loading... |
215 - - - U t i l i t i e s - - - | 205 - - - U t i l i t i e s - - - |
216 --------------------------------- | 206 --------------------------------- |
217 */ | 207 */ |
218 | 208 |
219 | 209 |
220 // ES6, draft 10-14-14, section 22.1.3.1.1 | 210 // ES6, draft 10-14-14, section 22.1.3.1.1 |
221 function IsConcatSpreadable(O) { | 211 function IsConcatSpreadable(O) { |
222 if (!IS_SPEC_OBJECT(O)) return false; | 212 if (!IS_SPEC_OBJECT(O)) return false; |
223 var spreadable = O[isConcatSpreadableSymbol]; | 213 var spreadable = O[isConcatSpreadableSymbol]; |
224 if (IS_UNDEFINED(spreadable)) return IS_ARRAY(O); | 214 if (IS_UNDEFINED(spreadable)) return IS_ARRAY(O); |
225 return ToBoolean(spreadable); | 215 return TO_BOOLEAN(spreadable); |
226 } | 216 } |
227 | 217 |
228 | 218 |
229 function ToPositiveInteger(x, rangeErrorIndex) { | 219 function ToPositiveInteger(x, rangeErrorIndex) { |
230 var i = TO_INTEGER_MAP_MINUS_ZERO(x); | 220 var i = TO_INTEGER_MAP_MINUS_ZERO(x); |
231 if (i < 0) throw MakeRangeError(rangeErrorIndex); | 221 if (i < 0) throw MakeRangeError(rangeErrorIndex); |
232 return i; | 222 return i; |
233 } | 223 } |
234 | 224 |
235 //---------------------------------------------------------------------------- | 225 //---------------------------------------------------------------------------- |
(...skipping 17 matching lines...) Expand all Loading... |
253 "apply_prepare_builtin", APPLY_PREPARE, | 243 "apply_prepare_builtin", APPLY_PREPARE, |
254 "concat_iterable_to_array_builtin", CONCAT_ITERABLE_TO_ARRAY, | 244 "concat_iterable_to_array_builtin", CONCAT_ITERABLE_TO_ARRAY, |
255 "reflect_apply_prepare_builtin", REFLECT_APPLY_PREPARE, | 245 "reflect_apply_prepare_builtin", REFLECT_APPLY_PREPARE, |
256 "reflect_construct_prepare_builtin", REFLECT_CONSTRUCT_PREPARE, | 246 "reflect_construct_prepare_builtin", REFLECT_CONSTRUCT_PREPARE, |
257 ]); | 247 ]); |
258 | 248 |
259 %InstallToContext([ | 249 %InstallToContext([ |
260 "concat_iterable_to_array", ConcatIterableToArray, | 250 "concat_iterable_to_array", ConcatIterableToArray, |
261 ]); | 251 ]); |
262 | 252 |
263 utils.Export(function(to) { | |
264 to.ToBoolean = ToBoolean; | |
265 }); | |
266 | |
267 }) | 253 }) |
OLD | NEW |