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

Unified Diff: src/full-codegen.h

Issue 1989012: Add complete implementation of full compiler for the ia32 architecture... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/codegen.h ('k') | src/full-codegen.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/full-codegen.h
===================================================================
--- src/full-codegen.h (revision 4643)
+++ src/full-codegen.h (working copy)
@@ -1,4 +1,4 @@
-// Copyright 2009 the V8 project authors. All rights reserved.
+// Copyright 2010 the V8 project authors. All rights reserved.
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
@@ -31,6 +31,7 @@
#include "v8.h"
#include "ast.h"
+#include "compiler.h"
namespace v8 {
namespace internal {
@@ -229,8 +230,6 @@
return stack_depth + kForInStackElementCount;
}
private:
- // TODO(lrn): Check that this value is correct when implementing
- // for-in.
static const int kForInStackElementCount = 5;
DISALLOW_COPY_AND_ASSIGN(ForIn);
};
@@ -258,12 +257,22 @@
// context.
void DropAndApply(int count, Expression::Context context, Register reg);
+ // Set up branch labels for a test expression.
+ void PrepareTest(Label* materialize_true,
+ Label* materialize_false,
+ Label** if_true,
+ Label** if_false);
+
// Emit code to convert pure control flow to a pair of labels into the
// result expected according to an expression context.
void Apply(Expression::Context context,
Label* materialize_true,
Label* materialize_false);
+ // Emit code to convert constant control flow (true or false) into
+ // the result expected according to an expression context.
+ void Apply(Expression::Context context, bool flag);
+
// Helper function to convert a pure value into a test context. The value
// is expected on the stack or the accumulator, depending on the platform.
// See the platform-specific implementation for details.
@@ -348,6 +357,12 @@
void VisitDeclarations(ZoneList<Declaration*>* declarations);
void DeclareGlobals(Handle<FixedArray> pairs);
+ // Platform-specific code for a variable, constant, or function
+ // declaration. Functions have an initial value.
+ void EmitDeclaration(Variable* variable,
+ Variable::Mode mode,
+ FunctionLiteral* function);
+
// Platform-specific return sequence
void EmitReturnSequence(int position);
@@ -355,9 +370,48 @@
void EmitCallWithStub(Call* expr);
void EmitCallWithIC(Call* expr, Handle<Object> name, RelocInfo::Mode mode);
+
+ // Platform-specific code for inline runtime calls.
+ void EmitInlineRuntimeCall(CallRuntime* expr);
+ void EmitIsSmi(ZoneList<Expression*>* arguments);
+ void EmitIsNonNegativeSmi(ZoneList<Expression*>* arguments);
+ void EmitIsObject(ZoneList<Expression*>* arguments);
+ void EmitIsUndetectableObject(ZoneList<Expression*>* arguments);
+ void EmitIsFunction(ZoneList<Expression*>* arguments);
+ void EmitIsArray(ZoneList<Expression*>* arguments);
+ void EmitIsRegExp(ZoneList<Expression*>* arguments);
+ void EmitIsConstructCall(ZoneList<Expression*>* arguments);
+ void EmitObjectEquals(ZoneList<Expression*>* arguments);
+ void EmitArguments(ZoneList<Expression*>* arguments);
+ void EmitArgumentsLength(ZoneList<Expression*>* arguments);
+ void EmitClassOf(ZoneList<Expression*>* arguments);
+ void EmitValueOf(ZoneList<Expression*>* arguments);
+ void EmitSetValueOf(ZoneList<Expression*>* arguments);
+ void EmitNumberToString(ZoneList<Expression*>* arguments);
+ void EmitCharFromCode(ZoneList<Expression*>* arguments);
+ void EmitFastCharCodeAt(ZoneList<Expression*>* arguments);
+ void EmitStringCompare(ZoneList<Expression*>* arguments);
+ void EmitStringAdd(ZoneList<Expression*>* arguments);
+ void EmitLog(ZoneList<Expression*>* arguments);
+ void EmitRandomHeapNumber(ZoneList<Expression*>* arguments);
+ void EmitSubString(ZoneList<Expression*>* arguments);
+ void EmitRegExpExec(ZoneList<Expression*>* arguments);
+ void EmitMathPow(ZoneList<Expression*>* arguments);
+ void EmitMathSin(ZoneList<Expression*>* arguments);
+ void EmitMathCos(ZoneList<Expression*>* arguments);
+ void EmitMathSqrt(ZoneList<Expression*>* arguments);
+ void EmitCallFunction(ZoneList<Expression*>* arguments);
+ void EmitRegExpConstructResult(ZoneList<Expression*>* arguments);
+ void EmitSwapElements(ZoneList<Expression*>* arguments);
+ void EmitGetFromCache(ZoneList<Expression*>* arguments);
+
// Platform-specific code for loading variables.
void EmitVariableLoad(Variable* expr, Expression::Context context);
+ // Platform-specific support for allocating a new closure based on
+ // the given function info.
+ void EmitNewClosure(Handle<SharedFunctionInfo> info);
+
// Platform-specific support for compiling assignments.
// Load a value from a named property.
@@ -372,9 +426,15 @@
// of the stack and the right one in the accumulator.
void EmitBinaryOp(Token::Value op, Expression::Context context);
+ // Assign to the given expression as if via '='. The right-hand-side value
+ // is expected in the accumulator.
+ void EmitAssignment(Expression* expr);
+
// Complete a variable assignment. The right-hand-side value is expected
// in the accumulator.
- void EmitVariableAssignment(Variable* var, Expression::Context context);
+ void EmitVariableAssignment(Variable* var,
+ Token::Value op,
+ Expression::Context context);
// Complete a named property assignment. The receiver is expected on top
// of the stack and the right-hand-side value in the accumulator.
@@ -385,6 +445,14 @@
// accumulator.
void EmitKeyedPropertyAssignment(Assignment* expr);
+ // Helper for compare operations. Expects the null-value in a register.
+ void EmitNullCompare(bool strict,
+ Register obj,
+ Register null_const,
+ Label* if_true,
+ Label* if_false,
+ Register scratch);
+
void SetFunctionPosition(FunctionLiteral* fun);
void SetReturnPosition(FunctionLiteral* fun);
void SetStatementPosition(Statement* stmt);
« no previous file with comments | « src/codegen.h ('k') | src/full-codegen.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698