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 "src/bootstrapper.h" | 5 #include "src/bootstrapper.h" |
6 #include "src/compiler/graph-inl.h" | 6 #include "src/compiler/graph-inl.h" |
7 #include "src/compiler/graph-reducer.h" | 7 #include "src/compiler/graph-reducer.h" |
8 #include "src/compiler/js-operator.h" | 8 #include "src/compiler/js-operator.h" |
9 #include "src/compiler/node.h" | 9 #include "src/compiler/node.h" |
10 #include "src/compiler/node-properties-inl.h" | 10 #include "src/compiler/node-properties-inl.h" |
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
180 singleton_zero = Type::Range(zero, zero, zone); | 180 singleton_zero = Type::Range(zero, zero, zone); |
181 singleton_one = Type::Range(one, one, zone); | 181 singleton_one = Type::Range(one, one, zone); |
182 zero_or_one = Type::Union(singleton_zero, singleton_one, zone); | 182 zero_or_one = Type::Union(singleton_zero, singleton_one, zone); |
183 zeroish = Type::Union(singleton_zero, nan_or_minuszero, zone); | 183 zeroish = Type::Union(singleton_zero, nan_or_minuszero, zone); |
184 signed32ish = Type::Union(signed32, truncating_to_zero, zone); | 184 signed32ish = Type::Union(signed32, truncating_to_zero, zone); |
185 unsigned32ish = Type::Union(unsigned32, truncating_to_zero, zone); | 185 unsigned32ish = Type::Union(unsigned32, truncating_to_zero, zone); |
186 falsish = Type::Union(Type::Undetectable(), | 186 falsish = Type::Union(Type::Undetectable(), |
187 Type::Union(Type::Union(singleton_false, zeroish, zone), | 187 Type::Union(Type::Union(singleton_false, zeroish, zone), |
188 undefined_or_null, zone), | 188 undefined_or_null, zone), |
189 zone); | 189 zone); |
| 190 truish = Type::Union( |
| 191 singleton_true, |
| 192 Type::Union(Type::DetectableReceiver(), Type::Symbol(), zone), zone); |
190 integer = Type::Range(minusinfinity, infinity, zone); | 193 integer = Type::Range(minusinfinity, infinity, zone); |
191 weakint = Type::Union(integer, nan_or_minuszero, zone); | 194 weakint = Type::Union(integer, nan_or_minuszero, zone); |
192 | 195 |
193 number_fun0_ = Type::Function(number, zone); | 196 number_fun0_ = Type::Function(number, zone); |
194 number_fun1_ = Type::Function(number, number, zone); | 197 number_fun1_ = Type::Function(number, number, zone); |
195 number_fun2_ = Type::Function(number, number, number, zone); | 198 number_fun2_ = Type::Function(number, number, number, zone); |
196 | 199 |
197 weakint_fun1_ = Type::Function(weakint, number, zone); | 200 weakint_fun1_ = Type::Function(weakint, number, zone); |
198 random_fun_ = Type::Function(Type::OrderedNumber(), zone); | 201 random_fun_ = Type::Function(Type::OrderedNumber(), zone); |
199 | 202 |
(...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
506 if (type->Is(Type::Primitive()) && !type->Maybe(Type::Receiver())) { | 509 if (type->Is(Type::Primitive()) && !type->Maybe(Type::Receiver())) { |
507 return type; | 510 return type; |
508 } | 511 } |
509 return Type::Primitive(); | 512 return Type::Primitive(); |
510 } | 513 } |
511 | 514 |
512 | 515 |
513 Type* Typer::Visitor::ToBoolean(Type* type, Typer* t) { | 516 Type* Typer::Visitor::ToBoolean(Type* type, Typer* t) { |
514 if (type->Is(Type::Boolean())) return type; | 517 if (type->Is(Type::Boolean())) return type; |
515 if (type->Is(t->falsish)) return t->singleton_false; | 518 if (type->Is(t->falsish)) return t->singleton_false; |
516 if (type->Is(Type::DetectableReceiver())) return t->singleton_true; | 519 if (type->Is(t->truish)) return t->singleton_true; |
517 if (type->Is(Type::OrderedNumber()) && (type->Max() < 0 || 0 < type->Min())) { | 520 if (type->Is(Type::PlainNumber()) && (type->Max() < 0 || 0 < type->Min())) { |
518 return t->singleton_true; // Ruled out nan, -0 and +0. | 521 return t->singleton_true; // Ruled out nan, -0 and +0. |
519 } | 522 } |
520 return Type::Boolean(); | 523 return Type::Boolean(); |
521 } | 524 } |
522 | 525 |
523 | 526 |
524 Type* Typer::Visitor::ToNumber(Type* type, Typer* t) { | 527 Type* Typer::Visitor::ToNumber(Type* type, Typer* t) { |
525 if (type->Is(Type::Number())) return type; | 528 if (type->Is(Type::Number())) return type; |
526 if (type->Is(Type::Null())) return t->singleton_zero; | 529 if (type->Is(Type::Null())) return t->singleton_zero; |
527 if (type->Is(Type::Undefined())) return Type::NaN(); | 530 if (type->Is(Type::Undefined())) return Type::NaN(); |
(...skipping 1566 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2094 // TODO(rossberg): Do we want some ClampedArray type to express this? | 2097 // TODO(rossberg): Do we want some ClampedArray type to express this? |
2095 break; | 2098 break; |
2096 } | 2099 } |
2097 } | 2100 } |
2098 return Type::Constant(value, zone()); | 2101 return Type::Constant(value, zone()); |
2099 } | 2102 } |
2100 | 2103 |
2101 } // namespace compiler | 2104 } // namespace compiler |
2102 } // namespace internal | 2105 } // namespace internal |
2103 } // namespace v8 | 2106 } // namespace v8 |
OLD | NEW |