diff options
Diffstat (limited to 'chromium/v8/src/compiler/typer.cc')
-rw-r--r-- | chromium/v8/src/compiler/typer.cc | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/chromium/v8/src/compiler/typer.cc b/chromium/v8/src/compiler/typer.cc index 9ea962b8659..2590342d2e4 100644 --- a/chromium/v8/src/compiler/typer.cc +++ b/chromium/v8/src/compiler/typer.cc @@ -289,6 +289,7 @@ class Typer::Visitor : public Reducer { static Type* ObjectIsArrayBufferView(Type*, Typer*); static Type* ObjectIsCallable(Type*, Typer*); + static Type* ObjectIsConstructor(Type*, Typer*); static Type* ObjectIsDetectableCallable(Type*, Typer*); static Type* ObjectIsMinusZero(Type*, Typer*); static Type* ObjectIsNaN(Type*, Typer*); @@ -523,6 +524,12 @@ Type* Typer::Visitor::ObjectIsCallable(Type* type, Typer* t) { return Type::Boolean(); } +Type* Typer::Visitor::ObjectIsConstructor(Type* type, Typer* t) { + // TODO(turbofan): Introduce a Type::Constructor? + if (!type->Maybe(Type::Callable())) return t->singleton_false_; + return Type::Boolean(); +} + Type* Typer::Visitor::ObjectIsDetectableCallable(Type* type, Typer* t) { if (type->Is(Type::DetectableCallable())) return t->singleton_true_; if (!type->Maybe(Type::DetectableCallable())) return t->singleton_false_; @@ -1986,6 +1993,10 @@ Type* Typer::Visitor::TypeObjectIsCallable(Node* node) { return TypeUnaryOp(node, ObjectIsCallable); } +Type* Typer::Visitor::TypeObjectIsConstructor(Node* node) { + return TypeUnaryOp(node, ObjectIsConstructor); +} + Type* Typer::Visitor::TypeObjectIsDetectableCallable(Node* node) { return TypeUnaryOp(node, ObjectIsDetectableCallable); } |