Updated. Kevin, please let me know if this is OK. Cheers Martin
http://codereview.chromium.org/6698015/diff/1/src/arm/code-stubs-arm.cc File src/arm/code-stubs-arm.cc (right): http://codereview.chromium.org/6698015/diff/1/src/arm/code-stubs-arm.cc#newcode4807 src/arm/code-stubs-arm.cc:4807: int arguments_object_size) { On 2011/03/15 09:58:40, Lasse Reichstein wrote:
Could you get these values from methods on ArgumentsAccessStub that
switch on
the type_?
Done. http://codereview.chromium.org/6698015/diff/1/src/bootstrapper.cc File src/bootstrapper.cc (right): http://codereview.chromium.org/6698015/diff/1/src/bootstrapper.cc#newcode998 src/bootstrapper.cc:998: // callee must be added as the second property. On 2011/03/15 09:58:40, Lasse Reichstein wrote:
These are swapped because length is the only one requiring an
in-object field
now?
Yes. We always have length, calee is only on non-strict arguments objects. http://codereview.chromium.org/6698015/diff/1/src/heap.cc File src/heap.cc (right): http://codereview.chromium.org/6698015/diff/1/src/heap.cc#newcode2942 src/heap.cc:2942: if (arguments_object_size == kArgumentsObjectSize) { On 2011/03/15 09:58:40, Lasse Reichstein wrote:
Save the is_strict_callee boolean as a variable, and use it both above
and here,
instead of checking a derived value here.
Done. http://codereview.chromium.org/6698015/diff/1/src/ia32/code-stubs-ia32.cc File src/ia32/code-stubs-ia32.cc (right): http://codereview.chromium.org/6698015/diff/1/src/ia32/code-stubs-ia32.cc#newcode3660 src/ia32/code-stubs-ia32.cc:3660: __ mov(FieldOperand(eax, JSObject::kHeaderSize + kPointerSize), ebx); On 2011/03/15 09:58:40, Lasse Reichstein wrote:
use FieldOperand(eax, JSObject::kHeaderSize +
Heap::arguments_callee_index *
kPointerSize) instead of implicitly duplicating the constant in the expression.
Done, although the new code is less pretty :( especially in arm version where the only way to achieve <80 lines was to introduce additional local http://codereview.chromium.org/6698015/diff/1/src/ia32/code-stubs-ia32.cc#newcode3666 src/ia32/code-stubs-ia32.cc:3666: __ mov(FieldOperand(eax, JSObject::kHeaderSize), ecx); On 2011/03/15 09:58:40, Lasse Reichstein wrote:
Ditto here. Just do FieldOperand(eax, JSObject::kHeaderSize + Heap::arguments_length_index
*
kPointerSize)
Done. http://codereview.chromium.org/6698015/diff/1/test/mjsunit/strict-mode.js File test/mjsunit/strict-mode.js (right): http://codereview.chromium.org/6698015/diff/1/test/mjsunit/strict-mode.js#newcode1061 test/mjsunit/strict-mode.js:1061: CheckPillDescriptor(args, "callee"); On 2011/03/15 09:58:40, Lasse Reichstein wrote:
How about a strict function calling a non-strict function that returns arguments? This should still poison caller (but not callee according
to 10.6,
[[Get]], step 3.b). I think that might not be implemented yet, correct?
Correct. That part is not yet implemented. http://codereview.chromium.org/6698015/diff/6001/src/code-stubs.h File src/code-stubs.h (right): http://codereview.chromium.org/6698015/diff/6001/src/code-stubs.h#newcode684 src/code-stubs.h:684: } This is tragic. Using ?: results in linker not being able to find the kArguments* constants. Unless I am missing something it smells like gcc bug... so I had to resort to if .. else to work around it. It didn't make difference whether the code was in inline method or not. http://codereview.chromium.org/6698015/ -- v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev
