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

Side by Side Diff: src/hydrogen.h

Issue 6928061: Revert "First step in letting Crankshaft inline functions with a different context." (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 9 years, 7 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/arm/lithium-arm.cc ('k') | src/hydrogen.cc » ('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 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 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 304 matching lines...) Expand 10 before | Expand all | Expand 10 after
315 Scope* scope, 315 Scope* scope,
316 Handle<JSFunction> closure); 316 Handle<JSFunction> closure);
317 317
318 // Simple accessors. 318 // Simple accessors.
319 Handle<JSFunction> closure() const { return closure_; } 319 Handle<JSFunction> closure() const { return closure_; }
320 const ZoneList<HValue*>* values() const { return &values_; } 320 const ZoneList<HValue*>* values() const { return &values_; }
321 const ZoneList<int>* assigned_variables() const { 321 const ZoneList<int>* assigned_variables() const {
322 return &assigned_variables_; 322 return &assigned_variables_;
323 } 323 }
324 int parameter_count() const { return parameter_count_; } 324 int parameter_count() const { return parameter_count_; }
325 int specials_count() const { return specials_count_; }
326 int local_count() const { return local_count_; } 325 int local_count() const { return local_count_; }
327 HEnvironment* outer() const { return outer_; } 326 HEnvironment* outer() const { return outer_; }
328 int pop_count() const { return pop_count_; } 327 int pop_count() const { return pop_count_; }
329 int push_count() const { return push_count_; } 328 int push_count() const { return push_count_; }
330 329
331 int ast_id() const { return ast_id_; } 330 int ast_id() const { return ast_id_; }
332 void set_ast_id(int id) { ast_id_ = id; } 331 void set_ast_id(int id) { ast_id_ = id; }
333 332
334 int length() const { return values_.length(); } 333 int length() const { return values_.length(); }
335 bool is_special_index(int i) const {
336 return i >= parameter_count() && i < parameter_count() + specials_count();
337 }
338 334
339 void Bind(Variable* variable, HValue* value) { 335 void Bind(Variable* variable, HValue* value) {
340 Bind(IndexFor(variable), value); 336 Bind(IndexFor(variable), value);
341 } 337 }
342 338
343 void Bind(int index, HValue* value); 339 void Bind(int index, HValue* value);
344 340
345 void BindContext(HValue* value) {
346 Bind(parameter_count(), value);
347 }
348
349 HValue* Lookup(Variable* variable) const { 341 HValue* Lookup(Variable* variable) const {
350 return Lookup(IndexFor(variable)); 342 return Lookup(IndexFor(variable));
351 } 343 }
352 344
353 HValue* Lookup(int index) const { 345 HValue* Lookup(int index) const {
354 HValue* result = values_[index]; 346 HValue* result = values_[index];
355 ASSERT(result != NULL); 347 ASSERT(result != NULL);
356 return result; 348 return result;
357 } 349 }
358 350
359 HValue* LookupContext() const {
360 // Return first special.
361 return Lookup(parameter_count());
362 }
363
364 void Push(HValue* value) { 351 void Push(HValue* value) {
365 ASSERT(value != NULL); 352 ASSERT(value != NULL);
366 ++push_count_; 353 ++push_count_;
367 values_.Add(value); 354 values_.Add(value);
368 } 355 }
369 356
370 HValue* Pop() { 357 HValue* Pop() {
371 ASSERT(!ExpressionStackIsEmpty()); 358 ASSERT(!ExpressionStackIsEmpty());
372 if (push_count_ > 0) { 359 if (push_count_ > 0) {
373 --push_count_; 360 --push_count_;
374 } else { 361 } else {
375 ++pop_count_; 362 ++pop_count_;
376 } 363 }
377 return values_.RemoveLast(); 364 return values_.RemoveLast();
378 } 365 }
379 366
380 void Drop(int count); 367 void Drop(int count);
381 368
382 HValue* Top() const { return ExpressionStackAt(0); } 369 HValue* Top() const { return ExpressionStackAt(0); }
383 370
384 bool ExpressionStackIsEmpty() const;
385
386 HValue* ExpressionStackAt(int index_from_top) const { 371 HValue* ExpressionStackAt(int index_from_top) const {
387 int index = length() - index_from_top - 1; 372 int index = length() - index_from_top - 1;
388 ASSERT(HasExpressionAt(index)); 373 ASSERT(HasExpressionAt(index));
389 return values_[index]; 374 return values_[index];
390 } 375 }
391 376
392 void SetExpressionStackAt(int index_from_top, HValue* value); 377 void SetExpressionStackAt(int index_from_top, HValue* value);
393 378
394 HEnvironment* Copy() const; 379 HEnvironment* Copy() const;
395 HEnvironment* CopyWithoutHistory() const; 380 HEnvironment* CopyWithoutHistory() const;
(...skipping 24 matching lines...) Expand all
420 405
421 void PrintTo(StringStream* stream); 406 void PrintTo(StringStream* stream);
422 void PrintToStd(); 407 void PrintToStd();
423 408
424 private: 409 private:
425 explicit HEnvironment(const HEnvironment* other); 410 explicit HEnvironment(const HEnvironment* other);
426 411
427 // True if index is included in the expression stack part of the environment. 412 // True if index is included in the expression stack part of the environment.
428 bool HasExpressionAt(int index) const; 413 bool HasExpressionAt(int index) const;
429 414
415 bool ExpressionStackIsEmpty() const;
416
430 void Initialize(int parameter_count, int local_count, int stack_height); 417 void Initialize(int parameter_count, int local_count, int stack_height);
431 void Initialize(const HEnvironment* other); 418 void Initialize(const HEnvironment* other);
432 419
433 // Map a variable to an environment index. Parameter indices are shifted 420 // Map a variable to an environment index. Parameter indices are shifted
434 // by 1 (receiver is parameter index -1 but environment index 0). 421 // by 1 (receiver is parameter index -1 but environment index 0).
435 // Stack-allocated local indices are shifted by the number of parameters. 422 // Stack-allocated local indices are shifted by the number of parameters.
436 int IndexFor(Variable* variable) const { 423 int IndexFor(Variable* variable) const {
437 Slot* slot = variable->AsSlot(); 424 Slot* slot = variable->AsSlot();
438 ASSERT(slot != NULL && slot->IsStackAllocated()); 425 ASSERT(slot != NULL && slot->IsStackAllocated());
439 int shift = (slot->type() == Slot::PARAMETER) 426 int shift = (slot->type() == Slot::PARAMETER) ? 1 : parameter_count_;
440 ? 1
441 : parameter_count_ + specials_count_;
442 return slot->index() + shift; 427 return slot->index() + shift;
443 } 428 }
444 429
445 Handle<JSFunction> closure_; 430 Handle<JSFunction> closure_;
446 // Value array [parameters] [specials] [locals] [temporaries]. 431 // Value array [parameters] [locals] [temporaries].
447 ZoneList<HValue*> values_; 432 ZoneList<HValue*> values_;
448 ZoneList<int> assigned_variables_; 433 ZoneList<int> assigned_variables_;
449 int parameter_count_; 434 int parameter_count_;
450 int specials_count_;
451 int local_count_; 435 int local_count_;
452 HEnvironment* outer_; 436 HEnvironment* outer_;
453 int pop_count_; 437 int pop_count_;
454 int push_count_; 438 int push_count_;
455 int ast_id_; 439 int ast_id_;
456 }; 440 };
457 441
458 442
459 class HGraphBuilder; 443 class HGraphBuilder;
460 444
(...skipping 713 matching lines...) Expand 10 before | Expand all | Expand 10 after
1174 const char* filename_; 1158 const char* filename_;
1175 HeapStringAllocator string_allocator_; 1159 HeapStringAllocator string_allocator_;
1176 StringStream trace_; 1160 StringStream trace_;
1177 int indent_; 1161 int indent_;
1178 }; 1162 };
1179 1163
1180 1164
1181 } } // namespace v8::internal 1165 } } // namespace v8::internal
1182 1166
1183 #endif // V8_HYDROGEN_H_ 1167 #endif // V8_HYDROGEN_H_
OLDNEW
« no previous file with comments | « src/arm/lithium-arm.cc ('k') | src/hydrogen.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698