LGTM. Interesting. On Thu, Sep 11, 2008 at 2:42 PM, <[EMAIL PROTECTED]> wrote: > Reviewers: Kasper Lund, > > Description: > Fix bug in function context slot lookup. There were two problems: we > read at the wrong index in the scope information and we forgot to add > Context::MIN_CONTEXT_SLOTS to the index. > > This fixes issue 24. > > Please review this at http://codereview.chromium.org/1938 > > Affected files: > M src/codegen-ia32.cc > M src/scopeinfo.cc > A test/mjsunit/with-function-expression.js > > > Index: test/mjsunit/with-function-expression.js > =================================================================== > --- test/mjsunit/with-function-expression.js (revision 0) > +++ test/mjsunit/with-function-expression.js (revision 0) > @@ -0,0 +1,36 @@ > +// Copyright 2008 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: > +// > +// * Redistributions of source code must retain the above copyright > +// notice, this list of conditions and the following disclaimer. > +// * Redistributions in binary form must reproduce the above > +// copyright notice, this list of conditions and the following > +// disclaimer in the documentation and/or other materials provided > +// with the distribution. > +// * Neither the name of Google Inc. nor the names of its > +// contributors may be used to endorse or promote products derived > +// from this software without specific prior written permission. > +// > +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS > +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT > +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR > +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT > +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, > +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT > +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, > +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY > +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE > +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > + > +var source = "(function x() { with({}) { return '' + x; } })()"; > + > +// Don't throw exceptions. > +assertDoesNotThrow(source); > + > +// Check that the return value is a function. Use regexp to avoid > +// depending on the exact printing of the function. > +var regexp = /function/; > +var res = assertTrue(eval(source).match(regexp) == 'function'); > Index: src/scopeinfo.cc > =================================================================== > --- src/scopeinfo.cc (revision 267) > +++ src/scopeinfo.cc (working copy) > @@ -484,10 +484,13 @@ > ASSERT(name->IsSymbol()); > if (code->sinfo_size() > 0) { > Object** p = &Memory::Object_at(code->sinfo_start()); > - if (*p++ == name) { > - int n; > - ReadInt(p, &n); // n = number of context slots > - return n -1; // the function context slot is the last entry > + if (*p == name) { > + p = ContextEntriesAddr(code); > + int n; // number of context slots > + ReadInt(p, &n); > + ASSERT(n != 0); > + // The function context slot is the last entry. > + return n + Context::MIN_CONTEXT_SLOTS - 1; > } > } > return -1; > Index: src/codegen-ia32.cc > =================================================================== > --- src/codegen-ia32.cc (revision 267) > +++ src/codegen-ia32.cc (working copy) > @@ -918,7 +918,6 @@ > Scope* scope, > Reference* ref, > InitState init_state) { > - > Comment cmnt(masm, "[ Store to VariableProxy"); > Variable* node = var(); > > > >
--~--~---------~--~----~------------~-------~--~----~ v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev -~----------~----~----~----~------~----~------~--~---
