Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(341)

Unified Diff: src/types.h

Issue 1631583002: [for-in] Further refactorings and unification around for-in. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/runtime/runtime-object.cc ('k') | src/types.cc » ('j') | src/types.cc » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/types.h
diff --git a/src/types.h b/src/types.h
index 9ce650d943d4d6d1e238d0e86e9d67e37e915241..7f224090adbd5e03f1a81dfe3d96ac52bb781a58 100644
--- a/src/types.h
+++ b/src/types.h
@@ -332,6 +332,7 @@ class TypeImpl : public Config::Base {
class ContextType;
class ArrayType;
class FunctionType;
+ class TupleType;
typedef typename Config::template Handle<TypeImpl>::type TypeHandle;
typedef typename Config::template Handle<ClassType>::type ClassHandle;
@@ -341,6 +342,7 @@ class TypeImpl : public Config::Base {
typedef typename Config::template Handle<ArrayType>::type ArrayHandle;
typedef typename Config::template Handle<FunctionType>::type FunctionHandle;
typedef typename Config::template Handle<UnionType>::type UnionHandle;
+ typedef typename Config::template Handle<TupleType>::type TupleHandle;
typedef typename Config::Region Region;
// Constructors.
@@ -424,6 +426,14 @@ class TypeImpl : public Config::Base {
}
return function;
}
+ static TypeHandle Tuple(TypeHandle first, TypeHandle second, TypeHandle third,
+ Region* region) {
+ TupleHandle tuple = TupleType::New(3, region);
+ tuple->InitElement(0, first);
+ tuple->InitElement(1, second);
+ tuple->InitElement(2, third);
+ return tuple;
+ }
#define CONSTRUCT_SIMD_TYPE(NAME, Name, name, lane_count, lane_type) \
static TypeHandle Name(Isolate* isolate, Region* region);
@@ -501,6 +511,7 @@ class TypeImpl : public Config::Base {
bool IsFunction() {
return Config::is_struct(this, StructuralType::kFunctionTag);
}
+ bool IsTuple() { return Config::is_struct(this, StructuralType::kTupleTag); }
ClassType* AsClass() { return ClassType::cast(this); }
ConstantType* AsConstant() { return ConstantType::cast(this); }
@@ -508,6 +519,7 @@ class TypeImpl : public Config::Base {
ContextType* AsContext() { return ContextType::cast(this); }
ArrayType* AsArray() { return ArrayType::cast(this); }
FunctionType* AsFunction() { return FunctionType::cast(this); }
+ TupleType* AsTuple() { return TupleType::cast(this); }
// Minimum and maximum of a numeric type.
// These functions do not distinguish between -0 and +0. If the type equals
@@ -724,6 +736,7 @@ class TypeImpl<Config>::StructuralType : public TypeImpl<Config> {
kContextTag,
kArrayTag,
kFunctionTag,
+ kTupleTag,
kUnionTag
};
@@ -967,6 +980,30 @@ class TypeImpl<Config>::FunctionType : public StructuralType {
// -----------------------------------------------------------------------------
+// Tuple types.
+
+template <class Config>
+class TypeImpl<Config>::TupleType : public StructuralType {
+ public:
+ int Arity() { return this->Length(); }
+ TypeHandle Element(int i) { return this->Get(i); }
+
+ void InitElement(int i, TypeHandle type) { this->Set(i, type); }
+
+ static TupleHandle New(int length, Region* region) {
+ TupleHandle type = Config::template cast<TupleType>(
+ StructuralType::New(StructuralType::kTupleTag, length, region));
+ return type;
+ }
+
+ static TupleType* cast(TypeImpl* type) {
+ DCHECK(type->IsTuple());
+ return static_cast<TupleType*>(type);
+ }
+};
+
+
+// -----------------------------------------------------------------------------
// Type iterators.
template<class Config> template<class T>
« no previous file with comments | « src/runtime/runtime-object.cc ('k') | src/types.cc » ('j') | src/types.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698