| Index: src/compiler/typer.cc
|
| diff --git a/src/compiler/typer.cc b/src/compiler/typer.cc
|
| index a170a71512b4be188be53908868e64c3911325ed..2caeb9b94ba02489b0bc034397f77b0ef4c7ab78 100644
|
| --- a/src/compiler/typer.cc
|
| +++ b/src/compiler/typer.cc
|
| @@ -33,10 +33,11 @@ enum LazyCachedType {
|
| kImulFunc,
|
| kClz32Func,
|
| kArrayBufferFunc,
|
| -#define NATIVE_TYPE_CASE(Type) k##Type, k##Type##Array, k##Type##ArrayFunc,
|
| - NATIVE_TYPES(NATIVE_TYPE_CASE)
|
| -#undef NATIVE_TYPE_CASE
|
| - kNumLazyCachedTypes
|
| +#define TYPED_ARRAY_CASE(Type, type, TYPE, ctype, size) \
|
| + k##Type, k##Type##Array, k##Type##ArrayFunc,
|
| + TYPED_ARRAYS(TYPED_ARRAY_CASE)
|
| +#undef TYPED_ARRAY_CASE
|
| + kNumLazyCachedTypes
|
| };
|
|
|
|
|
| @@ -75,6 +76,8 @@ class LazyTypeCache FINAL : public ZoneObject {
|
| return CreateNative(Type::Number(), Type::UntaggedFloat32());
|
| case kFloat64:
|
| return CreateNative(Type::Number(), Type::UntaggedFloat64());
|
| + case kUint8Clamped:
|
| + return Get(kUint8);
|
| case kNumberFunc0:
|
| return Type::Function(Type::Number(), zone());
|
| case kNumberFunc1:
|
| @@ -89,13 +92,13 @@ class LazyTypeCache FINAL : public ZoneObject {
|
| return Type::Function(CreateRange(0, 32), Type::Number(), zone());
|
| case kArrayBufferFunc:
|
| return Type::Function(Type::Object(zone()), Type::Unsigned32(), zone());
|
| -#define NATIVE_TYPE_CASE(Type) \
|
| - case k##Type##Array: \
|
| - return CreateArray(Get(k##Type)); \
|
| - case k##Type##ArrayFunc: \
|
| +#define TYPED_ARRAY_CASE(Type, type, TYPE, ctype, size) \
|
| + case k##Type##Array: \
|
| + return CreateArray(Get(k##Type)); \
|
| + case k##Type##ArrayFunc: \
|
| return CreateArrayFunction(Get(k##Type##Array));
|
| - NATIVE_TYPES(NATIVE_TYPE_CASE)
|
| -#undef NATIVE_TYPE_CASE
|
| + TYPED_ARRAYS(TYPED_ARRAY_CASE)
|
| +#undef TYPED_ARRAY_CASE
|
| case kNumLazyCachedTypes:
|
| break;
|
| }
|
| @@ -1615,13 +1618,11 @@ Bounds Typer::Visitor::TypeLoadBuffer(Node* node) {
|
| // TODO(bmeurer): This typing is not yet correct. Since we can still access
|
| // out of bounds, the type in the general case has to include Undefined.
|
| switch (BufferAccessOf(node->op()).external_array_type()) {
|
| -#define NATIVE_TYPE_CASE(Type) \
|
| - case kExternal##Type##Array: \
|
| +#define TYPED_ARRAY_CASE(Type, type, TYPE, ctype, size) \
|
| + case kExternal##Type##Array: \
|
| return Bounds(typer_->cache_->Get(k##Type));
|
| - NATIVE_TYPES(NATIVE_TYPE_CASE)
|
| -#undef NATIVE_TYPE_CASE
|
| - case kExternalUint8ClampedArray:
|
| - break;
|
| + TYPED_ARRAYS(TYPED_ARRAY_CASE)
|
| +#undef TYPED_ARRAY_CASE
|
| }
|
| UNREACHABLE();
|
| return Bounds();
|
| @@ -2088,14 +2089,11 @@ Type* Typer::Visitor::TypeConstant(Handle<Object> value) {
|
| }
|
| } else if (value->IsJSTypedArray()) {
|
| switch (JSTypedArray::cast(*value)->type()) {
|
| -#define NATIVE_TYPE_CASE(Type) \
|
| - case kExternal##Type##Array: \
|
| +#define TYPED_ARRAY_CASE(Type, type, TYPE, ctype, size) \
|
| + case kExternal##Type##Array: \
|
| return typer_->cache_->Get(k##Type##Array);
|
| - NATIVE_TYPES(NATIVE_TYPE_CASE)
|
| -#undef NATIVE_TYPE_CASE
|
| - case kExternalUint8ClampedArray:
|
| - // TODO(rossberg): Do we want some ClampedArray type to express this?
|
| - break;
|
| + TYPED_ARRAYS(TYPED_ARRAY_CASE)
|
| +#undef TYPED_ARRAY_CASE
|
| }
|
| }
|
| return Type::Constant(value, zone());
|
|
|