Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(354)

Side by Side Diff: src/usage-analyzer.cc

Issue 249039: Two changes, one a refactoring and one that affects V8's JS semantics.... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 11 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/parser.cc ('k') | test/mjsunit/invalid-lhs.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2006-2008 the V8 project authors. All rights reserved. 1 // Copyright 2006-2008 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 26 matching lines...) Expand all
37 // Weight boundaries 37 // Weight boundaries
38 static const int MinWeight = 1; 38 static const int MinWeight = 1;
39 static const int MaxWeight = 1000000; 39 static const int MaxWeight = 1000000;
40 static const int InitialWeight = 100; 40 static const int InitialWeight = 100;
41 41
42 42
43 class UsageComputer: public AstVisitor { 43 class UsageComputer: public AstVisitor {
44 public: 44 public:
45 static bool Traverse(AstNode* node); 45 static bool Traverse(AstNode* node);
46 46
47 void VisitBlock(Block* node); 47 // AST node visit functions.
48 void VisitDeclaration(Declaration* node); 48 #define DECLARE_VISIT(type) void Visit##type(type* node);
49 void VisitExpressionStatement(ExpressionStatement* node); 49 AST_NODE_LIST(DECLARE_VISIT)
50 void VisitEmptyStatement(EmptyStatement* node); 50 #undef DECLARE_VISIT
51 void VisitIfStatement(IfStatement* node); 51
52 void VisitContinueStatement(ContinueStatement* node); 52 void VisitVariable(Variable* var);
53 void VisitBreakStatement(BreakStatement* node);
54 void VisitReturnStatement(ReturnStatement* node);
55 void VisitWithEnterStatement(WithEnterStatement* node);
56 void VisitWithExitStatement(WithExitStatement* node);
57 void VisitSwitchStatement(SwitchStatement* node);
58 void VisitLoopStatement(LoopStatement* node);
59 void VisitForInStatement(ForInStatement* node);
60 void VisitTryCatch(TryCatch* node);
61 void VisitTryFinally(TryFinally* node);
62 void VisitDebuggerStatement(DebuggerStatement* node);
63 void VisitFunctionLiteral(FunctionLiteral* node);
64 void VisitFunctionBoilerplateLiteral(FunctionBoilerplateLiteral* node);
65 void VisitConditional(Conditional* node);
66 void VisitSlot(Slot* node);
67 void VisitVariable(Variable* node);
68 void VisitVariableProxy(VariableProxy* node);
69 void VisitLiteral(Literal* node);
70 void VisitRegExpLiteral(RegExpLiteral* node);
71 void VisitObjectLiteral(ObjectLiteral* node);
72 void VisitArrayLiteral(ArrayLiteral* node);
73 void VisitCatchExtensionObject(CatchExtensionObject* node);
74 void VisitAssignment(Assignment* node);
75 void VisitThrow(Throw* node);
76 void VisitProperty(Property* node);
77 void VisitCall(Call* node);
78 void VisitCallNew(CallNew* node);
79 void VisitCallRuntime(CallRuntime* node);
80 void VisitUnaryOperation(UnaryOperation* node);
81 void VisitCountOperation(CountOperation* node);
82 void VisitBinaryOperation(BinaryOperation* node);
83 void VisitCompareOperation(CompareOperation* node);
84 void VisitThisFunction(ThisFunction* node);
85 53
86 private: 54 private:
87 int weight_; 55 int weight_;
88 bool is_write_; 56 bool is_write_;
89 57
90 UsageComputer(int weight, bool is_write); 58 UsageComputer(int weight, bool is_write);
91 virtual ~UsageComputer(); 59 virtual ~UsageComputer();
92 60
93 // Helper functions 61 // Helper functions
94 void RecordUses(UseCount* uses); 62 void RecordUses(UseCount* uses);
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after
322 } 290 }
323 291
324 292
325 void UsageComputer::VisitCall(Call* node) { 293 void UsageComputer::VisitCall(Call* node) {
326 Read(node->expression()); 294 Read(node->expression());
327 ReadList(node->arguments()); 295 ReadList(node->arguments());
328 } 296 }
329 297
330 298
331 void UsageComputer::VisitCallNew(CallNew* node) { 299 void UsageComputer::VisitCallNew(CallNew* node) {
332 VisitCall(node); 300 Read(node->expression());
301 ReadList(node->arguments());
333 } 302 }
334 303
335 304
336 void UsageComputer::VisitCallRuntime(CallRuntime* node) { 305 void UsageComputer::VisitCallRuntime(CallRuntime* node) {
337 ReadList(node->arguments()); 306 ReadList(node->arguments());
338 } 307 }
339 308
340 309
341 void UsageComputer::VisitUnaryOperation(UnaryOperation* node) { 310 void UsageComputer::VisitUnaryOperation(UnaryOperation* node) {
342 Read(node->expression()); 311 Read(node->expression());
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
437 // ---------------------------------------------------------------------------- 406 // ----------------------------------------------------------------------------
438 // Interface to variable usage analysis 407 // Interface to variable usage analysis
439 408
440 bool AnalyzeVariableUsage(FunctionLiteral* lit) { 409 bool AnalyzeVariableUsage(FunctionLiteral* lit) {
441 if (!FLAG_usage_computation) return true; 410 if (!FLAG_usage_computation) return true;
442 HistogramTimerScope timer(&Counters::usage_analysis); 411 HistogramTimerScope timer(&Counters::usage_analysis);
443 return UsageComputer::Traverse(lit); 412 return UsageComputer::Traverse(lit);
444 } 413 }
445 414
446 } } // namespace v8::internal 415 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/parser.cc ('k') | test/mjsunit/invalid-lhs.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698