diff options
author | Michaël Zasso <targos@protonmail.com> | 2018-09-21 09:14:51 +0200 |
---|---|---|
committer | Michaël Zasso <targos@protonmail.com> | 2018-09-22 18:29:25 +0200 |
commit | 0e7ddbd3d7e9439c67573b854c49cf82c398ae82 (patch) | |
tree | 2afe372acde921cb57ddb3444ff00c5adef8848c /deps/v8/src/torque/types.cc | |
parent | 13245dc50da4cb7443c39ef6c68d419d5e6336d4 (diff) | |
download | android-node-v8-0e7ddbd3d7e9439c67573b854c49cf82c398ae82.tar.gz android-node-v8-0e7ddbd3d7e9439c67573b854c49cf82c398ae82.tar.bz2 android-node-v8-0e7ddbd3d7e9439c67573b854c49cf82c398ae82.zip |
deps: update V8 to 7.0.276.20
PR-URL: https://github.com/nodejs/node/pull/22754
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Refael Ackermann <refack@gmail.com>
Reviewed-By: Ali Ijaz Sheikh <ofrobots@google.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Diffstat (limited to 'deps/v8/src/torque/types.cc')
-rw-r--r-- | deps/v8/src/torque/types.cc | 39 |
1 files changed, 36 insertions, 3 deletions
diff --git a/deps/v8/src/torque/types.cc b/deps/v8/src/torque/types.cc index 3ba7846678..261f085edb 100644 --- a/deps/v8/src/torque/types.cc +++ b/deps/v8/src/torque/types.cc @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include <fstream> #include <iostream> #include "src/torque/declarable.h" @@ -33,6 +32,7 @@ std::string Type::ToString() const { } bool Type::IsSubtypeOf(const Type* supertype) const { + if (IsNever()) return true; if (const UnionType* union_type = UnionType::DynamicCast(supertype)) { return union_type->IsSupertypeOf(this); } @@ -154,6 +154,36 @@ const Type* UnionType::NonConstexprVersion() const { return this; } +void UnionType::RecomputeParent() { + const Type* parent = nullptr; + for (const Type* t : types_) { + if (parent == nullptr) { + parent = t; + } else { + parent = CommonSupertype(parent, t); + } + } + set_parent(parent); +} + +void UnionType::Subtract(const Type* t) { + for (auto it = types_.begin(); it != types_.end();) { + if ((*it)->IsSubtypeOf(t)) { + it = types_.erase(it); + } else { + ++it; + } + } + if (types_.size() == 0) types_.insert(TypeOracle::GetNeverType()); + RecomputeParent(); +} + +const Type* SubtractType(const Type* a, const Type* b) { + UnionType result = UnionType::FromType(a); + result.Subtract(b); + return TypeOracle::GetUnionType(result); +} + std::string StructType::ToExplicitString() const { std::stringstream result; result << "{"; @@ -271,6 +301,7 @@ std::string VisitResult::LValue() const { } std::string VisitResult::RValue() const { + std::string result; if (declarable()) { auto value = *declarable(); if (value->IsVariable() && !Variable::cast(value)->IsDefined()) { @@ -278,10 +309,12 @@ std::string VisitResult::RValue() const { s << "\"" << value->name() << "\" is used before it is defined"; ReportError(s.str()); } - return value->RValue(); + result = value->RValue(); } else { - return value_; + result = value_; } + return "implicit_cast<" + type()->GetGeneratedTypeName() + ">(" + result + + ")"; } } // namespace torque |