summaryrefslogtreecommitdiff
path: root/deps/v8/src/torque/types.cc
diff options
context:
space:
mode:
authorMichaël Zasso <targos@protonmail.com>2018-09-21 09:14:51 +0200
committerMichaël Zasso <targos@protonmail.com>2018-09-22 18:29:25 +0200
commit0e7ddbd3d7e9439c67573b854c49cf82c398ae82 (patch)
tree2afe372acde921cb57ddb3444ff00c5adef8848c /deps/v8/src/torque/types.cc
parent13245dc50da4cb7443c39ef6c68d419d5e6336d4 (diff)
downloadandroid-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.cc39
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