diff options
Diffstat (limited to 'deps/v8/src/builtins/builtins-date.cc')
-rw-r--r-- | deps/v8/src/builtins/builtins-date.cc | 308 |
1 files changed, 208 insertions, 100 deletions
diff --git a/deps/v8/src/builtins/builtins-date.cc b/deps/v8/src/builtins/builtins-date.cc index 949620b6b2..df74321093 100644 --- a/deps/v8/src/builtins/builtins-date.cc +++ b/deps/v8/src/builtins/builtins-date.cc @@ -2,9 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "src/builtins/builtins.h" #include "src/builtins/builtins-utils.h" - +#include "src/builtins/builtins.h" +#include "src/code-factory.h" +#include "src/code-stub-assembler.h" #include "src/dateparser-inl.h" namespace v8 { @@ -209,7 +210,7 @@ BUILTIN(DateConstructor_ConstructStub) { if (argc == 0) { time_val = JSDate::CurrentTimeValue(isolate); } else if (argc == 1) { - Handle<Object> value = args.at<Object>(1); + Handle<Object> value = args.at(1); if (value->IsJSDate()) { time_val = Handle<JSDate>::cast(value)->value()->Number(); } else { @@ -226,37 +227,37 @@ BUILTIN(DateConstructor_ConstructStub) { } else { Handle<Object> year_object; ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, year_object, - Object::ToNumber(args.at<Object>(1))); + Object::ToNumber(args.at(1))); Handle<Object> month_object; ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, month_object, - Object::ToNumber(args.at<Object>(2))); + Object::ToNumber(args.at(2))); double year = year_object->Number(); double month = month_object->Number(); double date = 1.0, hours = 0.0, minutes = 0.0, seconds = 0.0, ms = 0.0; if (argc >= 3) { Handle<Object> date_object; ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, date_object, - Object::ToNumber(args.at<Object>(3))); + Object::ToNumber(args.at(3))); date = date_object->Number(); if (argc >= 4) { Handle<Object> hours_object; - ASSIGN_RETURN_FAILURE_ON_EXCEPTION( - isolate, hours_object, Object::ToNumber(args.at<Object>(4))); + ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, hours_object, + Object::ToNumber(args.at(4))); hours = hours_object->Number(); if (argc >= 5) { Handle<Object> minutes_object; - ASSIGN_RETURN_FAILURE_ON_EXCEPTION( - isolate, minutes_object, Object::ToNumber(args.at<Object>(5))); + ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, minutes_object, + Object::ToNumber(args.at(5))); minutes = minutes_object->Number(); if (argc >= 6) { Handle<Object> seconds_object; - ASSIGN_RETURN_FAILURE_ON_EXCEPTION( - isolate, seconds_object, Object::ToNumber(args.at<Object>(6))); + ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, seconds_object, + Object::ToNumber(args.at(6))); seconds = seconds_object->Number(); if (argc >= 7) { Handle<Object> ms_object; - ASSIGN_RETURN_FAILURE_ON_EXCEPTION( - isolate, ms_object, Object::ToNumber(args.at<Object>(7))); + ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, ms_object, + Object::ToNumber(args.at(7))); ms = ms_object->Number(); } } @@ -306,38 +307,37 @@ BUILTIN(DateUTC) { if (argc >= 1) { Handle<Object> year_object; ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, year_object, - Object::ToNumber(args.at<Object>(1))); + Object::ToNumber(args.at(1))); year = year_object->Number(); if (argc >= 2) { Handle<Object> month_object; ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, month_object, - Object::ToNumber(args.at<Object>(2))); + Object::ToNumber(args.at(2))); month = month_object->Number(); if (argc >= 3) { Handle<Object> date_object; - ASSIGN_RETURN_FAILURE_ON_EXCEPTION( - isolate, date_object, Object::ToNumber(args.at<Object>(3))); + ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, date_object, + Object::ToNumber(args.at(3))); date = date_object->Number(); if (argc >= 4) { Handle<Object> hours_object; - ASSIGN_RETURN_FAILURE_ON_EXCEPTION( - isolate, hours_object, Object::ToNumber(args.at<Object>(4))); + ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, hours_object, + Object::ToNumber(args.at(4))); hours = hours_object->Number(); if (argc >= 5) { Handle<Object> minutes_object; - ASSIGN_RETURN_FAILURE_ON_EXCEPTION( - isolate, minutes_object, Object::ToNumber(args.at<Object>(5))); + ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, minutes_object, + Object::ToNumber(args.at(5))); minutes = minutes_object->Number(); if (argc >= 6) { Handle<Object> seconds_object; - ASSIGN_RETURN_FAILURE_ON_EXCEPTION( - isolate, seconds_object, - Object::ToNumber(args.at<Object>(6))); + ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, seconds_object, + Object::ToNumber(args.at(6))); seconds = seconds_object->Number(); if (argc >= 7) { Handle<Object> ms_object; ASSIGN_RETURN_FAILURE_ON_EXCEPTION( - isolate, ms_object, Object::ToNumber(args.at<Object>(7))); + isolate, ms_object, Object::ToNumber(args.at(7))); ms = ms_object->Number(); } } @@ -394,11 +394,11 @@ BUILTIN(DatePrototypeSetFullYear) { dt = day; } if (argc >= 2) { - Handle<Object> month = args.at<Object>(2); + Handle<Object> month = args.at(2); ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, month, Object::ToNumber(month)); m = month->Number(); if (argc >= 3) { - Handle<Object> date = args.at<Object>(3); + Handle<Object> date = args.at(3); ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, date, Object::ToNumber(date)); dt = date->Number(); } @@ -425,15 +425,15 @@ BUILTIN(DatePrototypeSetHours) { double s = (time_within_day / 1000) % 60; double milli = time_within_day % 1000; if (argc >= 2) { - Handle<Object> min = args.at<Object>(2); + Handle<Object> min = args.at(2); ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, min, Object::ToNumber(min)); m = min->Number(); if (argc >= 3) { - Handle<Object> sec = args.at<Object>(3); + Handle<Object> sec = args.at(3); ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, sec, Object::ToNumber(sec)); s = sec->Number(); if (argc >= 4) { - Handle<Object> ms = args.at<Object>(4); + Handle<Object> ms = args.at(4); ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, ms, Object::ToNumber(ms)); milli = ms->Number(); } @@ -482,11 +482,11 @@ BUILTIN(DatePrototypeSetMinutes) { double s = (time_within_day / 1000) % 60; double milli = time_within_day % 1000; if (argc >= 2) { - Handle<Object> sec = args.at<Object>(2); + Handle<Object> sec = args.at(2); ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, sec, Object::ToNumber(sec)); s = sec->Number(); if (argc >= 3) { - Handle<Object> ms = args.at<Object>(3); + Handle<Object> ms = args.at(3); ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, ms, Object::ToNumber(ms)); milli = ms->Number(); } @@ -514,7 +514,7 @@ BUILTIN(DatePrototypeSetMonth) { double m = month->Number(); double dt = day; if (argc >= 2) { - Handle<Object> date = args.at<Object>(2); + Handle<Object> date = args.at(2); ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, date, Object::ToNumber(date)); dt = date->Number(); } @@ -541,7 +541,7 @@ BUILTIN(DatePrototypeSetSeconds) { double s = sec->Number(); double milli = time_within_day % 1000; if (argc >= 2) { - Handle<Object> ms = args.at<Object>(2); + Handle<Object> ms = args.at(2); ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, ms, Object::ToNumber(ms)); milli = ms->Number(); } @@ -595,11 +595,11 @@ BUILTIN(DatePrototypeSetUTCFullYear) { dt = day; } if (argc >= 2) { - Handle<Object> month = args.at<Object>(2); + Handle<Object> month = args.at(2); ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, month, Object::ToNumber(month)); m = month->Number(); if (argc >= 3) { - Handle<Object> date = args.at<Object>(3); + Handle<Object> date = args.at(3); ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, date, Object::ToNumber(date)); dt = date->Number(); } @@ -625,15 +625,15 @@ BUILTIN(DatePrototypeSetUTCHours) { double s = (time_within_day / 1000) % 60; double milli = time_within_day % 1000; if (argc >= 2) { - Handle<Object> min = args.at<Object>(2); + Handle<Object> min = args.at(2); ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, min, Object::ToNumber(min)); m = min->Number(); if (argc >= 3) { - Handle<Object> sec = args.at<Object>(3); + Handle<Object> sec = args.at(3); ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, sec, Object::ToNumber(sec)); s = sec->Number(); if (argc >= 4) { - Handle<Object> ms = args.at<Object>(4); + Handle<Object> ms = args.at(4); ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, ms, Object::ToNumber(ms)); milli = ms->Number(); } @@ -680,11 +680,11 @@ BUILTIN(DatePrototypeSetUTCMinutes) { double s = (time_within_day / 1000) % 60; double milli = time_within_day % 1000; if (argc >= 2) { - Handle<Object> sec = args.at<Object>(2); + Handle<Object> sec = args.at(2); ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, sec, Object::ToNumber(sec)); s = sec->Number(); if (argc >= 3) { - Handle<Object> ms = args.at<Object>(3); + Handle<Object> ms = args.at(3); ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, ms, Object::ToNumber(ms)); milli = ms->Number(); } @@ -711,7 +711,7 @@ BUILTIN(DatePrototypeSetUTCMonth) { double m = month->Number(); double dt = day; if (argc >= 2) { - Handle<Object> date = args.at<Object>(2); + Handle<Object> date = args.at(2); ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, date, Object::ToNumber(date)); dt = date->Number(); } @@ -737,7 +737,7 @@ BUILTIN(DatePrototypeSetUTCSeconds) { double s = sec->Number(); double milli = time_within_day % 1000; if (argc >= 2) { - Handle<Object> ms = args.at<Object>(2); + Handle<Object> ms = args.at(2); ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, ms, Object::ToNumber(ms)); milli = ms->Number(); } @@ -825,22 +825,6 @@ BUILTIN(DatePrototypeToUTCString) { return *isolate->factory()->NewStringFromAsciiChecked(buffer); } -// ES6 section 20.3.4.44 Date.prototype.valueOf ( ) -BUILTIN(DatePrototypeValueOf) { - HandleScope scope(isolate); - CHECK_RECEIVER(JSDate, date, "Date.prototype.valueOf"); - return date->value(); -} - -// ES6 section 20.3.4.45 Date.prototype [ @@toPrimitive ] ( hint ) -BUILTIN(DatePrototypeToPrimitive) { - HandleScope scope(isolate); - DCHECK_EQ(2, args.length()); - CHECK_RECEIVER(JSReceiver, receiver, "Date.prototype [ @@toPrimitive ]"); - Handle<Object> hint = args.at<Object>(1); - RETURN_RESULT_OR_FAILURE(isolate, JSDate::ToPrimitive(receiver, hint)); -} - // ES6 section B.2.4.1 Date.prototype.getYear ( ) BUILTIN(DatePrototypeGetYear) { HandleScope scope(isolate); @@ -908,9 +892,10 @@ BUILTIN(DatePrototypeToJson) { } } -// static -void Builtins::Generate_DatePrototype_GetField(CodeStubAssembler* assembler, - int field_index) { +namespace { + +void Generate_DatePrototype_GetField(CodeStubAssembler* assembler, + int field_index) { typedef CodeStubAssembler::Label Label; typedef compiler::Node Node; @@ -952,7 +937,7 @@ void Builtins::Generate_DatePrototype_GetField(CodeStubAssembler* assembler, Node* function = assembler->ExternalConstant( ExternalReference::get_date_field_function(assembler->isolate())); Node* result = assembler->CallCFunction2( - MachineType::AnyTagged(), MachineType::Pointer(), + MachineType::AnyTagged(), MachineType::AnyTagged(), MachineType::AnyTagged(), function, receiver, field_index_smi); assembler->Return(result); } @@ -965,100 +950,223 @@ void Builtins::Generate_DatePrototype_GetField(CodeStubAssembler* assembler, } } +} // namespace + // static -void Builtins::Generate_DatePrototypeGetDate(CodeStubAssembler* assembler) { - Generate_DatePrototype_GetField(assembler, JSDate::kDay); +void Builtins::Generate_DatePrototypeGetDate( + compiler::CodeAssemblerState* state) { + CodeStubAssembler assembler(state); + Generate_DatePrototype_GetField(&assembler, JSDate::kDay); } // static -void Builtins::Generate_DatePrototypeGetDay(CodeStubAssembler* assembler) { - Generate_DatePrototype_GetField(assembler, JSDate::kWeekday); +void Builtins::Generate_DatePrototypeGetDay( + compiler::CodeAssemblerState* state) { + CodeStubAssembler assembler(state); + Generate_DatePrototype_GetField(&assembler, JSDate::kWeekday); } // static -void Builtins::Generate_DatePrototypeGetFullYear(CodeStubAssembler* assembler) { - Generate_DatePrototype_GetField(assembler, JSDate::kYear); +void Builtins::Generate_DatePrototypeGetFullYear( + compiler::CodeAssemblerState* state) { + CodeStubAssembler assembler(state); + Generate_DatePrototype_GetField(&assembler, JSDate::kYear); } // static -void Builtins::Generate_DatePrototypeGetHours(CodeStubAssembler* assembler) { - Generate_DatePrototype_GetField(assembler, JSDate::kHour); +void Builtins::Generate_DatePrototypeGetHours( + compiler::CodeAssemblerState* state) { + CodeStubAssembler assembler(state); + Generate_DatePrototype_GetField(&assembler, JSDate::kHour); } // static void Builtins::Generate_DatePrototypeGetMilliseconds( - CodeStubAssembler* assembler) { - Generate_DatePrototype_GetField(assembler, JSDate::kMillisecond); + compiler::CodeAssemblerState* state) { + CodeStubAssembler assembler(state); + Generate_DatePrototype_GetField(&assembler, JSDate::kMillisecond); } // static -void Builtins::Generate_DatePrototypeGetMinutes(CodeStubAssembler* assembler) { - Generate_DatePrototype_GetField(assembler, JSDate::kMinute); +void Builtins::Generate_DatePrototypeGetMinutes( + compiler::CodeAssemblerState* state) { + CodeStubAssembler assembler(state); + Generate_DatePrototype_GetField(&assembler, JSDate::kMinute); } // static -void Builtins::Generate_DatePrototypeGetMonth(CodeStubAssembler* assembler) { - Generate_DatePrototype_GetField(assembler, JSDate::kMonth); +void Builtins::Generate_DatePrototypeGetMonth( + compiler::CodeAssemblerState* state) { + CodeStubAssembler assembler(state); + Generate_DatePrototype_GetField(&assembler, JSDate::kMonth); } // static -void Builtins::Generate_DatePrototypeGetSeconds(CodeStubAssembler* assembler) { - Generate_DatePrototype_GetField(assembler, JSDate::kSecond); +void Builtins::Generate_DatePrototypeGetSeconds( + compiler::CodeAssemblerState* state) { + CodeStubAssembler assembler(state); + Generate_DatePrototype_GetField(&assembler, JSDate::kSecond); } // static -void Builtins::Generate_DatePrototypeGetTime(CodeStubAssembler* assembler) { - Generate_DatePrototype_GetField(assembler, JSDate::kDateValue); +void Builtins::Generate_DatePrototypeGetTime( + compiler::CodeAssemblerState* state) { + CodeStubAssembler assembler(state); + Generate_DatePrototype_GetField(&assembler, JSDate::kDateValue); } // static void Builtins::Generate_DatePrototypeGetTimezoneOffset( - CodeStubAssembler* assembler) { - Generate_DatePrototype_GetField(assembler, JSDate::kTimezoneOffset); + compiler::CodeAssemblerState* state) { + CodeStubAssembler assembler(state); + Generate_DatePrototype_GetField(&assembler, JSDate::kTimezoneOffset); } // static -void Builtins::Generate_DatePrototypeGetUTCDate(CodeStubAssembler* assembler) { - Generate_DatePrototype_GetField(assembler, JSDate::kDayUTC); +void Builtins::Generate_DatePrototypeGetUTCDate( + compiler::CodeAssemblerState* state) { + CodeStubAssembler assembler(state); + Generate_DatePrototype_GetField(&assembler, JSDate::kDayUTC); } // static -void Builtins::Generate_DatePrototypeGetUTCDay(CodeStubAssembler* assembler) { - Generate_DatePrototype_GetField(assembler, JSDate::kWeekdayUTC); +void Builtins::Generate_DatePrototypeGetUTCDay( + compiler::CodeAssemblerState* state) { + CodeStubAssembler assembler(state); + Generate_DatePrototype_GetField(&assembler, JSDate::kWeekdayUTC); } // static void Builtins::Generate_DatePrototypeGetUTCFullYear( - CodeStubAssembler* assembler) { - Generate_DatePrototype_GetField(assembler, JSDate::kYearUTC); + compiler::CodeAssemblerState* state) { + CodeStubAssembler assembler(state); + Generate_DatePrototype_GetField(&assembler, JSDate::kYearUTC); } // static -void Builtins::Generate_DatePrototypeGetUTCHours(CodeStubAssembler* assembler) { - Generate_DatePrototype_GetField(assembler, JSDate::kHourUTC); +void Builtins::Generate_DatePrototypeGetUTCHours( + compiler::CodeAssemblerState* state) { + CodeStubAssembler assembler(state); + Generate_DatePrototype_GetField(&assembler, JSDate::kHourUTC); } // static void Builtins::Generate_DatePrototypeGetUTCMilliseconds( - CodeStubAssembler* assembler) { - Generate_DatePrototype_GetField(assembler, JSDate::kMillisecondUTC); + compiler::CodeAssemblerState* state) { + CodeStubAssembler assembler(state); + Generate_DatePrototype_GetField(&assembler, JSDate::kMillisecondUTC); } // static void Builtins::Generate_DatePrototypeGetUTCMinutes( - CodeStubAssembler* assembler) { - Generate_DatePrototype_GetField(assembler, JSDate::kMinuteUTC); + compiler::CodeAssemblerState* state) { + CodeStubAssembler assembler(state); + Generate_DatePrototype_GetField(&assembler, JSDate::kMinuteUTC); } // static -void Builtins::Generate_DatePrototypeGetUTCMonth(CodeStubAssembler* assembler) { - Generate_DatePrototype_GetField(assembler, JSDate::kMonthUTC); +void Builtins::Generate_DatePrototypeGetUTCMonth( + compiler::CodeAssemblerState* state) { + CodeStubAssembler assembler(state); + Generate_DatePrototype_GetField(&assembler, JSDate::kMonthUTC); } // static void Builtins::Generate_DatePrototypeGetUTCSeconds( - CodeStubAssembler* assembler) { - Generate_DatePrototype_GetField(assembler, JSDate::kSecondUTC); + compiler::CodeAssemblerState* state) { + CodeStubAssembler assembler(state); + Generate_DatePrototype_GetField(&assembler, JSDate::kSecondUTC); +} + +// static +void Builtins::Generate_DatePrototypeValueOf( + compiler::CodeAssemblerState* state) { + CodeStubAssembler assembler(state); + Generate_DatePrototype_GetField(&assembler, JSDate::kDateValue); +} + +// static +void Builtins::Generate_DatePrototypeToPrimitive( + compiler::CodeAssemblerState* state) { + CodeStubAssembler assembler(state); + typedef CodeStubAssembler::Label Label; + typedef compiler::Node Node; + + Node* receiver = assembler.Parameter(0); + Node* hint = assembler.Parameter(1); + Node* context = assembler.Parameter(4); + + // Check if the {receiver} is actually a JSReceiver. + Label receiver_is_invalid(&assembler, Label::kDeferred); + assembler.GotoIf(assembler.TaggedIsSmi(receiver), &receiver_is_invalid); + assembler.GotoUnless(assembler.IsJSReceiver(receiver), &receiver_is_invalid); + + // Dispatch to the appropriate OrdinaryToPrimitive builtin. + Label hint_is_number(&assembler), hint_is_string(&assembler), + hint_is_invalid(&assembler, Label::kDeferred); + + // Fast cases for internalized strings. + Node* number_string = assembler.LoadRoot(Heap::knumber_stringRootIndex); + assembler.GotoIf(assembler.WordEqual(hint, number_string), &hint_is_number); + Node* default_string = assembler.LoadRoot(Heap::kdefault_stringRootIndex); + assembler.GotoIf(assembler.WordEqual(hint, default_string), &hint_is_string); + Node* string_string = assembler.LoadRoot(Heap::kstring_stringRootIndex); + assembler.GotoIf(assembler.WordEqual(hint, string_string), &hint_is_string); + + // Slow-case with actual string comparisons. + Callable string_equal = CodeFactory::StringEqual(assembler.isolate()); + assembler.GotoIf(assembler.TaggedIsSmi(hint), &hint_is_invalid); + assembler.GotoUnless(assembler.IsString(hint), &hint_is_invalid); + assembler.GotoIf(assembler.WordEqual(assembler.CallStub(string_equal, context, + hint, number_string), + assembler.TrueConstant()), + &hint_is_number); + assembler.GotoIf(assembler.WordEqual(assembler.CallStub(string_equal, context, + hint, default_string), + assembler.TrueConstant()), + &hint_is_string); + assembler.GotoIf(assembler.WordEqual(assembler.CallStub(string_equal, context, + hint, string_string), + assembler.TrueConstant()), + &hint_is_string); + assembler.Goto(&hint_is_invalid); + + // Use the OrdinaryToPrimitive builtin to convert to a Number. + assembler.Bind(&hint_is_number); + { + Callable callable = CodeFactory::OrdinaryToPrimitive( + assembler.isolate(), OrdinaryToPrimitiveHint::kNumber); + Node* result = assembler.CallStub(callable, context, receiver); + assembler.Return(result); + } + + // Use the OrdinaryToPrimitive builtin to convert to a String. + assembler.Bind(&hint_is_string); + { + Callable callable = CodeFactory::OrdinaryToPrimitive( + assembler.isolate(), OrdinaryToPrimitiveHint::kString); + Node* result = assembler.CallStub(callable, context, receiver); + assembler.Return(result); + } + + // Raise a TypeError if the {hint} is invalid. + assembler.Bind(&hint_is_invalid); + { + Node* result = + assembler.CallRuntime(Runtime::kThrowInvalidHint, context, hint); + assembler.Return(result); + } + + // Raise a TypeError if the {receiver} is not a JSReceiver instance. + assembler.Bind(&receiver_is_invalid); + { + Node* result = assembler.CallRuntime( + Runtime::kThrowIncompatibleMethodReceiver, context, + assembler.HeapConstant(assembler.factory()->NewStringFromAsciiChecked( + "Date.prototype [ @@toPrimitive ]", TENURED)), + receiver); + assembler.Return(result); + } } } // namespace internal |