Index: src/code-stub-assembler.cc |
diff --git a/src/code-stub-assembler.cc b/src/code-stub-assembler.cc |
index 5d4531f6937674a04926f75000ba95da6ce8385c..e87797d42e158690aa16b4f5aa496b0666ce7ade 100644 |
--- a/src/code-stub-assembler.cc |
+++ b/src/code-stub-assembler.cc |
@@ -8499,6 +8499,28 @@ Node* CodeStubArguments::AtIndex(int index) const { |
return AtIndex(assembler_->IntPtrConstant(index)); |
} |
+Node* CodeStubArguments::GetOptionalArgumentValue(int index, |
+ Node* default_value) { |
+ typedef CodeStubAssembler::Variable Variable; |
+ Variable result(assembler_, MachineRepresentation::kTagged); |
+ CodeStubAssembler::Label argument_missing(assembler_), |
+ argument_done(assembler_, &result); |
+ |
+ assembler_->GotoIf(assembler_->IntPtrOrSmiGreaterThanOrEqual( |
Igor Sheludko
2017/04/27 10:38:05
s/IntPtr/UintPtr/ to be in sync with AtIndex.
danno
2017/04/28 06:58:10
Done.
|
+ assembler_->IntPtrOrSmiConstant(index, argc_mode_), |
+ argc_, argc_mode_), |
+ &argument_missing); |
+ result.Bind(AtIndex(index)); |
+ assembler_->Goto(&argument_done); |
+ |
+ assembler_->BIND(&argument_missing); |
+ result.Bind(default_value); |
+ assembler_->Goto(&argument_done); |
+ |
+ assembler_->BIND(&argument_done); |
+ return result.value(); |
+} |
+ |
void CodeStubArguments::ForEach( |
const CodeStubAssembler::VariableList& vars, |
const CodeStubArguments::ForEachBodyFunction& body, Node* first, Node* last, |