Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
branch: master
Commits on Sep 23, 2011
  1. @scottmac

    [Fix/HPHPi] Fix assertion failure and a regression

    myang authored scottmac committed
    Summary:
    The VectorConcatExpression may not have > 2 elements because two contiguous
    literals can be folded into 1. Fixed the assertion. Also fixed
    OverrideFunctionCallExpression::eval to respect s_hasRenamedFunction to
    fall back to the more general SimpleFunctionCallExpression::eval.
    
    Test Plan:
    make fast_tests under DEBUG
    <?php
    function goo() {
      var_dump('goo');
    }
    fb_rename_function('func_num_args', 'foo');
    fb_rename_function('goo', 'func_num_args');
    function bar() {
      var_dump(foo());
      var_dump(func_num_args());
    }
    bar(1, 2, 3);
    
    The above test case fails under HPHPc, but HPHPi output should be (and used
    to be):
    [myang@dev1560] hphpi/hphpi /tmp/b.php
    int(3)
    string(3) "goo"
    NULL
    
    Reviewers: mwilliams, qigao
    
    Reviewed By: mwilliams
    
    CC: hphp-diffs@lists, ps, mwilliams
    
    Differential Revision: 332321
  2. @markw65 @scottmac

    [CodeSize/Perf] Better organization of ClassInfo

    markw65 authored scottmac committed
    Summary:
     - checking for the presence of a class doesnt need to call
       globals->class_exists(); it can just access g->CDEC(cls)
     - finding the current redeclared class doesnt need a per-redeclared-class
       function, it can just lookup the id in the RedeclaredObjectStaticCallbacks
       object
     - ClassInfoRedeclared should be dealt with internally. Now we can do so
       efficiently (given the preceding changes), just return the correct
       ClassInfoUnique, or null.
     - Redeclared functions werent dealt with at all, and volatile functions
       required a call to globals->function_exists(). Fix both the same way as classes.
     - classes, interfaces and traits each had their own StringTo map. The result
       was that after looking it up in one map (and not finding it) you had to check
       the other two. Combine the maps.
     - cleaned up the class map a bit by removing no-longer used fields
    
    Test Plan: fast_tests slow_tests, flib/unit tests.
    
    Reviewers: qigao, myang
    
    Reviewed By: myang
    
    CC: ps, mwilliams, myang
    
    Differential Revision: 332418
  3. @scottmac

    [hphpd] allow accessing base classes' private/protected in bac mode

    qigao authored scottmac committed
    Summary:
    The BypassAccessCheck (bac) mode was added to bypass the check on
    private/protected properties and methods so that users can inspect values
    and call methods. But it failed to search for properties on base
    classes. This diff adds support to do that in the special bac mode and
    hide a bunch of warnings.
    
    Test Plan:
    make fast_tests
    manually verified the case in the task
    tried on a small case to access base class's private method
    
    Reviewers: mwilliams, myang
    
    Reviewed By: myang
    
    CC: ps, mwilliams, myang
    
    Differential Revision: 331703
    
    Task ID: 724909
  4. @scottmac

    [Perf/HPHPi] Add VectorConcatExpression

    myang authored scottmac committed
    Summary:
    I added VectorConcatExpression to do a faster concat when we have more than
    2 parts to be concatenated so we don't do repeated malloc/free for storing
    those intermidiate temps. Added a new test case to check eval order.
    Task ID: #
    
    Blame Rev:
    
    Reviewers:
    mwilliams, qigao
    CC:
    hphp-diffs@lists
    Test Plan:
    make fast_tests
    load www sandbox and browse the site for sanity check
    micro benchmark:
    <?php
    $start = microtime(true);
    function foo() {
      global $a;
      $a = 1;
    }
    $a = 'a';
    $b = 'b';
    $c = 'c';
    $d = 'd';
    $e = 'e';
    for ($i = 0; $i < 2000000; $i++) {
      $r = ++$a . $a . 1 . 2 . foo() . $b . $c . $d . $e;
    }
    var_dump($r);
    $end = microtime(true);
    echo ($end - $start) . "\n";
    
    Before:
    4.5766091346741
    After
    2.6775891780853
    
    Revert Plan:
    
    Tags:
    
    Platform Impact (PUBLIC):
    
    Differential Revision: 332067
  5. @markw65 @scottmac

    Fix build dependencies

    markw65 authored scottmac committed
    Summary: If you built from a completely clean client, test_mysql_info.inc wasnt always built in time.
    
    Task ID: #
    
    Blame Rev:
    
    Reviewers: myang qigao
    
    CC: akushner
    
    Test Plan: git clean -fxd; make -Csrc -j1; git clean -fxd; make -Csrc -j
    
    Revert Plan:
    
    Tags:
    
    Platform Impact (PUBLIC):
    
    Differential Revision: 332007
  6. @scottmac

    [Perf/HPHPi] Optimize SimpleFunctionCallExpression

    myang authored scottmac committed
    Summary:
    I added BuiltinFunctionCallExpression, UserFunctionCallExpression, and
    OverrideFunctionCallExpression as specialized SimpleFunctionCallExpression
    AST node to reduce memory footprint and get faster eval.
    
    Test Plan:
    make fast_tests
    load www sandbox for sanity check
    server mode flib test under hphpi
    
    Reviewers: mwilliams, qigao
    
    Reviewed By: mwilliams
    
    CC: hphp-diffs@lists, ps, mwilliams
    
    Differential Revision: 331678
  7. @markw65 @scottmac

    Add format string checking for cg.printf etc

    markw65 authored scottmac committed
    Summary:
    gcc allows you to specify that a function has printf-like behavior, which will
    let us catch a lot of issues at compile time, rather than runtime.
    
    Fixed all the reported issues. Mostly pointless, but there were several cases
    of passing in extra args, and one where we omitted a needed argument.
    
    Test Plan: fast_tests
    
    Reviewers: myang, qigao
    
    Reviewed By: qigao
    
    CC: achao, ps, mwilliams, qigao
    
    Differential Revision: 331640
  8. @markw65 @scottmac

    [Fix] System generation was broken

    markw65 authored scottmac committed
    Summary: My previous change to reorganize the header files should have included
    updates to the system files, but I forgot. In addition, it broke the generated
    system files. This fixes both problems.
    
    Test Plan: fast_tests
    
    Reviewers: myang, qigao
    
    Reviewed By: myang
    
    CC: bill, cbueno, ps, mwilliams, amenghra, myang
    
    Differential Revision: 330863
  9. @markw65 @scottmac

    [Perf] Better type inference

    markw65 authored scottmac committed
    Summary: forceVariants was being called over-agressively.
    
    Test Plan: fast_tests slow_tests
    
    Reviewers: myang, qigao
    
    Reviewed By: myang
    
    CC: ps, mwilliams, myang
    
    Differential Revision: 330610
  10. @markw65 @scottmac

    [Fix] Misc redeclared class/interface issues

    markw65 authored scottmac committed
    Summary:
    Various issues:
     - calling GetClassMethods on a redeclared class or interface that didnt yet
       exist would crash due to infinite recursion.
     - redeclared interfaces were never marked as existing
     - class_exists and interface_exists would call __autoload if the
       class/interface was volatile, even if it already existed
     - class_exists would call __autoload even if an interface with the same name
       existed
     - interface_exists would call __autoload even if a class with the same name
       existed
     - get_class_methods incorrectly returned array() if the class didnt exist,
       rather than NULL
    
    Test Plan: fast_tests slow_tests flib/unit tests.
    
    Reviewers: qigao, myang
    
    Reviewed By: myang
    
    CC: ps, mwilliams, myang
    
    Differential Revision: 330609
    
    Task ID: 704847
  11. @scottmac

    [Fix] Checking existence before using the accessor

    qigao authored scottmac committed
    Summary:
    In some rare case, the key may get deleted when being converted, then
    using the accessor would case a segv.
    
    Test Plan:
    make fast_tests
    production testing
    
    Reviewers: myang
    
    Reviewed By: myang
    
    CC: ps, mwilliams, myang, qigao
    
    Differential Revision: 330125
    
    Task ID: 722616
  12. @scottmac

    [Perf/HPHPi] Reduce number of user function call lookup

    myang authored scottmac committed
    Summary:
    When calling a user function in HPHPi through SimpleFunctionCall,
    even though we know the name at compile time, we still do a lookup
    to find the function statement at runtime. If a function is called
    in a loop, the cost of doing lookup becomes more significant. I added
    a function table that can be used to reduce lookups. Each user
    function name is assigned a unique id (can be reused in case reparsing)
    that is used as the index into the function table which is a vector.
    Whenever a function declared, we also enter the FunctionStatement into
    the function table. In SimpleFunctionCall, we cache the id for the
    function being called and use it as a faster way to call the function
    if the function is already declared. To prevent a runaway id, I put
    a cap as a runtime option. After hitting the cap, no id will be assigned
    and those functions have to be called via normal name lookup.
    
    Test Plan:
    make fast_tests
    make slow_tests
    flib/unit test
    micro benchmark:
    <?php
    $start = microtime(true);
    function foo() { }
    for ($i = 0; $i < 10000000; $i++) foo();
    $end = microtime(true);
    echo $end - $start . "\n";
    Before:
    2.4777600765228
    After
    2.0086898803711
    
    Reviewers: mwilliams, qigao
    
    Reviewed By: mwilliams
    
    CC: hphp-diffs@lists, ps, mwilliams, myang
    
    Differential Revision: 330013
  13. @markw65 @scottmac

    [Fix] Non-ref assignment should not be passed by reference

    markw65 authored scottmac committed
    Summary: If foo takes its parameter by reference, in "foo($a = $b);" neither $a
    nor $b should be passed by reference. Instead a temporary with the value of $b
    should be passed.
    
    Test Plan: fast_tests slow_tests
    
    Reviewers: myang
    
    Reviewed By: myang
    
    CC: ps, mwilliams, myang
    
    Differential Revision: 329692
    
    Task ID: 714773
  14. @scottmac

    [HPHPi/Perf] Faster call to define

    myang authored scottmac committed
    Summary:
    HPHPi does not treat define as a valid builtin and instead of calling
    f_define, it provides EvalDefine that is not cached as other builtin
    functions. It seems that we can just let HPHPi call define which does
    the same thing EvalDefine does. I removed EvalDefine and verified that
    f_define is called via the faster path (i.e., the call info is cached
    in the SimpleFunctionCallExpression).
    
    Test Plan:
    make fast_tests
    make www and browse the site for sanity check
    micro benchmark:
    myang@dev1560] head d.php
    <?
    $start = microtime(true);
    define('V0', 0);
    define('V1', 1);
    define('V2', 2);
    define('V3', 3);
    define('V4', 4);
    define('V5', 5);
    define('V6', 6);
    define('V7', 7);
    [myang@dev1560] tail d.php
    define('V499993', 499993);
    define('V499994', 499994);
    define('V499995', 499995);
    define('V499996', 499996);
    define('V499997', 499997);
    define('V499998', 499998);
    define('V499999', 499999);
    $end = microtime(true);
    echo $end - $start;
    
    Before
    2.9894490242004
    After
    2.6607859134674
    The speed up is about 11%.
    
    Reviewers: mwilliams, qigao
    
    Reviewed By: mwilliams
    
    CC: hphp-diffs@lists, ps, mwilliams
    
    Differential Revision: 329676
  15. @markw65 @scottmac

    [Feature] Add support for %{key}C to access log format string

    markw65 authored scottmac committed
    Summary: As title.
    
    Test Plan:
    fast_tests TestServer
    
    Also verified expected logs for:
    
    % sudo hphpi -mserver -c sandbox.hdf
    -vLog.AccessLogDefaultFormat='::%{c_user}C:: ::%{notpresent}C::'
    
    Reviewers: qigao, myang
    
    Reviewed By: qigao
    
    CC: ps, mwilliams, qigao
    
    Differential Revision: 328579
    
    Task ID: 618949
  16. @swtaarrs @scottmac

    Fix TestCodeRunVM-SimpleXML

    swtaarrs authored scottmac committed
    Summary:
    SimpleXMLElementIterator holds a raw C++ pointer to its parent, a
    SimpleXMLElement. In expressions like this one:
    foreach ($el->children() as $child) { ... }
    all references to the SimpleXMLElement returned by children() will be
    dropped after the iterator is created and the object will be
    destroyed, leaving the iterator with a stale pointer. It looks like
    the iterator already had a smart pointer named m_temp that it stuck its
    parent in sometimes; this diff gets rid of m_temp and makes sure the
    parent is always in a smart pointer. reset_iterator was split into
    set_parent and reset_iterator to avoid unnecessary inc/decrefs in
    rewind.
    
    Test Plan: TestSimpleXML passes now.
    
    Reviewers: kma, andrewparoski, mwilliams
    
    Reviewed By: andrewparoski
    
    CC: ps, mwilliams, bsimmers, andrewparoski
    
    Differential Revision: 326479
    
    Task ID: 712299
  17. @scottmac

    [Fix] Fix crash in xbox

    myang authored scottmac committed
    Summary:
    When using xbox for unit test, there was a crash that caused by signal
    processing. If the handlers Array is already reset and a signal comes,
    in the signal handler we may put another ArrayData * into the Array, which
    will no longer be reset before the memory is rolled back. I made a change
    to block all signals for this thread so that memory can be safely rolled
    back.
    
    Test Plan:
    make fast_tests
    make slow_tests
    run the unit test using xbox that had the crash, no longer see the crash
    
    Reviewers: mwilliams, andrewparoski
    
    Reviewed By: mwilliams
    
    CC: hphp-diffs@lists, ps, mwilliams, andrewparoski, myang
    
    Differential Revision: 327279
  18. @markw65 @scottmac

    [Perf/cleanup/compile-time] Miscellaneous code reorg

    markw65 authored scottmac committed
    Summary:
    Various cleanups
     - switch from __gnu_cxx::hash* to std::tr1::unordered*. The former was 72
    bytes, and always allocated at least 53 buckets, while the latter is 48 bytes
    and starts with 2 buckets (when asked to start with zero). Since many of these
    maps ended up holding a single class, or a couple of functions this was
    extremely wasteful of memory. Perf measurements are indicating that its faster
    too.
     - change FunctionContainer to hold a StringToFunctionScopePtrMap, rather than
    *VecMap, since redeclared functions are rare (non-existent in classes, and
    extremely unusual in file-scope). Hold a separate StringToFunctionScopePtrVecMap
    (allocated on demand) to deal with the case of FileScope redeclared functions.
     - get rid of .fw.h headers. They are only ever included from one place (the
    corresponding .h) and are often empty. This reduces the number of generated
    files by about 40%.
     - remove various unneeded forward declarations, and move some virtual
    functions out of headers into the .cpp files.
    
    Test Plan: fast_tests slow_tests
    
    Reviewers: qigao, myang
    
    Reviewed By: myang
    
    CC: achao, ps, mwilliams, myang
    
    Differential Revision: 326872
  19. @scottmac

    [Perf/Size/HPHPi] Rework on AssignmentOpExpression optimization

    myang authored scottmac committed
    Summary:
    I reworked on the AssignmentOpExpression optimization by creating specialized
    AST nodes. This replaces about 74% of AssignmentOpExpression nodes into
    the smaller various AST nodes so it helps to save memory. For each case,
    we execute a simpler eval. This is essentially a trade off between more
    reduction in data size with small amount of replicated code.
    
    Test Plan:
    make fast_tests
    make slow_tests
    flib/unit test
    Noticed memory footprint down in unit test summary.
    
    Reviewers: mwilliams
    
    Reviewed By: mwilliams
    
    CC: hphp-diffs@lists, ps, mwilliams
    
    Differential Revision: 327088
  20. @markw65 @scottmac

    [Fix] Dont send two Content-Length headers

    markw65 authored scottmac committed
    Summary: Dont add a Content-Length header if there already is one.
    
    Test Plan: TestServer, verify that if we add a Content-Length header via php,
    we end dont add a second one.
    
    Reviewers: qigao, myang
    
    Reviewed By: qigao
    
    CC: macvicar, ps, mwilliams, qigao
    
    Differential Revision: 327123
    
    Task ID: 716475
  21. @paroski @scottmac

    Revert "Fix hphpc/hphpi to raise warnings for list assignment as appr…

    paroski authored scottmac committed
    …opriate"
    
    This reverts commit c9707b0d074370073c63d1ef8ecee6d49335965e.
  22. @scottmac

    [Fix] hphpd crash when throwing non-obj or obj without __toString()

    qigao authored scottmac committed
    Summary:
    Hphpd will hit an exception in the catch block when it handles the case
    where an non-object is thrown or an object without __toString method,
    causing the DebuggerProxy to disconnect. This diff fixes the problem by
    adding another catch.
    
    Test Plan:
    make fast_tests
    manually run the test in the task and run "throw null"
    
    Reviewers: mwilliams
    
    Reviewed By: mwilliams
    
    CC: ps, mwilliams
    
    Differential Revision: 326091
    
    Task ID: 709819
  23. @scottmac

    Add mysql_multi_query()

    scottmac authored
    Summary:
    Adds mysql_multi_query() and 3 other functions to complement iterating
    through the result sets. These are borrowed from the mysqli() extension.
    
    Test Plan:
    fast_tests
    slow_test
    
    <?php
    $link = mysql_connect('udb8453.snc1.facebook.com:3309', 'scott', '');
    mysql_select_db('test');
    if (mysql_multi_query("INSERT INTO example (data) VALUES ('a');INSERT INTO
    example (data) VALUES ('b');INSERT INTO example (data) VALUES ('c');SELECT *
    FROM example;")) {
      do {
        echo "result!\n";
        $result = mysql_fetch_result();
        if (!is_bool($result)) {
          while ($data = mysql_fetch_array($result)) {
            var_dump($data);
          }
        }
      } while (mysql_next_result());
    }
    mysql_close($link);
    
    Reviewers: mwilliams
    
    Reviewed By: mwilliams
    
    CC: ps, mwilliams, macvicar, dpeek
    
    Differential Revision: 323636
    
    Revert Plan: Ok
    
    Task ID: 698948
  24. @paroski @scottmac

    Fix TestYield to not access an inaccessible property

    paroski authored scottmac committed
    Summary:
    One of the tests in TestYield was accessing a protected property 'message'
    from the Exception class from a context that does not have access. hphpc and
    hphpi currently do not do accessibility checks for builtin classes, but we
    should still fix the test.
    
    This diff fixes the test to call getMessage() instead of accessing the
    'message' property directly.
    
    Test Plan:
    TestCodeRun TestYield
    TestCodeRunEval TestYield
    
    Reviewers: mwilliams, myang, qigao, kma
    
    Reviewed By: mwilliams
    
    CC: ps, mwilliams, andrewparoski
    
    Differential Revision: 325297
  25. @markw65 @scottmac

    [Fix] Dont include internal methods in reflection info

    markw65 authored scottmac committed
    Summary: Continuation methods were being included in the reflection info for a
    class, causing various issues, since a) they're not expected to be there, and b)
    they have illegal names
    
    Test Plan: fast_tests slow_tests (with new test case)
    
    Reviewers: myang, qigao
    
    Reviewed By: myang
    
    CC: ps, mwilliams, myang
    
    Differential Revision: 325296
    
    Task ID: 598096
  26. @markw65 @scottmac

    [Cleanup] Misc ClassScope fixups

    markw65 authored scottmac committed
    Summary:
    Reduce hphp's memory footprint by:
     - remove m_lowerCaseParent
     - re-order fields to reduce padding
    
    Various places looked up the class-scope for a parent or interface, just to get
    the originalName from that. Thats usually close enough, but isnt necessarily
    correct. Switch to using the parent or base as originally specified.
    
    Test Plan: fast_tests slow_tests
    
    Reviewers: myang, qigao
    
    Reviewed By: myang
    
    CC: ps, mwilliams, myang
    
    Differential Revision: 324829
  27. @scottmac

    [Fix/HPHPi] Fix bug when use $this in closure

    myang authored scottmac committed
    Summary:
    I was too aggressive when I removed the line that enters the current object
    into the assoc list as I thought it is already avaiable in the current env.
    This fails when $this appears in the use clause of a closure. Restored the
    line. New test added.
    
    Test Plan: make fast_tests
    
    Reviewers: mwilliams
    
    Reviewed By: mwilliams
    
    CC: hphp-diffs@lists, ps, mwilliams, myang
    
    Differential Revision: 324948
  28. @scottmac

    [Fix] Do not throw exception when writing to closed STDOUT

    myang authored scottmac committed
    Summary:
    PHP does not raise exception when writing to STDOUT after closing it. I made
    a change to follow that. New test added.
    
    Test Plan:
    make fast_tests
    make slow_tests
    
    Reviewers: mwilliams, qigao
    
    Reviewed By: mwilliams
    
    CC: hphp-diffs@lists, ps, mwilliams
    
    Differential Revision: 324798
    
    Task ID: 706751
  29. @markw65 @scottmac

    [Fix] Class hoisting was broken

    markw65 authored scottmac committed
    Summary: We keep a std::set of classes which are hoisted (and therefore dont
    need to be checked). The set was case sensitive, but a recent change meant that
    it was getting both lower case, and original case names in it. The result was
    that we ended up checking the existence of classes which we had already marked
    as existing, which was inefficient; and in some cases we checked the existence
    of classes before marking them as existing, which was wrong.
    
    Test Plan: fast_tests slow_tests
    
    Reviewers: myang, aravind
    
    Reviewed By: myang
    
    CC: ps, mwilliams, myang
    
    Differential Revision: 324758
  30. @markw65 @scottmac

    [Fix] Prevent crash in forceClassVariants

    markw65 authored scottmac committed
    Summary: Depending on the order of iteration, forceClassVariants could end up
    calling forceVariants on a class without aquiring the lock, resulting in an
    assert from the DEBUG build.
    
    Test Plan: fast_tests slow_tests against a DEBUG build.
    
    Reviewers: aravind
    
    Reviewed By: aravind
    
    CC: mwilliams, aravind
    
    Differential Revision: 324406
  31. @scottmac

    [Fix] Fix build failure

    myang authored scottmac committed
    Summary:
    My previous commit caused compiler build failure because g++ optimized away
    a public method EvalClassState::semanticCheck() which has 'inline' in its
    definition. I removed the 'inline' keyword. I must have only compiled under
    DEBUG mode.
    
    Test Plan: build hphp successfully
    
    Reviewers: mwilliams, oyamauchi, aravind
    
    Reviewed By: aravind
    
    CC: hphp-diffs@lists, ps, mwilliams, aravind
    
    Differential Revision: 324207
  32. @scottmac

    [Fix/HPHPi] hphpi doesn't check final on overridden static methods

    myang authored scottmac committed
    Summary:
    <?php
    
    class A {
      final public static function f() {}
    }
    
    class B extends A {
      public static function f() {}
    }
    
    B::f();
    
    This should fatal, but B's implementation of f() ends up getting called.
    
    The class statement semantic check should load the method table of all the
    parents first. Instead, it depends upon the callers to do that. Fixed by
    always loading the method table in semantic check. Also made a small adjustment
    on the line number when reporting the error.
    
    Test Plan:
    make fast_tests
    For the above test case:
    HipHop Fatal error: Cannot override final method A::f() in
    /var/users/myang/hphp/src/tmp/b1.php on line 8
    
    Reviewers: mwilliams, oyamauchi
    
    Reviewed By: oyamauchi
    
    CC: hphp-diffs@lists, ps, mwilliams, oyamauchi, myang
    
    Differential Revision: 313884
    
    Task ID: 689358
  33. @markw65 @scottmac

    [Nemo] Dont report UseVoidReturn errors for possibly-overridden methods

    markw65 authored scottmac committed
    Summary: When WholeProgram is false, any non-private method could be overridden
    by an unseen class. So dont report UseVoidReturn errors.
    
    Test Plan: fast_tests slow_tests. Manually verify a test case which incorrectly
    reported UseVoidReturn with default settings.
    
    Reviewers: myang, qigao
    
    Reviewed By: myang
    
    CC: ps, mwilliams, myang, michalburger1
    
    Differential Revision: 323294
  34. @paroski @scottmac

    [Fix] DOMNodeIterator must incRef/decRef the DOM node collection

    paroski authored scottmac committed
    Summary:
    DOMNodeIterator is a wrapper class used to facilitate iteration over DOM
    node collections (DOMNodeList or DOMNamedNodeMap). DOMNodeIterator holds a
    pointer to the DOM node collection that it is iterating over. The problem
    is that the last reference to the DOM node collection can go away while the
    DOMNodeIterator is still live, potentially resulting in a use-after-free
    which can cause crashes or other bad behavior.
    
    This diff fixes the issue by changing DOMNodeIterator so that it incRefs
    and decRefs the DOM node collection to ensure that the collection stays
    live.
    
    This diff also fixes a bug where the rewind method wasn't being called when
    foreaching over an object that implements IteratorAggregate.
    
    Blame Rev:
    
    Reviewers: myang, mwilliams, kma, oyamauchi, aravind
    
    CC:
    
    Test Plan:
    fast_tests
    slow_tests
    Run www in prod
    
    Revert Plan:
    
    Differential Revision: 322308
  35. @scottmac

    Fix infinite recursion in TestCodeError::TestInvalidDerivation()

    aravind authored scottmac committed
    Summary:
    We were using a case-sensitive hash set to store the set of seen base
    classes in ClassScope::checkDerivation(). This was causing infiinte
    recursion in test cases for invalid derivation such as the following:
    
    class A extends class A {}
    
    This was because the class name was lower case, whereas the parent name
    was upper case. Fixed by using a case-insensitive hash map.
    
    Test Plan: make fast_tests
    
    Reviewers: mwilliams, myang
    
    Reviewed By: myang
    
    CC: ps, mwilliams, myang
    
    Differential Revision: 322826
    
    Revert Plan: OK
Something went wrong with that request. Please try again.