| OLD | NEW |
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 44 class HandlifiedTypes { | 44 class HandlifiedTypes { |
| 45 public: | 45 public: |
| 46 explicit HandlifiedTypes(Isolate* isolate) : | 46 explicit HandlifiedTypes(Isolate* isolate) : |
| 47 None(Type::None(), isolate), | 47 None(Type::None(), isolate), |
| 48 Any(Type::Any(), isolate), | 48 Any(Type::Any(), isolate), |
| 49 Oddball(Type::Oddball(), isolate), | 49 Oddball(Type::Oddball(), isolate), |
| 50 Boolean(Type::Boolean(), isolate), | 50 Boolean(Type::Boolean(), isolate), |
| 51 Null(Type::Null(), isolate), | 51 Null(Type::Null(), isolate), |
| 52 Undefined(Type::Undefined(), isolate), | 52 Undefined(Type::Undefined(), isolate), |
| 53 Number(Type::Number(), isolate), | 53 Number(Type::Number(), isolate), |
| 54 Smi(Type::Smi(), isolate), | 54 Integer31(Type::Integer31(), isolate), |
| 55 Integer32(Type::Integer32(), isolate), |
| 55 Double(Type::Double(), isolate), | 56 Double(Type::Double(), isolate), |
| 56 Name(Type::Name(), isolate), | 57 Name(Type::Name(), isolate), |
| 57 UniqueName(Type::UniqueName(), isolate), | 58 UniqueName(Type::UniqueName(), isolate), |
| 58 String(Type::String(), isolate), | 59 String(Type::String(), isolate), |
| 59 InternalizedString(Type::InternalizedString(), isolate), | 60 InternalizedString(Type::InternalizedString(), isolate), |
| 60 Symbol(Type::Symbol(), isolate), | 61 Symbol(Type::Symbol(), isolate), |
| 61 Receiver(Type::Receiver(), isolate), | 62 Receiver(Type::Receiver(), isolate), |
| 62 Object(Type::Object(), isolate), | 63 Object(Type::Object(), isolate), |
| 63 Array(Type::Array(), isolate), | 64 Array(Type::Array(), isolate), |
| 64 Function(Type::Function(), isolate), | 65 Function(Type::Function(), isolate), |
| 65 Proxy(Type::Proxy(), isolate), | 66 Proxy(Type::Proxy(), isolate), |
| 66 object_map(isolate->factory()->NewMap(JS_OBJECT_TYPE, 3 * kPointerSize)), | 67 object_map(isolate->factory()->NewMap(JS_OBJECT_TYPE, 3 * kPointerSize)), |
| 67 array_map(isolate->factory()->NewMap(JS_ARRAY_TYPE, 4 * kPointerSize)), | 68 array_map(isolate->factory()->NewMap(JS_ARRAY_TYPE, 4 * kPointerSize)), |
| 68 isolate_(isolate) { | 69 isolate_(isolate) { |
| 69 smi = handle(Smi::FromInt(666), isolate); | 70 smi = handle(Smi::FromInt(666), isolate); |
| 70 object1 = isolate->factory()->NewJSObjectFromMap(object_map); | 71 object1 = isolate->factory()->NewJSObjectFromMap(object_map); |
| 71 object2 = isolate->factory()->NewJSObjectFromMap(object_map); | 72 object2 = isolate->factory()->NewJSObjectFromMap(object_map); |
| 72 array = isolate->factory()->NewJSArray(20); | 73 array = isolate->factory()->NewJSArray(20); |
| 73 ObjectClass = handle(Type::Class(object_map), isolate); | 74 ObjectClass = handle(Type::Class(object_map), isolate); |
| 74 ArrayClass = handle(Type::Class(array_map), isolate); | 75 ArrayClass = handle(Type::Class(array_map), isolate); |
| 75 SmiConstant = handle(Type::Constant(smi, isolate), isolate); | 76 Integer31Constant = handle(Type::Constant(smi, isolate), isolate); |
| 76 ObjectConstant1 = handle(Type::Constant(object1), isolate); | 77 ObjectConstant1 = handle(Type::Constant(object1), isolate); |
| 77 ObjectConstant2 = handle(Type::Constant(object2), isolate); | 78 ObjectConstant2 = handle(Type::Constant(object2), isolate); |
| 78 ArrayConstant = handle(Type::Constant(array), isolate); | 79 ArrayConstant = handle(Type::Constant(array), isolate); |
| 79 } | 80 } |
| 80 | 81 |
| 81 Handle<Type> None; | 82 Handle<Type> None; |
| 82 Handle<Type> Any; | 83 Handle<Type> Any; |
| 83 Handle<Type> Oddball; | 84 Handle<Type> Oddball; |
| 84 Handle<Type> Boolean; | 85 Handle<Type> Boolean; |
| 85 Handle<Type> Null; | 86 Handle<Type> Null; |
| 86 Handle<Type> Undefined; | 87 Handle<Type> Undefined; |
| 87 Handle<Type> Number; | 88 Handle<Type> Number; |
| 88 Handle<Type> Smi; | 89 Handle<Type> Integer31; |
| 90 Handle<Type> Integer32; |
| 89 Handle<Type> Double; | 91 Handle<Type> Double; |
| 90 Handle<Type> Name; | 92 Handle<Type> Name; |
| 91 Handle<Type> UniqueName; | 93 Handle<Type> UniqueName; |
| 92 Handle<Type> String; | 94 Handle<Type> String; |
| 93 Handle<Type> InternalizedString; | 95 Handle<Type> InternalizedString; |
| 94 Handle<Type> Symbol; | 96 Handle<Type> Symbol; |
| 95 Handle<Type> Receiver; | 97 Handle<Type> Receiver; |
| 96 Handle<Type> Object; | 98 Handle<Type> Object; |
| 97 Handle<Type> Array; | 99 Handle<Type> Array; |
| 98 Handle<Type> Function; | 100 Handle<Type> Function; |
| 99 Handle<Type> Proxy; | 101 Handle<Type> Proxy; |
| 100 | 102 |
| 101 Handle<Type> ObjectClass; | 103 Handle<Type> ObjectClass; |
| 102 Handle<Type> ArrayClass; | 104 Handle<Type> ArrayClass; |
| 103 | 105 |
| 104 Handle<Type> SmiConstant; | 106 Handle<Type> Integer31Constant; |
| 105 Handle<Type> ObjectConstant1; | 107 Handle<Type> ObjectConstant1; |
| 106 Handle<Type> ObjectConstant2; | 108 Handle<Type> ObjectConstant2; |
| 107 Handle<Type> ArrayConstant; | 109 Handle<Type> ArrayConstant; |
| 108 | 110 |
| 109 Handle<Map> object_map; | 111 Handle<Map> object_map; |
| 110 Handle<Map> array_map; | 112 Handle<Map> array_map; |
| 111 | 113 |
| 112 Handle<v8::internal::Smi> smi; | 114 Handle<v8::internal::Smi> smi; |
| 113 Handle<JSObject> object1; | 115 Handle<JSObject> object1; |
| 114 Handle<JSObject> object2; | 116 Handle<JSObject> object2; |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 161 CHECK(*T.array_map == AsClass(*T.ArrayClass)); | 163 CHECK(*T.array_map == AsClass(*T.ArrayClass)); |
| 162 } | 164 } |
| 163 | 165 |
| 164 | 166 |
| 165 TEST(Constant) { | 167 TEST(Constant) { |
| 166 CcTest::InitializeVM(); | 168 CcTest::InitializeVM(); |
| 167 Isolate* isolate = Isolate::Current(); | 169 Isolate* isolate = Isolate::Current(); |
| 168 HandleScope scope(isolate); | 170 HandleScope scope(isolate); |
| 169 HandlifiedTypes T(isolate); | 171 HandlifiedTypes T(isolate); |
| 170 | 172 |
| 171 CHECK(IsConstant(*T.SmiConstant)); | 173 CHECK(IsConstant(*T.Integer31Constant)); |
| 172 CHECK(IsConstant(*T.ObjectConstant1)); | 174 CHECK(IsConstant(*T.ObjectConstant1)); |
| 173 CHECK(IsConstant(*T.ObjectConstant2)); | 175 CHECK(IsConstant(*T.ObjectConstant2)); |
| 174 CHECK(IsConstant(*T.ArrayConstant)); | 176 CHECK(IsConstant(*T.ArrayConstant)); |
| 175 | 177 |
| 176 CHECK(*T.smi == AsConstant(*T.SmiConstant)); | 178 CHECK(*T.smi == AsConstant(*T.Integer31Constant)); |
| 177 CHECK(*T.object1 == AsConstant(*T.ObjectConstant1)); | 179 CHECK(*T.object1 == AsConstant(*T.ObjectConstant1)); |
| 178 CHECK(*T.object2 == AsConstant(*T.ObjectConstant2)); | 180 CHECK(*T.object2 == AsConstant(*T.ObjectConstant2)); |
| 179 CHECK(*T.object1 != AsConstant(*T.ObjectConstant2)); | 181 CHECK(*T.object1 != AsConstant(*T.ObjectConstant2)); |
| 180 CHECK(*T.array == AsConstant(*T.ArrayConstant)); | 182 CHECK(*T.array == AsConstant(*T.ArrayConstant)); |
| 181 } | 183 } |
| 182 | 184 |
| 183 | 185 |
| 184 static void CheckSub(Handle<Type> type1, Handle<Type> type2) { | 186 static void CheckSub(Handle<Type> type1, Handle<Type> type2) { |
| 185 CHECK(type1->Is(type2)); | 187 CHECK(type1->Is(type2)); |
| 186 CHECK(!type2->Is(type1)); | 188 CHECK(!type2->Is(type1)); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 217 | 219 |
| 218 CheckSub(T.Oddball, T.Any); | 220 CheckSub(T.Oddball, T.Any); |
| 219 CheckSub(T.Boolean, T.Oddball); | 221 CheckSub(T.Boolean, T.Oddball); |
| 220 CheckSub(T.Null, T.Oddball); | 222 CheckSub(T.Null, T.Oddball); |
| 221 CheckSub(T.Undefined, T.Oddball); | 223 CheckSub(T.Undefined, T.Oddball); |
| 222 CheckUnordered(T.Boolean, T.Null); | 224 CheckUnordered(T.Boolean, T.Null); |
| 223 CheckUnordered(T.Undefined, T.Null); | 225 CheckUnordered(T.Undefined, T.Null); |
| 224 CheckUnordered(T.Boolean, T.Undefined); | 226 CheckUnordered(T.Boolean, T.Undefined); |
| 225 | 227 |
| 226 CheckSub(T.Number, T.Any); | 228 CheckSub(T.Number, T.Any); |
| 227 CheckSub(T.Smi, T.Number); | 229 CheckSub(T.Integer31, T.Number); |
| 230 CheckSub(T.Integer32, T.Number); |
| 228 CheckSub(T.Double, T.Number); | 231 CheckSub(T.Double, T.Number); |
| 229 CheckUnordered(T.Smi, T.Double); | 232 CheckSub(T.Integer31, T.Integer32); |
| 233 CheckUnordered(T.Integer31, T.Double); |
| 234 CheckUnordered(T.Integer32, T.Double); |
| 230 | 235 |
| 231 CheckSub(T.Name, T.Any); | 236 CheckSub(T.Name, T.Any); |
| 232 CheckSub(T.UniqueName, T.Any); | 237 CheckSub(T.UniqueName, T.Any); |
| 233 CheckSub(T.UniqueName, T.Name); | 238 CheckSub(T.UniqueName, T.Name); |
| 234 CheckSub(T.String, T.Name); | 239 CheckSub(T.String, T.Name); |
| 235 CheckSub(T.InternalizedString, T.String); | 240 CheckSub(T.InternalizedString, T.String); |
| 236 CheckSub(T.InternalizedString, T.UniqueName); | 241 CheckSub(T.InternalizedString, T.UniqueName); |
| 237 CheckSub(T.InternalizedString, T.Name); | 242 CheckSub(T.InternalizedString, T.Name); |
| 238 CheckSub(T.Symbol, T.UniqueName); | 243 CheckSub(T.Symbol, T.UniqueName); |
| 239 CheckSub(T.Symbol, T.Name); | 244 CheckSub(T.Symbol, T.Name); |
| 240 CheckUnordered(T.String, T.UniqueName); | 245 CheckUnordered(T.String, T.UniqueName); |
| 241 CheckUnordered(T.String, T.Symbol); | 246 CheckUnordered(T.String, T.Symbol); |
| 242 CheckUnordered(T.InternalizedString, T.Symbol); | 247 CheckUnordered(T.InternalizedString, T.Symbol); |
| 243 | 248 |
| 244 CheckSub(T.Receiver, T.Any); | 249 CheckSub(T.Receiver, T.Any); |
| 245 CheckSub(T.Object, T.Any); | 250 CheckSub(T.Object, T.Any); |
| 246 CheckSub(T.Object, T.Receiver); | 251 CheckSub(T.Object, T.Receiver); |
| 247 CheckSub(T.Array, T.Object); | 252 CheckSub(T.Array, T.Object); |
| 248 CheckSub(T.Function, T.Object); | 253 CheckSub(T.Function, T.Object); |
| 249 CheckSub(T.Proxy, T.Receiver); | 254 CheckSub(T.Proxy, T.Receiver); |
| 250 CheckUnordered(T.Object, T.Proxy); | 255 CheckUnordered(T.Object, T.Proxy); |
| 251 CheckUnordered(T.Array, T.Function); | 256 CheckUnordered(T.Array, T.Function); |
| 252 | 257 |
| 253 // Structured subtyping | 258 // Structured subtyping |
| 254 CheckSub(T.ObjectClass, T.Object); | 259 CheckSub(T.ObjectClass, T.Object); |
| 255 CheckSub(T.ArrayClass, T.Object); | 260 CheckSub(T.ArrayClass, T.Object); |
| 256 CheckUnordered(T.ObjectClass, T.ArrayClass); | 261 CheckUnordered(T.ObjectClass, T.ArrayClass); |
| 257 | 262 |
| 258 CheckSub(T.SmiConstant, T.Smi); | 263 CheckSub(T.Integer31Constant, T.Integer31); |
| 259 CheckSub(T.SmiConstant, T.Number); | 264 CheckSub(T.Integer31Constant, T.Integer32); |
| 265 CheckSub(T.Integer31Constant, T.Number); |
| 260 CheckSub(T.ObjectConstant1, T.Object); | 266 CheckSub(T.ObjectConstant1, T.Object); |
| 261 CheckSub(T.ObjectConstant2, T.Object); | 267 CheckSub(T.ObjectConstant2, T.Object); |
| 262 CheckSub(T.ArrayConstant, T.Object); | 268 CheckSub(T.ArrayConstant, T.Object); |
| 263 CheckSub(T.ArrayConstant, T.Array); | 269 CheckSub(T.ArrayConstant, T.Array); |
| 264 CheckUnordered(T.ObjectConstant1, T.ObjectConstant2); | 270 CheckUnordered(T.ObjectConstant1, T.ObjectConstant2); |
| 265 CheckUnordered(T.ObjectConstant1, T.ArrayConstant); | 271 CheckUnordered(T.ObjectConstant1, T.ArrayConstant); |
| 266 | 272 |
| 267 CheckUnordered(T.ObjectConstant1, T.ObjectClass); | 273 CheckUnordered(T.ObjectConstant1, T.ObjectClass); |
| 268 CheckUnordered(T.ObjectConstant2, T.ObjectClass); | 274 CheckUnordered(T.ObjectConstant2, T.ObjectClass); |
| 269 CheckUnordered(T.ObjectConstant1, T.ArrayClass); | 275 CheckUnordered(T.ObjectConstant1, T.ArrayClass); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 301 | 307 |
| 302 CheckOverlap(T.Oddball, T.Any); | 308 CheckOverlap(T.Oddball, T.Any); |
| 303 CheckOverlap(T.Boolean, T.Oddball); | 309 CheckOverlap(T.Boolean, T.Oddball); |
| 304 CheckOverlap(T.Null, T.Oddball); | 310 CheckOverlap(T.Null, T.Oddball); |
| 305 CheckOverlap(T.Undefined, T.Oddball); | 311 CheckOverlap(T.Undefined, T.Oddball); |
| 306 CheckDisjoint(T.Boolean, T.Null); | 312 CheckDisjoint(T.Boolean, T.Null); |
| 307 CheckDisjoint(T.Undefined, T.Null); | 313 CheckDisjoint(T.Undefined, T.Null); |
| 308 CheckDisjoint(T.Boolean, T.Undefined); | 314 CheckDisjoint(T.Boolean, T.Undefined); |
| 309 | 315 |
| 310 CheckOverlap(T.Number, T.Any); | 316 CheckOverlap(T.Number, T.Any); |
| 311 CheckOverlap(T.Smi, T.Number); | 317 CheckOverlap(T.Integer31, T.Number); |
| 312 CheckOverlap(T.Double, T.Number); | 318 CheckOverlap(T.Double, T.Number); |
| 313 CheckDisjoint(T.Smi, T.Double); | 319 CheckDisjoint(T.Integer32, T.Double); |
| 314 | 320 |
| 315 CheckOverlap(T.Name, T.Any); | 321 CheckOverlap(T.Name, T.Any); |
| 316 CheckOverlap(T.UniqueName, T.Any); | 322 CheckOverlap(T.UniqueName, T.Any); |
| 317 CheckOverlap(T.UniqueName, T.Name); | 323 CheckOverlap(T.UniqueName, T.Name); |
| 318 CheckOverlap(T.String, T.Name); | 324 CheckOverlap(T.String, T.Name); |
| 319 CheckOverlap(T.InternalizedString, T.String); | 325 CheckOverlap(T.InternalizedString, T.String); |
| 320 CheckOverlap(T.InternalizedString, T.UniqueName); | 326 CheckOverlap(T.InternalizedString, T.UniqueName); |
| 321 CheckOverlap(T.InternalizedString, T.Name); | 327 CheckOverlap(T.InternalizedString, T.Name); |
| 322 CheckOverlap(T.Symbol, T.UniqueName); | 328 CheckOverlap(T.Symbol, T.UniqueName); |
| 323 CheckOverlap(T.Symbol, T.Name); | 329 CheckOverlap(T.Symbol, T.Name); |
| 324 CheckOverlap(T.String, T.UniqueName); | 330 CheckOverlap(T.String, T.UniqueName); |
| 325 CheckDisjoint(T.String, T.Symbol); | 331 CheckDisjoint(T.String, T.Symbol); |
| 326 CheckDisjoint(T.InternalizedString, T.Symbol); | 332 CheckDisjoint(T.InternalizedString, T.Symbol); |
| 327 | 333 |
| 328 CheckOverlap(T.Receiver, T.Any); | 334 CheckOverlap(T.Receiver, T.Any); |
| 329 CheckOverlap(T.Object, T.Any); | 335 CheckOverlap(T.Object, T.Any); |
| 330 CheckOverlap(T.Object, T.Receiver); | 336 CheckOverlap(T.Object, T.Receiver); |
| 331 CheckOverlap(T.Array, T.Object); | 337 CheckOverlap(T.Array, T.Object); |
| 332 CheckOverlap(T.Function, T.Object); | 338 CheckOverlap(T.Function, T.Object); |
| 333 CheckOverlap(T.Proxy, T.Receiver); | 339 CheckOverlap(T.Proxy, T.Receiver); |
| 334 CheckDisjoint(T.Object, T.Proxy); | 340 CheckDisjoint(T.Object, T.Proxy); |
| 335 CheckDisjoint(T.Array, T.Function); | 341 CheckDisjoint(T.Array, T.Function); |
| 336 | 342 |
| 337 CheckOverlap(T.ObjectClass, T.Object); | 343 CheckOverlap(T.ObjectClass, T.Object); |
| 338 CheckOverlap(T.ArrayClass, T.Object); | 344 CheckOverlap(T.ArrayClass, T.Object); |
| 339 CheckOverlap(T.ObjectClass, T.ObjectClass); | 345 CheckOverlap(T.ObjectClass, T.ObjectClass); |
| 340 CheckOverlap(T.ArrayClass, T.ArrayClass); | 346 CheckOverlap(T.ArrayClass, T.ArrayClass); |
| 341 CheckDisjoint(T.ObjectClass, T.ArrayClass); | 347 CheckDisjoint(T.ObjectClass, T.ArrayClass); |
| 342 | 348 |
| 343 CheckOverlap(T.SmiConstant, T.Smi); | 349 CheckOverlap(T.Integer31Constant, T.Integer31); |
| 344 CheckOverlap(T.SmiConstant, T.Number); | 350 CheckOverlap(T.Integer31Constant, T.Integer32); |
| 345 CheckDisjoint(T.SmiConstant, T.Double); | 351 CheckOverlap(T.Integer31Constant, T.Number); |
| 352 CheckDisjoint(T.Integer31Constant, T.Double); |
| 346 CheckOverlap(T.ObjectConstant1, T.Object); | 353 CheckOverlap(T.ObjectConstant1, T.Object); |
| 347 CheckOverlap(T.ObjectConstant2, T.Object); | 354 CheckOverlap(T.ObjectConstant2, T.Object); |
| 348 CheckOverlap(T.ArrayConstant, T.Object); | 355 CheckOverlap(T.ArrayConstant, T.Object); |
| 349 CheckOverlap(T.ArrayConstant, T.Array); | 356 CheckOverlap(T.ArrayConstant, T.Array); |
| 350 CheckOverlap(T.ObjectConstant1, T.ObjectConstant1); | 357 CheckOverlap(T.ObjectConstant1, T.ObjectConstant1); |
| 351 CheckDisjoint(T.ObjectConstant1, T.ObjectConstant2); | 358 CheckDisjoint(T.ObjectConstant1, T.ObjectConstant2); |
| 352 CheckDisjoint(T.ObjectConstant1, T.ArrayConstant); | 359 CheckDisjoint(T.ObjectConstant1, T.ArrayConstant); |
| 353 | 360 |
| 354 CheckDisjoint(T.ObjectConstant1, T.ObjectClass); | 361 CheckDisjoint(T.ObjectConstant1, T.ObjectClass); |
| 355 CheckDisjoint(T.ObjectConstant2, T.ObjectClass); | 362 CheckDisjoint(T.ObjectConstant2, T.ObjectClass); |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 418 CheckOverlap(T.Union(T.ObjectConstant1, T.ArrayConstant), T.Array); | 425 CheckOverlap(T.Union(T.ObjectConstant1, T.ArrayConstant), T.Array); |
| 419 CheckDisjoint(T.Union(T.ObjectConstant1, T.ArrayConstant), T.Number); | 426 CheckDisjoint(T.Union(T.ObjectConstant1, T.ArrayConstant), T.Number); |
| 420 CheckDisjoint(T.Union(T.ObjectConstant1, T.ArrayConstant), T.ObjectClass); | 427 CheckDisjoint(T.Union(T.ObjectConstant1, T.ArrayConstant), T.ObjectClass); |
| 421 | 428 |
| 422 // Bitset-class | 429 // Bitset-class |
| 423 CHECK(IsBitset(Type::Union(T.ObjectClass, T.Object))); | 430 CHECK(IsBitset(Type::Union(T.ObjectClass, T.Object))); |
| 424 CHECK(IsUnion(Type::Union(T.ObjectClass, T.Number))); | 431 CHECK(IsUnion(Type::Union(T.ObjectClass, T.Number))); |
| 425 | 432 |
| 426 CheckEqual(T.Union(T.ObjectClass, T.Object), T.Object); | 433 CheckEqual(T.Union(T.ObjectClass, T.Object), T.Object); |
| 427 CheckSub(T.Union(T.ObjectClass, T.Number), T.Any); | 434 CheckSub(T.Union(T.ObjectClass, T.Number), T.Any); |
| 428 CheckSub(T.Union(T.ObjectClass, T.Smi), T.Union(T.Object, T.Number)); | 435 CheckSub(T.Union(T.ObjectClass, T.Integer31), T.Union(T.Object, T.Number)); |
| 429 CheckSub(T.Union(T.ObjectClass, T.Array), T.Object); | 436 CheckSub(T.Union(T.ObjectClass, T.Array), T.Object); |
| 430 CheckUnordered(T.Union(T.ObjectClass, T.String), T.Array); | 437 CheckUnordered(T.Union(T.ObjectClass, T.String), T.Array); |
| 431 CheckOverlap(T.Union(T.ObjectClass, T.String), T.Object); | 438 CheckOverlap(T.Union(T.ObjectClass, T.String), T.Object); |
| 432 CheckDisjoint(T.Union(T.ObjectClass, T.String), T.Number); | 439 CheckDisjoint(T.Union(T.ObjectClass, T.String), T.Number); |
| 433 | 440 |
| 434 // Bitset-constant | 441 // Bitset-constant |
| 435 CHECK(IsBitset(Type::Union(T.SmiConstant, T.Number))); | 442 CHECK(IsBitset(Type::Union(T.Integer31Constant, T.Number))); |
| 436 CHECK(IsBitset(Type::Union(T.ObjectConstant1, T.Object))); | 443 CHECK(IsBitset(Type::Union(T.ObjectConstant1, T.Object))); |
| 437 CHECK(IsUnion(Type::Union(T.ObjectConstant2, T.Number))); | 444 CHECK(IsUnion(Type::Union(T.ObjectConstant2, T.Number))); |
| 438 | 445 |
| 439 CheckEqual(T.Union(T.SmiConstant, T.Number), T.Number); | 446 CheckEqual(T.Union(T.Integer31Constant, T.Number), T.Number); |
| 440 CheckEqual(T.Union(T.ObjectConstant1, T.Object), T.Object); | 447 CheckEqual(T.Union(T.ObjectConstant1, T.Object), T.Object); |
| 441 CheckSub(T.Union(T.ObjectConstant1, T.Number), T.Any); | 448 CheckSub(T.Union(T.ObjectConstant1, T.Number), T.Any); |
| 442 CheckSub(T.Union(T.ObjectConstant1, T.Smi), T.Union(T.Object, T.Number)); | 449 CheckSub( |
| 450 T.Union(T.ObjectConstant1, T.Integer32), T.Union(T.Object, T.Number)); |
| 443 CheckSub(T.Union(T.ObjectConstant1, T.Array), T.Object); | 451 CheckSub(T.Union(T.ObjectConstant1, T.Array), T.Object); |
| 444 CheckUnordered(T.Union(T.ObjectConstant1, T.String), T.Array); | 452 CheckUnordered(T.Union(T.ObjectConstant1, T.String), T.Array); |
| 445 CheckOverlap(T.Union(T.ObjectConstant1, T.String), T.Object); | 453 CheckOverlap(T.Union(T.ObjectConstant1, T.String), T.Object); |
| 446 CheckDisjoint(T.Union(T.ObjectConstant1, T.String), T.Number); | 454 CheckDisjoint(T.Union(T.ObjectConstant1, T.String), T.Number); |
| 447 | 455 |
| 448 // Class-constant | 456 // Class-constant |
| 449 CHECK(IsUnion(Type::Union(T.ObjectConstant1, T.ObjectClass))); | 457 CHECK(IsUnion(Type::Union(T.ObjectConstant1, T.ObjectClass))); |
| 450 CHECK(IsUnion(Type::Union(T.ArrayClass, T.ObjectConstant2))); | 458 CHECK(IsUnion(Type::Union(T.ArrayClass, T.ObjectConstant2))); |
| 451 | 459 |
| 452 CheckSub(T.Union(T.ObjectConstant1, T.ArrayClass), T.Object); | 460 CheckSub(T.Union(T.ObjectConstant1, T.ArrayClass), T.Object); |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 509 T.Union(T.ArrayConstant, T.ObjectConstant2), T.ObjectConstant1))); | 517 T.Union(T.ArrayConstant, T.ObjectConstant2), T.ObjectConstant1))); |
| 510 | 518 |
| 511 CheckEqual( | 519 CheckEqual( |
| 512 T.Union(T.ObjectConstant1, T.Union(T.ObjectConstant1, T.ObjectConstant2)), | 520 T.Union(T.ObjectConstant1, T.Union(T.ObjectConstant1, T.ObjectConstant2)), |
| 513 T.Union(T.ObjectConstant2, T.ObjectConstant1)); | 521 T.Union(T.ObjectConstant2, T.ObjectConstant1)); |
| 514 CheckEqual( | 522 CheckEqual( |
| 515 T.Union(T.Union(T.ArrayConstant, T.ObjectConstant2), T.ObjectConstant1), | 523 T.Union(T.Union(T.ArrayConstant, T.ObjectConstant2), T.ObjectConstant1), |
| 516 T.Union(T.ObjectConstant2, T.Union(T.ArrayConstant, T.ObjectConstant1))); | 524 T.Union(T.ObjectConstant2, T.Union(T.ArrayConstant, T.ObjectConstant1))); |
| 517 | 525 |
| 518 // Union-union | 526 // Union-union |
| 519 CHECK(IsBitset( | 527 CHECK(IsBitset(Type::Union( |
| 520 Type::Union(T.Union(T.Number, T.ArrayClass), T.Union(T.Smi, T.Array)))); | 528 T.Union(T.Number, T.ArrayClass), T.Union(T.Integer32, T.Array)))); |
| 521 | 529 |
| 522 CheckEqual( | 530 CheckEqual( |
| 523 T.Union(T.Union(T.ObjectConstant2, T.ObjectConstant1), | 531 T.Union(T.Union(T.ObjectConstant2, T.ObjectConstant1), |
| 524 T.Union(T.ObjectConstant1, T.ObjectConstant2)), | 532 T.Union(T.ObjectConstant1, T.ObjectConstant2)), |
| 525 T.Union(T.ObjectConstant2, T.ObjectConstant1)); | 533 T.Union(T.ObjectConstant2, T.ObjectConstant1)); |
| 526 CheckEqual( | 534 CheckEqual( |
| 527 T.Union(T.Union(T.ObjectConstant2, T.ArrayConstant), | 535 T.Union(T.Union(T.ObjectConstant2, T.ArrayConstant), |
| 528 T.Union(T.ObjectConstant1, T.ArrayConstant)), | 536 T.Union(T.ObjectConstant1, T.ArrayConstant)), |
| 529 T.Union(T.Union(T.ObjectConstant1, T.ObjectConstant2), T.ArrayConstant)); | 537 T.Union(T.Union(T.ObjectConstant1, T.ObjectConstant2), T.ArrayConstant)); |
| 530 CheckEqual( | 538 CheckEqual( |
| 531 T.Union(T.Union(T.Number, T.ArrayClass), T.Union(T.Smi, T.Array)), | 539 T.Union(T.Union(T.Number, T.ArrayClass), T.Union(T.Integer31, T.Array)), |
| 532 T.Union(T.Number, T.Array)); | 540 T.Union(T.Number, T.Array)); |
| 533 } | 541 } |
| OLD | NEW |