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

Side by Side Diff: src/types.cc

Issue 1700923002: Move FieldType to separate h/cc files. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 10 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 unified diff | Download patch
« no previous file with comments | « src/types.h ('k') | tools/gyp/v8.gyp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 <iomanip> 5 #include <iomanip>
6 6
7 #include "src/types.h" 7 #include "src/types.h"
8 8
9 #include "src/handles-inl.h" 9 #include "src/handles-inl.h"
10 #include "src/ostreams.h" 10 #include "src/ostreams.h"
(...skipping 1240 matching lines...) Expand 10 before | Expand all | Expand 10 after
1251 PrintTo(os); 1251 PrintTo(os);
1252 os << std::endl; 1252 os << std::endl;
1253 } 1253 }
1254 void BitsetType::Print(bitset bits) { 1254 void BitsetType::Print(bitset bits) {
1255 OFStream os(stdout); 1255 OFStream os(stdout);
1256 Print(os, bits); 1256 Print(os, bits);
1257 os << std::endl; 1257 os << std::endl;
1258 } 1258 }
1259 #endif 1259 #endif
1260 1260
1261 // static
1262 FieldType* FieldType::None() {
1263 return reinterpret_cast<FieldType*>(Smi::FromInt(0));
1264 }
1265
1266 // static
1267 FieldType* FieldType::Any() {
1268 return reinterpret_cast<FieldType*>(Smi::FromInt(1));
1269 }
1270
1271 // static
1272 Handle<FieldType> FieldType::None(Isolate* isolate) {
1273 return handle(None(), isolate);
1274 }
1275
1276 // static
1277 Handle<FieldType> FieldType::Any(Isolate* isolate) {
1278 return handle(Any(), isolate);
1279 }
1280
1281 // static
1282 FieldType* FieldType::Class(i::Map* map) { return FieldType::cast(map); }
1283
1284 // static
1285 Handle<FieldType> FieldType::Class(i::Handle<i::Map> map, Isolate* isolate) {
1286 return handle(Class(*map), isolate);
1287 }
1288
1289 // static
1290 FieldType* FieldType::cast(Object* object) {
1291 DCHECK(object == None() || object == Any() || object->IsMap());
1292 return reinterpret_cast<FieldType*>(object);
1293 }
1294
1295 bool FieldType::NowContains(Object* value) {
1296 if (this == Any()) return true;
1297 if (this == None()) return false;
1298 if (!value->IsHeapObject()) return false;
1299 return HeapObject::cast(value)->map() == Map::cast(this);
1300 }
1301
1302 bool FieldType::NowContains(Handle<Object> value) {
1303 return NowContains(*value);
1304 }
1305
1306 bool FieldType::IsClass() { return this->IsMap(); }
1307
1308 Handle<i::Map> FieldType::AsClass() {
1309 DCHECK(IsClass());
1310 i::Map* map = Map::cast(this);
1311 return handle(map, map->GetIsolate());
1312 }
1313
1314 bool FieldType::NowStable() {
1315 return !this->IsClass() || this->AsClass()->is_stable();
1316 }
1317
1318 bool FieldType::NowIs(FieldType* other) {
1319 if (other->IsAny()) return true;
1320 if (IsNone()) return true;
1321 if (other->IsNone()) return false;
1322 if (IsAny()) return false;
1323 DCHECK(IsClass());
1324 DCHECK(other->IsClass());
1325 return this == other;
1326 }
1327
1328 bool FieldType::NowIs(Handle<FieldType> other) { return NowIs(*other); }
1329
1330 Type* FieldType::Convert(Zone* zone) {
1331 if (IsAny()) return Type::Any();
1332 if (IsNone()) return Type::None();
1333 DCHECK(IsClass());
1334 return Type::Class(AsClass(), zone);
1335 }
1336
1337 void FieldType::PrintTo(std::ostream& os) {
1338 if (IsAny()) {
1339 os << "Any";
1340 } else if (IsNone()) {
1341 os << "None";
1342 } else {
1343 DCHECK(IsClass());
1344 os << "Class(" << static_cast<void*>(*AsClass()) << ")";
1345 }
1346 }
1347
1348 BitsetType::bitset BitsetType::SignedSmall() { 1261 BitsetType::bitset BitsetType::SignedSmall() {
1349 return i::SmiValuesAre31Bits() ? kSigned31 : kSigned32; 1262 return i::SmiValuesAre31Bits() ? kSigned31 : kSigned32;
1350 } 1263 }
1351 1264
1352 BitsetType::bitset BitsetType::UnsignedSmall() { 1265 BitsetType::bitset BitsetType::UnsignedSmall() {
1353 return i::SmiValuesAre31Bits() ? kUnsigned30 : kUnsigned31; 1266 return i::SmiValuesAre31Bits() ? kUnsigned30 : kUnsigned31;
1354 } 1267 }
1355 1268
1356 #define CONSTRUCT_SIMD_TYPE(NAME, Name, name, lane_count, lane_type) \ 1269 #define CONSTRUCT_SIMD_TYPE(NAME, Name, name, lane_count, lane_type) \
1357 Type* Type::Name(Isolate* isolate, Zone* zone) { \ 1270 Type* Type::Name(Isolate* isolate, Zone* zone) { \
1358 return Class(i::handle(isolate->heap()->name##_map()), zone); \ 1271 return Class(i::handle(isolate->heap()->name##_map()), zone); \
1359 } 1272 }
1360 SIMD128_TYPES(CONSTRUCT_SIMD_TYPE) 1273 SIMD128_TYPES(CONSTRUCT_SIMD_TYPE)
1361 #undef CONSTRUCT_SIMD_TYPE 1274 #undef CONSTRUCT_SIMD_TYPE
1362 1275
1363 // ----------------------------------------------------------------------------- 1276 // -----------------------------------------------------------------------------
1364 // Instantiations. 1277 // Instantiations.
1365 1278
1366 template class Type::Iterator<i::Map>; 1279 template class Type::Iterator<i::Map>;
1367 template class Type::Iterator<i::Object>; 1280 template class Type::Iterator<i::Object>;
1368 1281
1369 } // namespace internal 1282 } // namespace internal
1370 } // namespace v8 1283 } // namespace v8
OLDNEW
« no previous file with comments | « src/types.h ('k') | tools/gyp/v8.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698