OLD | NEW |
1 // Copyright 2010 the V8 project authors. All rights reserved. | 1 // Copyright 2010 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 305 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
316 false_label_ = if_false; | 316 false_label_ = if_false; |
317 Visit(expr); | 317 Visit(expr); |
318 context_ = saved_context; | 318 context_ = saved_context; |
319 true_label_ = saved_true; | 319 true_label_ = saved_true; |
320 false_label_ = saved_false; | 320 false_label_ = saved_false; |
321 } | 321 } |
322 | 322 |
323 void VisitDeclarations(ZoneList<Declaration*>* declarations); | 323 void VisitDeclarations(ZoneList<Declaration*>* declarations); |
324 void DeclareGlobals(Handle<FixedArray> pairs); | 324 void DeclareGlobals(Handle<FixedArray> pairs); |
325 | 325 |
| 326 // Try to perform a comparison as a fast inlined literal compare if |
| 327 // the operands allow it. Returns true if the compare operations |
| 328 // has been matched and all code generated; false otherwise. |
| 329 bool TryLiteralCompare(Token::Value op, |
| 330 Expression* left, |
| 331 Expression* right, |
| 332 Label* if_true, |
| 333 Label* if_false, |
| 334 Label* fall_through); |
| 335 |
326 // Platform-specific code for a variable, constant, or function | 336 // Platform-specific code for a variable, constant, or function |
327 // declaration. Functions have an initial value. | 337 // declaration. Functions have an initial value. |
328 void EmitDeclaration(Variable* variable, | 338 void EmitDeclaration(Variable* variable, |
329 Variable::Mode mode, | 339 Variable::Mode mode, |
330 FunctionLiteral* function); | 340 FunctionLiteral* function); |
331 | 341 |
332 // Platform-specific return sequence | 342 // Platform-specific return sequence |
333 void EmitReturnSequence(); | 343 void EmitReturnSequence(); |
334 | 344 |
335 // Platform-specific code sequences for calls | 345 // Platform-specific code sequences for calls |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
379 | 389 |
380 // Complete a named property assignment. The receiver is expected on top | 390 // Complete a named property assignment. The receiver is expected on top |
381 // of the stack and the right-hand-side value in the accumulator. | 391 // of the stack and the right-hand-side value in the accumulator. |
382 void EmitNamedPropertyAssignment(Assignment* expr); | 392 void EmitNamedPropertyAssignment(Assignment* expr); |
383 | 393 |
384 // Complete a keyed property assignment. The receiver and key are | 394 // Complete a keyed property assignment. The receiver and key are |
385 // expected on top of the stack and the right-hand-side value in the | 395 // expected on top of the stack and the right-hand-side value in the |
386 // accumulator. | 396 // accumulator. |
387 void EmitKeyedPropertyAssignment(Assignment* expr); | 397 void EmitKeyedPropertyAssignment(Assignment* expr); |
388 | 398 |
389 // Helper for compare operations. Expects the null-value in a register. | |
390 void EmitNullCompare(bool strict, | |
391 Register obj, | |
392 Register null_const, | |
393 Label* if_true, | |
394 Label* if_false, | |
395 Register scratch); | |
396 | |
397 void SetFunctionPosition(FunctionLiteral* fun); | 399 void SetFunctionPosition(FunctionLiteral* fun); |
398 void SetReturnPosition(FunctionLiteral* fun); | 400 void SetReturnPosition(FunctionLiteral* fun); |
399 void SetStatementPosition(Statement* stmt); | 401 void SetStatementPosition(Statement* stmt); |
400 void SetExpressionPosition(Expression* expr, int pos); | 402 void SetExpressionPosition(Expression* expr, int pos); |
401 void SetStatementPosition(int pos); | 403 void SetStatementPosition(int pos); |
402 void SetSourcePosition(int pos); | 404 void SetSourcePosition(int pos); |
403 | 405 |
404 // Non-local control flow support. | 406 // Non-local control flow support. |
405 void EnterFinallyBlock(); | 407 void EnterFinallyBlock(); |
406 void ExitFinallyBlock(); | 408 void ExitFinallyBlock(); |
(...skipping 23 matching lines...) Expand all Loading... |
430 // Load a value from the current context. Indices are defined as an enum | 432 // Load a value from the current context. Indices are defined as an enum |
431 // in v8::internal::Context. | 433 // in v8::internal::Context. |
432 void LoadContextField(Register dst, int context_index); | 434 void LoadContextField(Register dst, int context_index); |
433 | 435 |
434 // AST node visit functions. | 436 // AST node visit functions. |
435 #define DECLARE_VISIT(type) virtual void Visit##type(type* node); | 437 #define DECLARE_VISIT(type) virtual void Visit##type(type* node); |
436 AST_NODE_LIST(DECLARE_VISIT) | 438 AST_NODE_LIST(DECLARE_VISIT) |
437 #undef DECLARE_VISIT | 439 #undef DECLARE_VISIT |
438 // Handles the shortcutted logical binary operations in VisitBinaryOperation. | 440 // Handles the shortcutted logical binary operations in VisitBinaryOperation. |
439 void EmitLogicalOperation(BinaryOperation* expr); | 441 void EmitLogicalOperation(BinaryOperation* expr); |
| 442 |
| 443 void VisitForTypeofValue(Expression* expr, Location where); |
| 444 |
440 void VisitLogicalForValue(Expression* expr, | 445 void VisitLogicalForValue(Expression* expr, |
441 Token::Value op, | 446 Token::Value op, |
442 Location where, | 447 Location where, |
443 Label* done); | 448 Label* done); |
444 | 449 |
445 | 450 |
446 MacroAssembler* masm_; | 451 MacroAssembler* masm_; |
447 CompilationInfo* info_; | 452 CompilationInfo* info_; |
448 | 453 |
449 Label return_label_; | 454 Label return_label_; |
450 NestedStatement* nesting_stack_; | 455 NestedStatement* nesting_stack_; |
451 int loop_depth_; | 456 int loop_depth_; |
452 | 457 |
453 Expression::Context context_; | 458 Expression::Context context_; |
454 Location location_; | 459 Location location_; |
455 Label* true_label_; | 460 Label* true_label_; |
456 Label* false_label_; | 461 Label* false_label_; |
457 | 462 |
458 friend class NestedStatement; | 463 friend class NestedStatement; |
459 | 464 |
460 DISALLOW_COPY_AND_ASSIGN(FullCodeGenerator); | 465 DISALLOW_COPY_AND_ASSIGN(FullCodeGenerator); |
461 }; | 466 }; |
462 | 467 |
463 | 468 |
464 } } // namespace v8::internal | 469 } } // namespace v8::internal |
465 | 470 |
466 #endif // V8_FULL_CODEGEN_H_ | 471 #endif // V8_FULL_CODEGEN_H_ |
OLD | NEW |