Chromium Code Reviews| Index: src/typing-asm.h |
| diff --git a/src/typing-asm.h b/src/typing-asm.h |
| index 5f7a929a1e5bf99e7c8c1d4136ceb3a97e738d49..a4897d9b1f099a138174a841fb21f0eb44ce18d9 100644 |
| --- a/src/typing-asm.h |
| +++ b/src/typing-asm.h |
| @@ -22,28 +22,50 @@ class AsmTyper : public AstVisitor { |
| explicit AsmTyper(Isolate* isolate, Zone* zone, Script* script, |
| FunctionLiteral* root); |
| bool Validate(); |
| + void set_allow_simd(bool simd); |
| const char* error_message() { return error_message_; } |
| DEFINE_AST_VISITOR_SUBCLASS_MEMBERS(); |
| private: |
| Zone* zone_; |
| + Isolate* isolate_; |
| Script* script_; |
| FunctionLiteral* root_; |
| bool valid_; |
| + bool allow_simd_; |
| + |
| + struct VariableInfo : public ZoneObject { |
| + Type* type; |
| + bool is_check_function; |
| + bool is_constructor_function; |
|
titzer
2015/11/25 18:36:42
Maybe we can mark the stdlib variable right away w
bradn
2015/11/30 18:22:38
Done.
|
| + |
| + VariableInfo() |
| + : type(NULL), |
| + is_check_function(false), |
| + is_constructor_function(false) {} |
| + explicit VariableInfo(Type* t) |
| + : type(t), is_check_function(false), is_constructor_function(false) {} |
| + }; |
| // Information for bi-directional typing with a cap on nesting depth. |
| Type* expected_type_; |
| Type* computed_type_; |
| + VariableInfo* property_info_; |
| int intish_; // How many ops we've gone without a x|0. |
| Type* return_type_; // Return type of last function. |
| size_t array_size_; // Array size of last ArrayLiteral. |
| - typedef ZoneMap<std::string, Type*> ObjectTypeMap; |
| + typedef ZoneMap<std::string, VariableInfo*> ObjectTypeMap; |
| ObjectTypeMap stdlib_types_; |
| ObjectTypeMap stdlib_heap_types_; |
| ObjectTypeMap stdlib_math_types_; |
| +#define V(NAME, Name, name, lane_count, lane_type) \ |
| + ObjectTypeMap stdlib_simd_##name##_types_; \ |
| + VariableInfo* stdlib_simd_##name##_constructor_type_; |
| + SIMD128_TYPES(V) |
| +#undef V |
| // Map from Variable* to global/local variable Type*. |
| ZoneHashMap global_variable_type_; |
| @@ -61,23 +83,35 @@ class AsmTyper : public AstVisitor { |
| static const int kMaxUncombinedMultiplicativeSteps = 1; |
| void InitializeStdlib(); |
| + void InitializeStdlibSIMD(); |
| void VisitDeclarations(ZoneList<Declaration*>* d) override; |
| void VisitStatements(ZoneList<Statement*>* s) override; |
| - void VisitExpressionAnnotation(Expression* e, bool is_return); |
| + void VisitExpressionAnnotation(Expression* e, bool is_return, |
| + Variable* variable); |
| void VisitFunctionAnnotation(FunctionLiteral* f); |
| void VisitAsmModule(FunctionLiteral* f); |
| void VisitHeapAccess(Property* expr); |
| + Expression* AsPropertyObjectWithKey(Expression* expr, const char* name); |
| + bool IsMathObject(Expression* expr); |
| + bool IsSIMDObject(Expression* expr); |
| + bool IsSIMDTypeObject(Expression* expr, const char* name); |
| + bool IsStdlibObject(Expression* expr); |
| + |
| + void VisitSIMDProperty(Property* expr); |
| + |
| int ElementShiftSize(Type* type); |
| Type* StorageType(Type* type); |
| void SetType(Variable* variable, Type* type); |
| Type* GetType(Variable* variable); |
| + VariableInfo* GetVariableInfo(Variable* variable, bool setting); |
| + void SetVariableInfo(Variable* variable, const VariableInfo* info); |
| - Type* LibType(ObjectTypeMap map, Handle<String> name); |
| + VariableInfo* LibType(ObjectTypeMap map, Handle<String> name); |
| void SetResult(Expression* expr, Type* type); |
| void IntersectResult(Expression* expr, Type* type); |