| 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 17 matching lines...) Expand all  Loading... | 
| 28 #ifndef V8_TYPING_H_ | 28 #ifndef V8_TYPING_H_ | 
| 29 #define V8_TYPING_H_ | 29 #define V8_TYPING_H_ | 
| 30 | 30 | 
| 31 #include "v8.h" | 31 #include "v8.h" | 
| 32 | 32 | 
| 33 #include "allocation.h" | 33 #include "allocation.h" | 
| 34 #include "ast.h" | 34 #include "ast.h" | 
| 35 #include "compiler.h" | 35 #include "compiler.h" | 
| 36 #include "type-info.h" | 36 #include "type-info.h" | 
| 37 #include "types.h" | 37 #include "types.h" | 
| 38 #include "effects.h" |  | 
| 39 #include "zone.h" | 38 #include "zone.h" | 
| 40 #include "scopes.h" | 39 #include "scopes.h" | 
| 41 | 40 | 
| 42 namespace v8 { | 41 namespace v8 { | 
| 43 namespace internal { | 42 namespace internal { | 
| 44 | 43 | 
| 45 | 44 | 
| 46 class AstTyper: public AstVisitor { | 45 class AstTyper: public AstVisitor { | 
| 47  public: | 46  public: | 
| 48   static void Run(CompilationInfo* info); | 47   static void Run(CompilationInfo* info); | 
| 49 | 48 | 
| 50   void* operator new(size_t size, Zone* zone) { | 49   void* operator new(size_t size, Zone* zone) { | 
| 51     return zone->New(static_cast<int>(size)); | 50     return zone->New(static_cast<int>(size)); | 
| 52   } | 51   } | 
| 53   void operator delete(void* pointer, Zone* zone) { } | 52   void operator delete(void* pointer, Zone* zone) { } | 
| 54   void operator delete(void* pointer) { } | 53   void operator delete(void* pointer) { } | 
| 55 | 54 | 
| 56   DEFINE_AST_VISITOR_SUBCLASS_MEMBERS(); | 55   DEFINE_AST_VISITOR_SUBCLASS_MEMBERS(); | 
| 57 | 56 | 
| 58  private: | 57  private: | 
| 59   explicit AstTyper(CompilationInfo* info); | 58   explicit AstTyper(CompilationInfo* info); | 
| 60 | 59 | 
| 61   static const int kNoVar = INT_MIN; |  | 
| 62   typedef v8::internal::Effects<int, kNoVar> Effects; |  | 
| 63   typedef v8::internal::NestedEffects<int, kNoVar> Store; |  | 
| 64 |  | 
| 65   CompilationInfo* info_; | 60   CompilationInfo* info_; | 
| 66   TypeFeedbackOracle oracle_; | 61   TypeFeedbackOracle oracle_; | 
| 67   Store store_; |  | 
| 68 | 62 | 
| 69   TypeFeedbackOracle* oracle() { return &oracle_; } | 63   TypeFeedbackOracle* oracle() { return &oracle_; } | 
| 70   Zone* zone() const { return info_->zone(); } | 64   Zone* zone() const { return info_->zone(); } | 
| 71 | 65 | 
| 72   void NarrowType(Expression* e, Bounds b) { | 66   void NarrowType(Expression* e, Bounds b) { | 
| 73     e->set_bounds(Bounds::Both(e->bounds(), b, isolate_)); | 67     e->set_bounds(Bounds::Both(e->bounds(), b, isolate_)); | 
| 74   } | 68   } | 
| 75   void NarrowLowerType(Expression* e, Handle<Type> t) { | 69   void NarrowLowerType(Expression* e, Handle<Type> t) { | 
| 76     e->set_bounds(Bounds::NarrowLower(e->bounds(), t, isolate_)); | 70     e->set_bounds(Bounds::NarrowLower(e->bounds(), t, isolate_)); | 
| 77   } | 71   } | 
| 78 | 72 | 
| 79   Effects EnterEffects() { |  | 
| 80     store_ = store_.Push(); |  | 
| 81     return store_.Top(); |  | 
| 82   } |  | 
| 83   void ExitEffects() { store_ = store_.Pop(); } |  | 
| 84 |  | 
| 85   int variable_index(Variable* var) { |  | 
| 86     return var->IsStackLocal() ? var->index() : |  | 
| 87            var->IsParameter() ? -var->index() : kNoVar; |  | 
| 88   } |  | 
| 89 |  | 
| 90   void VisitDeclarations(ZoneList<Declaration*>* declarations); | 73   void VisitDeclarations(ZoneList<Declaration*>* declarations); | 
| 91   void VisitStatements(ZoneList<Statement*>* statements); | 74   void VisitStatements(ZoneList<Statement*>* statements); | 
| 92 | 75 | 
| 93 #define DECLARE_VISIT(type) virtual void Visit##type(type* node); | 76 #define DECLARE_VISIT(type) virtual void Visit##type(type* node); | 
| 94   AST_NODE_LIST(DECLARE_VISIT) | 77   AST_NODE_LIST(DECLARE_VISIT) | 
| 95 #undef DECLARE_VISIT | 78 #undef DECLARE_VISIT | 
| 96 | 79 | 
| 97   DISALLOW_COPY_AND_ASSIGN(AstTyper); | 80   DISALLOW_COPY_AND_ASSIGN(AstTyper); | 
| 98 }; | 81 }; | 
| 99 | 82 | 
| 100 } }  // namespace v8::internal | 83 } }  // namespace v8::internal | 
| 101 | 84 | 
| 102 #endif  // V8_TYPING_H_ | 85 #endif  // V8_TYPING_H_ | 
| OLD | NEW | 
|---|