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); |