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

Unified Diff: src/runtime.h

Issue 201042: Win64 - Allow returning two values from a runtime function. (Closed)
Patch Set: Fixed typo. Created 11 years, 3 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
Index: src/runtime.h
diff --git a/src/runtime.h b/src/runtime.h
index 1be677a116e5cea96877e18c3757f3e4548ef847..ca38baf8ee9257377ab5bfe1005a8e6437a5bf61 100644
--- a/src/runtime.h
+++ b/src/runtime.h
@@ -43,269 +43,269 @@ namespace internal {
// this problem. Please avoid large recursive macros whenever possible.
#define RUNTIME_FUNCTION_LIST_ALWAYS_1(F) \
/* Property access */ \
- F(GetProperty, 2) \
- F(KeyedGetProperty, 2) \
- F(DeleteProperty, 2) \
- F(HasLocalProperty, 2) \
- F(HasProperty, 2) \
- F(HasElement, 2) \
- F(IsPropertyEnumerable, 2) \
- F(GetPropertyNames, 1) \
- F(GetPropertyNamesFast, 1) \
- F(GetArgumentsProperty, 1) \
- F(ToFastProperties, 1) \
- F(ToSlowProperties, 1) \
- \
- F(IsInPrototypeChain, 2) \
- F(SetHiddenPrototype, 2) \
- \
- F(IsConstructCall, 0) \
+ F(GetProperty, 2, 1) \
+ F(KeyedGetProperty, 2, 1) \
+ F(DeleteProperty, 2, 1) \
+ F(HasLocalProperty, 2, 1) \
+ F(HasProperty, 2, 1) \
+ F(HasElement, 2, 1) \
+ F(IsPropertyEnumerable, 2, 1) \
+ F(GetPropertyNames, 1, 1) \
+ F(GetPropertyNamesFast, 1, 1) \
+ F(GetArgumentsProperty, 1, 1) \
+ F(ToFastProperties, 1, 1) \
+ F(ToSlowProperties, 1, 1) \
+ \
+ F(IsInPrototypeChain, 2, 1) \
+ F(SetHiddenPrototype, 2, 1) \
+ \
+ F(IsConstructCall, 0, 1) \
\
/* Utilities */ \
- F(GetCalledFunction, 0) \
- F(GetFunctionDelegate, 1) \
- F(GetConstructorDelegate, 1) \
- F(NewArguments, 1) \
- F(NewArgumentsFast, 3) \
- F(LazyCompile, 1) \
- F(SetNewFunctionAttributes, 1) \
+ F(GetCalledFunction, 0, 1) \
+ F(GetFunctionDelegate, 1, 1) \
+ F(GetConstructorDelegate, 1, 1) \
+ F(NewArguments, 1, 1) \
+ F(NewArgumentsFast, 3, 1) \
+ F(LazyCompile, 1, 1) \
+ F(SetNewFunctionAttributes, 1, 1) \
\
/* Array join support */ \
- F(PushIfAbsent, 2) \
- F(ArrayConcat, 1) \
+ F(PushIfAbsent, 2, 1) \
+ F(ArrayConcat, 1, 1) \
\
/* Conversions */ \
- F(ToBool, 1) \
- F(Typeof, 1) \
- \
- F(StringToNumber, 1) \
- F(StringFromCharCodeArray, 1) \
- F(StringParseInt, 2) \
- F(StringParseFloat, 1) \
- F(StringToLowerCase, 1) \
- F(StringToUpperCase, 1) \
- F(CharFromCode, 1) \
- F(URIEscape, 1) \
- F(URIUnescape, 1) \
- \
- F(NumberToString, 1) \
- F(NumberToInteger, 1) \
- F(NumberToJSUint32, 1) \
- F(NumberToJSInt32, 1) \
- F(NumberToSmi, 1) \
+ F(ToBool, 1, 1) \
+ F(Typeof, 1, 1) \
+ \
+ F(StringToNumber, 1, 1) \
+ F(StringFromCharCodeArray, 1, 1) \
+ F(StringParseInt, 2, 1) \
+ F(StringParseFloat, 1, 1) \
+ F(StringToLowerCase, 1, 1) \
+ F(StringToUpperCase, 1, 1) \
+ F(CharFromCode, 1, 1) \
+ F(URIEscape, 1, 1) \
+ F(URIUnescape, 1, 1) \
+ \
+ F(NumberToString, 1, 1) \
+ F(NumberToInteger, 1, 1) \
+ F(NumberToJSUint32, 1, 1) \
+ F(NumberToJSInt32, 1, 1) \
+ F(NumberToSmi, 1, 1) \
\
/* Arithmetic operations */ \
- F(NumberAdd, 2) \
- F(NumberSub, 2) \
- F(NumberMul, 2) \
- F(NumberDiv, 2) \
- F(NumberMod, 2) \
- F(NumberUnaryMinus, 1) \
+ F(NumberAdd, 2, 1) \
+ F(NumberSub, 2, 1) \
+ F(NumberMul, 2, 1) \
+ F(NumberDiv, 2, 1) \
+ F(NumberMod, 2, 1) \
+ F(NumberUnaryMinus, 1, 1) \
\
- F(StringAdd, 2) \
- F(StringBuilderConcat, 2) \
+ F(StringAdd, 2, 1) \
+ F(StringBuilderConcat, 2, 1) \
\
/* Bit operations */ \
- F(NumberOr, 2) \
- F(NumberAnd, 2) \
- F(NumberXor, 2) \
- F(NumberNot, 1) \
+ F(NumberOr, 2, 1) \
+ F(NumberAnd, 2, 1) \
+ F(NumberXor, 2, 1) \
+ F(NumberNot, 1, 1) \
\
- F(NumberShl, 2) \
- F(NumberShr, 2) \
- F(NumberSar, 2) \
+ F(NumberShl, 2, 1) \
+ F(NumberShr, 2, 1) \
+ F(NumberSar, 2, 1) \
\
/* Comparisons */ \
- F(NumberEquals, 2) \
- F(StringEquals, 2) \
+ F(NumberEquals, 2, 1) \
+ F(StringEquals, 2, 1) \
\
- F(NumberCompare, 3) \
- F(SmiLexicographicCompare, 2) \
- F(StringCompare, 2) \
+ F(NumberCompare, 3, 1) \
+ F(SmiLexicographicCompare, 2, 1) \
+ F(StringCompare, 2, 1) \
\
/* Math */ \
- F(Math_abs, 1) \
- F(Math_acos, 1) \
- F(Math_asin, 1) \
- F(Math_atan, 1) \
- F(Math_atan2, 2) \
- F(Math_ceil, 1) \
- F(Math_cos, 1) \
- F(Math_exp, 1) \
- F(Math_floor, 1) \
- F(Math_log, 1) \
- F(Math_pow, 2) \
- F(Math_round, 1) \
- F(Math_sin, 1) \
- F(Math_sqrt, 1) \
- F(Math_tan, 1) \
+ F(Math_abs, 1, 1) \
+ F(Math_acos, 1, 1) \
+ F(Math_asin, 1, 1) \
+ F(Math_atan, 1, 1) \
+ F(Math_atan2, 2, 1) \
+ F(Math_ceil, 1, 1) \
+ F(Math_cos, 1, 1) \
+ F(Math_exp, 1, 1) \
+ F(Math_floor, 1, 1) \
+ F(Math_log, 1, 1) \
+ F(Math_pow, 2, 1) \
+ F(Math_round, 1, 1) \
+ F(Math_sin, 1, 1) \
+ F(Math_sqrt, 1, 1) \
+ F(Math_tan, 1, 1) \
\
/* Regular expressions */ \
- F(RegExpCompile, 3) \
- F(RegExpExec, 4) \
+ F(RegExpCompile, 3, 1) \
+ F(RegExpExec, 4, 1) \
\
/* Strings */ \
- F(StringCharCodeAt, 2) \
- F(StringIndexOf, 3) \
- F(StringLastIndexOf, 3) \
- F(StringLocaleCompare, 2) \
- F(StringSlice, 3) \
- F(StringReplaceRegExpWithString, 4) \
- F(StringMatch, 3) \
+ F(StringCharCodeAt, 2, 1) \
+ F(StringIndexOf, 3, 1) \
+ F(StringLastIndexOf, 3, 1) \
+ F(StringLocaleCompare, 2, 1) \
+ F(StringSlice, 3, 1) \
+ F(StringReplaceRegExpWithString, 4, 1) \
+ F(StringMatch, 3, 1) \
\
/* Numbers */ \
- F(NumberToRadixString, 2) \
- F(NumberToFixed, 2) \
- F(NumberToExponential, 2) \
- F(NumberToPrecision, 2)
+ F(NumberToRadixString, 2, 1) \
+ F(NumberToFixed, 2, 1) \
+ F(NumberToExponential, 2, 1) \
+ F(NumberToPrecision, 2, 1)
#define RUNTIME_FUNCTION_LIST_ALWAYS_2(F) \
/* Reflection */ \
- F(FunctionSetInstanceClassName, 2) \
- F(FunctionSetLength, 2) \
- F(FunctionSetPrototype, 2) \
- F(FunctionGetName, 1) \
- F(FunctionSetName, 2) \
- F(FunctionGetSourceCode, 1) \
- F(FunctionGetScript, 1) \
- F(FunctionGetScriptSourcePosition, 1) \
- F(FunctionGetPositionForOffset, 2) \
- F(FunctionIsAPIFunction, 1) \
- F(GetScript, 1) \
- F(CollectStackTrace, 2) \
- \
- F(ClassOf, 1) \
- F(SetCode, 2) \
- \
- F(CreateApiFunction, 1) \
- F(IsTemplate, 1) \
- F(GetTemplateField, 2) \
- F(DisableAccessChecks, 1) \
- F(EnableAccessChecks, 1) \
+ F(FunctionSetInstanceClassName, 2, 1) \
+ F(FunctionSetLength, 2, 1) \
+ F(FunctionSetPrototype, 2, 1) \
+ F(FunctionGetName, 1, 1) \
+ F(FunctionSetName, 2, 1) \
+ F(FunctionGetSourceCode, 1, 1) \
+ F(FunctionGetScript, 1, 1) \
+ F(FunctionGetScriptSourcePosition, 1, 1) \
+ F(FunctionGetPositionForOffset, 2, 1) \
+ F(FunctionIsAPIFunction, 1, 1) \
+ F(GetScript, 1, 1) \
+ F(CollectStackTrace, 2, 1) \
+ \
+ F(ClassOf, 1, 1) \
+ F(SetCode, 2, 1) \
+ \
+ F(CreateApiFunction, 1, 1) \
+ F(IsTemplate, 1, 1) \
+ F(GetTemplateField, 2, 1) \
+ F(DisableAccessChecks, 1, 1) \
+ F(EnableAccessChecks, 1, 1) \
\
/* Dates */ \
- F(DateCurrentTime, 0) \
- F(DateParseString, 2) \
- F(DateLocalTimezone, 1) \
- F(DateLocalTimeOffset, 0) \
- F(DateDaylightSavingsOffset, 1) \
+ F(DateCurrentTime, 0, 1) \
+ F(DateParseString, 2, 1) \
+ F(DateLocalTimezone, 1, 1) \
+ F(DateLocalTimeOffset, 0, 1) \
+ F(DateDaylightSavingsOffset, 1, 1) \
\
/* Numbers */ \
- F(NumberIsFinite, 1) \
+ F(NumberIsFinite, 1, 1) \
\
/* Globals */ \
- F(CompileString, 2) \
- F(GlobalPrint, 1) \
+ F(CompileString, 2, 1) \
+ F(GlobalPrint, 1, 1) \
\
/* Eval */ \
- F(GlobalReceiver, 1) \
- F(ResolvePossiblyDirectEval, 2) \
+ F(GlobalReceiver, 1, 1) \
+ F(ResolvePossiblyDirectEval, 2, 1) \
\
- F(SetProperty, -1 /* 3 or 4 */) \
- F(IgnoreAttributesAndSetProperty, -1 /* 3 or 4 */) \
+ F(SetProperty, -1 /* 3 or 4 */, 1) \
+ F(IgnoreAttributesAndSetProperty, -1 /* 3 or 4 */, 1) \
\
/* Arrays */ \
- F(RemoveArrayHoles, 2) \
- F(GetArrayKeys, 2) \
- F(MoveArrayContents, 2) \
- F(EstimateNumberOfElements, 1) \
+ F(RemoveArrayHoles, 2, 1) \
+ F(GetArrayKeys, 2, 1) \
+ F(MoveArrayContents, 2, 1) \
+ F(EstimateNumberOfElements, 1, 1) \
\
/* Getters and Setters */ \
- F(DefineAccessor, -1 /* 4 or 5 */) \
- F(LookupAccessor, 3) \
+ F(DefineAccessor, -1 /* 4 or 5 */, 1) \
+ F(LookupAccessor, 3, 1) \
\
/* Literals */ \
- F(MaterializeRegExpLiteral, 4)\
- F(CreateArrayLiteralBoilerplate, 3) \
- F(CreateObjectLiteralBoilerplate, 3) \
- F(CloneLiteralBoilerplate, 1) \
- F(CloneShallowLiteralBoilerplate, 1) \
+ F(MaterializeRegExpLiteral, 4, 1)\
+ F(CreateArrayLiteralBoilerplate, 3, 1) \
+ F(CreateObjectLiteralBoilerplate, 3, 1) \
+ F(CloneLiteralBoilerplate, 1, 1) \
+ F(CloneShallowLiteralBoilerplate, 1, 1) \
\
/* Catch context extension objects */ \
- F(CreateCatchExtensionObject, 2) \
+ F(CreateCatchExtensionObject, 2, 1) \
\
/* Statements */ \
- F(NewClosure, 2) \
- F(NewObject, 1) \
- F(Throw, 1) \
- F(ReThrow, 1) \
- F(ThrowReferenceError, 1) \
- F(StackGuard, 1) \
+ F(NewClosure, 2, 1) \
+ F(NewObject, 1, 1) \
+ F(Throw, 1, 1) \
+ F(ReThrow, 1, 1) \
+ F(ThrowReferenceError, 1, 1) \
+ F(StackGuard, 1, 1) \
\
/* Contexts */ \
- F(NewContext, 1) \
- F(PushContext, 1) \
- F(PushCatchContext, 1) \
- F(LookupContext, 2) \
- F(LoadContextSlot, 2) \
- F(LoadContextSlotNoReferenceError, 2) \
- F(StoreContextSlot, 3) \
+ F(NewContext, 1, 1) \
+ F(PushContext, 1, 1) \
+ F(PushCatchContext, 1, 1) \
+ F(LookupContext, 2, 1) \
+ F(LoadContextSlot, 2, 2) \
+ F(LoadContextSlotNoReferenceError, 2, 2) \
+ F(StoreContextSlot, 3, 1) \
\
/* Declarations and initialization */ \
- F(DeclareGlobals, 3) \
- F(DeclareContextSlot, 4) \
- F(InitializeVarGlobal, -1 /* 1 or 2 */) \
- F(InitializeConstGlobal, 2) \
- F(InitializeConstContextSlot, 3) \
- F(OptimizeObjectForAddingMultipleProperties, 2) \
- F(TransformToFastProperties, 1) \
+ F(DeclareGlobals, 3, 1) \
+ F(DeclareContextSlot, 4, 1) \
+ F(InitializeVarGlobal, -1 /* 1 or 2 */, 1) \
+ F(InitializeConstGlobal, 2, 1) \
+ F(InitializeConstContextSlot, 3, 1) \
+ F(OptimizeObjectForAddingMultipleProperties, 2, 1) \
+ F(TransformToFastProperties, 1, 1) \
\
/* Debugging */ \
- F(DebugPrint, 1) \
- F(DebugTrace, 0) \
- F(TraceEnter, 0) \
- F(TraceExit, 1) \
- F(Abort, 2) \
+ F(DebugPrint, 1, 1) \
+ F(DebugTrace, 0, 1) \
+ F(TraceEnter, 0, 1) \
+ F(TraceExit, 1, 1) \
+ F(Abort, 2, 1) \
/* Logging */ \
- F(Log, 2) \
+ F(Log, 2, 1) \
\
/* Pseudo functions - handled as macros by parser */ \
- F(IS_VAR, 1)
+ F(IS_VAR, 1, 1)
#ifdef ENABLE_DEBUGGER_SUPPORT
#define RUNTIME_FUNCTION_LIST_DEBUGGER_SUPPORT(F) \
/* Debugger support*/ \
- F(DebugBreak, 0) \
- F(SetDebugEventListener, 2) \
- F(Break, 0) \
- F(DebugGetPropertyDetails, 2) \
- F(DebugGetProperty, 2) \
- F(DebugLocalPropertyNames, 1) \
- F(DebugLocalElementNames, 1) \
- F(DebugPropertyTypeFromDetails, 1) \
- F(DebugPropertyAttributesFromDetails, 1) \
- F(DebugPropertyIndexFromDetails, 1) \
- F(DebugInterceptorInfo, 1) \
- F(DebugNamedInterceptorPropertyNames, 1) \
- F(DebugIndexedInterceptorElementNames, 1) \
- F(DebugNamedInterceptorPropertyValue, 2) \
- F(DebugIndexedInterceptorElementValue, 2) \
- F(CheckExecutionState, 1) \
- F(GetFrameCount, 1) \
- F(GetFrameDetails, 2) \
- F(GetScopeCount, 2) \
- F(GetScopeDetails, 3) \
- F(DebugPrintScopes, 0) \
- F(GetCFrames, 1) \
- F(GetThreadCount, 1) \
- F(GetThreadDetails, 2) \
- F(GetBreakLocations, 1) \
- F(SetFunctionBreakPoint, 3) \
- F(SetScriptBreakPoint, 3) \
- F(ClearBreakPoint, 1) \
- F(ChangeBreakOnException, 2) \
- F(PrepareStep, 3) \
- F(ClearStepping, 0) \
- F(DebugEvaluate, 4) \
- F(DebugEvaluateGlobal, 3) \
- F(DebugGetLoadedScripts, 0) \
- F(DebugReferencedBy, 3) \
- F(DebugConstructedBy, 2) \
- F(DebugGetPrototype, 1) \
- F(SystemBreak, 0) \
- F(DebugDisassembleFunction, 1) \
- F(DebugDisassembleConstructor, 1) \
- F(FunctionGetInferredName, 1)
+ F(DebugBreak, 0, 1) \
+ F(SetDebugEventListener, 2, 1) \
+ F(Break, 0, 1) \
+ F(DebugGetPropertyDetails, 2, 1) \
+ F(DebugGetProperty, 2, 1) \
+ F(DebugLocalPropertyNames, 1, 1) \
+ F(DebugLocalElementNames, 1, 1) \
+ F(DebugPropertyTypeFromDetails, 1, 1) \
+ F(DebugPropertyAttributesFromDetails, 1, 1) \
+ F(DebugPropertyIndexFromDetails, 1, 1) \
+ F(DebugInterceptorInfo, 1, 1) \
+ F(DebugNamedInterceptorPropertyNames, 1, 1) \
+ F(DebugIndexedInterceptorElementNames, 1, 1) \
+ F(DebugNamedInterceptorPropertyValue, 2, 1) \
+ F(DebugIndexedInterceptorElementValue, 2, 1) \
+ F(CheckExecutionState, 1, 1) \
+ F(GetFrameCount, 1, 1) \
+ F(GetFrameDetails, 2, 1) \
+ F(GetScopeCount, 2, 1) \
+ F(GetScopeDetails, 3, 1) \
+ F(DebugPrintScopes, 0, 1) \
+ F(GetCFrames, 1, 1) \
+ F(GetThreadCount, 1, 1) \
+ F(GetThreadDetails, 2, 1) \
+ F(GetBreakLocations, 1, 1) \
+ F(SetFunctionBreakPoint, 3, 1) \
+ F(SetScriptBreakPoint, 3, 1) \
+ F(ClearBreakPoint, 1, 1) \
+ F(ChangeBreakOnException, 2, 1) \
+ F(PrepareStep, 3, 1) \
+ F(ClearStepping, 0, 1) \
+ F(DebugEvaluate, 4, 1) \
+ F(DebugEvaluateGlobal, 3, 1) \
+ F(DebugGetLoadedScripts, 0, 1) \
+ F(DebugReferencedBy, 3, 1) \
+ F(DebugConstructedBy, 2, 1) \
+ F(DebugGetPrototype, 1, 1) \
+ F(SystemBreak, 0, 1) \
+ F(DebugDisassembleFunction, 1, 1) \
+ F(DebugDisassembleConstructor, 1, 1) \
+ F(FunctionGetInferredName, 1, 1)
#else
#define RUNTIME_FUNCTION_LIST_DEBUGGER_SUPPORT(F)
#endif
@@ -313,7 +313,7 @@ namespace internal {
#ifdef DEBUG
#define RUNTIME_FUNCTION_LIST_DEBUG(F) \
/* Testing */ \
- F(ListNatives, 0)
+ F(ListNatives, 0, 1)
#else
#define RUNTIME_FUNCTION_LIST_DEBUG(F)
#endif
@@ -336,7 +336,7 @@ namespace internal {
class Runtime : public AllStatic {
public:
enum FunctionId {
-#define F(name, nargs) k##name,
+#define F(name, nargs, ressize) k##name,
RUNTIME_FUNCTION_LIST(F)
kNofFunctions
#undef F
@@ -357,6 +357,9 @@ class Runtime : public AllStatic {
// arguments.
int nargs;
int stub_id;
+ // Size of result, if complex (larger than a single pointer),
+ // otherwise zero.
+ int result_size;
};
// Get the runtime function with the given function id.

Powered by Google App Engine
This is Rietveld 408576698