| Index: src/asmjs/asm-types.h
|
| diff --git a/src/asmjs/asm-types.h b/src/asmjs/asm-types.h
|
| index ad7ab969e12360a0900922ecb3a21027648988d0..c307bf534bbc7e4b5c9174fb98af84a4c148f47c 100644
|
| --- a/src/asmjs/asm-types.h
|
| +++ b/src/asmjs/asm-types.h
|
| @@ -26,33 +26,30 @@ class AsmFunctionTableType;
|
| /* These tags are not types that are expressable in the asm source. They */ \
|
| /* are used to express semantic information about the types they tag. */ \
|
| V(Heap, "[]", 1, 0) \
|
| - /*The following are actual types that appear in the asm source. */ \
|
| - V(Void, "void", 2, 0) \
|
| - V(Extern, "extern", 3, 0) \
|
| - V(DoubleQ, "double?", 4, 0) \
|
| - V(Double, "double", 5, kAsmDoubleQ | kAsmExtern) \
|
| - V(Intish, "intish", 6, 0) \
|
| - V(Int, "int", 7, kAsmIntish) \
|
| - V(Signed, "signed", 8, kAsmInt | kAsmExtern) \
|
| - V(Unsigned, "unsigned", 9, kAsmInt) \
|
| - V(FixNum, "fixnum", 10, kAsmSigned | kAsmUnsigned) \
|
| - V(Floatish, "floatish", 11, 0) \
|
| - V(FloatQ, "float?", 12, kAsmFloatish) \
|
| - V(Float, "float", 13, kAsmFloatQ) \
|
| + V(FloatishDoubleQ, "floatish|double?", 2, 0) \
|
| + V(FloatQDoubleQ, "float?|double?", 3, 0) \
|
| + /* The following are actual types that appear in the asm source. */ \
|
| + V(Void, "void", 4, 0) \
|
| + V(Extern, "extern", 5, 0) \
|
| + V(DoubleQ, "double?", 6, kAsmFloatishDoubleQ | kAsmFloatQDoubleQ) \
|
| + V(Double, "double", 7, kAsmDoubleQ | kAsmExtern) \
|
| + V(Intish, "intish", 8, 0) \
|
| + V(Int, "int", 9, kAsmIntish) \
|
| + V(Signed, "signed", 10, kAsmInt | kAsmExtern) \
|
| + V(Unsigned, "unsigned", 11, kAsmInt) \
|
| + V(FixNum, "fixnum", 12, kAsmSigned | kAsmUnsigned) \
|
| + V(Floatish, "floatish", 13, kAsmFloatishDoubleQ) \
|
| + V(FloatQ, "float?", 14, kAsmFloatQDoubleQ | kAsmFloatish) \
|
| + V(Float, "float", 15, kAsmFloatQ) \
|
| /* Types used for expressing the Heap accesses. */ \
|
| - V(Uint8Array, "Uint8Array", 14, kAsmHeap) \
|
| - V(Int8Array, "Int8Array", 15, kAsmHeap) \
|
| - V(Uint16Array, "Uint16Array", 16, kAsmHeap) \
|
| - V(Int16Array, "Int16Array", 17, kAsmHeap) \
|
| - V(Uint32Array, "Uint32Array", 18, kAsmHeap) \
|
| - V(Int32Array, "Int32Array", 19, kAsmHeap) \
|
| - V(Float32Array, "Float32Array", 20, kAsmHeap) \
|
| - V(Float64Array, "Float64Array", 21, kAsmHeap) \
|
| - /* Pseudo-types used in representing heap access for fp types.*/ \
|
| - /* TODO(jpp): FloatishDoubleQ should be a base type.*/ \
|
| - V(FloatishDoubleQ, "floatish|double?", 22, kAsmFloatish | kAsmDoubleQ) \
|
| - /* TODO(jpp): FloatQDoubleQ should be a base type.*/ \
|
| - V(FloatQDoubleQ, "float?|double?", 23, kAsmFloatQ | kAsmDoubleQ) \
|
| + V(Uint8Array, "Uint8Array", 16, kAsmHeap) \
|
| + V(Int8Array, "Int8Array", 17, kAsmHeap) \
|
| + V(Uint16Array, "Uint16Array", 18, kAsmHeap) \
|
| + V(Int16Array, "Int16Array", 19, kAsmHeap) \
|
| + V(Uint32Array, "Uint32Array", 20, kAsmHeap) \
|
| + V(Int32Array, "Int32Array", 21, kAsmHeap) \
|
| + V(Float32Array, "Float32Array", 22, kAsmHeap) \
|
| + V(Float64Array, "Float64Array", 23, kAsmHeap) \
|
| /* None is used to represent errors in the type checker. */ \
|
| V(None, "<none>", 31, 0)
|
|
|
| @@ -107,8 +104,6 @@ class AsmValueType {
|
| class AsmCallableType : public ZoneObject {
|
| public:
|
| virtual std::string Name() = 0;
|
| - virtual AsmType* ValidateCall(AsmType* return_type,
|
| - const ZoneVector<AsmType*>& args) = 0;
|
|
|
| virtual bool CanBeInvokedWith(AsmType* return_type,
|
| const ZoneVector<AsmType*>& args) = 0;
|
| @@ -121,12 +116,15 @@ class AsmCallableType : public ZoneObject {
|
| protected:
|
| AsmCallableType() = default;
|
| virtual ~AsmCallableType() = default;
|
| + virtual bool IsA(AsmType* other);
|
|
|
| private:
|
| + friend class AsmType;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(AsmCallableType);
|
| };
|
|
|
| -class AsmFunctionType : public AsmCallableType {
|
| +class AsmFunctionType final : public AsmCallableType {
|
| public:
|
| AsmFunctionType* AsFunctionType() final { return this; }
|
|
|
| @@ -134,11 +132,6 @@ class AsmFunctionType : public AsmCallableType {
|
| const ZoneVector<AsmType*> Arguments() const { return args_; }
|
| AsmType* ReturnType() const { return return_type_; }
|
|
|
| - virtual bool IsMinMaxType() const { return false; }
|
| - virtual bool IsFroundType() const { return false; }
|
| -
|
| - AsmType* ValidateCall(AsmType* return_type,
|
| - const ZoneVector<AsmType*>& args) override;
|
| bool CanBeInvokedWith(AsmType* return_type,
|
| const ZoneVector<AsmType*>& args) override;
|
|
|
| @@ -150,6 +143,7 @@ class AsmFunctionType : public AsmCallableType {
|
| friend AsmType;
|
|
|
| std::string Name() override;
|
| + bool IsA(AsmType* other) override;
|
|
|
| AsmType* return_type_;
|
| ZoneVector<AsmType*> args_;
|
| @@ -171,8 +165,6 @@ class AsmOverloadedFunctionType final : public AsmCallableType {
|
| explicit AsmOverloadedFunctionType(Zone* zone) : overloads_(zone) {}
|
|
|
| std::string Name() override;
|
| - AsmType* ValidateCall(AsmType* return_type,
|
| - const ZoneVector<AsmType*>& args) override;
|
| bool CanBeInvokedWith(AsmType* return_type,
|
| const ZoneVector<AsmType*>& args) override;
|
|
|
| @@ -186,8 +178,6 @@ class AsmFFIType final : public AsmCallableType {
|
| AsmFFIType* AsFFIType() override { return this; }
|
|
|
| std::string Name() override { return "Function"; }
|
| - AsmType* ValidateCall(AsmType* return_type,
|
| - const ZoneVector<AsmType*>& args) override;
|
| bool CanBeInvokedWith(AsmType* return_type,
|
| const ZoneVector<AsmType*>& args) override;
|
|
|
| @@ -205,8 +195,6 @@ class AsmFunctionTableType : public AsmCallableType {
|
|
|
| std::string Name() override;
|
|
|
| - AsmType* ValidateCall(AsmType* return_type,
|
| - const ZoneVector<AsmType*>& args) override;
|
| bool CanBeInvokedWith(AsmType* return_type,
|
| const ZoneVector<AsmType*>& args) override;
|
|
|
|
|