• Chris Toshok's avatar
    use inline functions instead of casting function pointers · d69886d2
    Chris Toshok authored
    the type casts we were using were causing bad things to happen with gcc builds (still not exactly sure
    why they aren't in clang builds), since we were casting from a function which expects arguments on the stack
    to a function type that doesn't.
    
    this manifests itself as rewrite_args changing from NULL to a small heap pointer on this line:
    
    ```
    objmodel.cpp:4108    contained = callattrInternal1(rhs, contains_str, CLASS_ONLY, NULL, ArgPassSpec(1), lhs);
    ```
    
    that is, the local variable rewrite_args is NULL before the call, and non-NULL after.  The actual line that causes
    the pointer overwrite is in `bindObjIntoArgs`:
    
    ```
    objmodel.cpp:3043    arg1 = bind_obj;
    ```
    
    so I'm guessing that since we didn't push things onto the stack before the call to `callattrInternal`, we end up
    trampling over values in `compareInternal`'s frame.
    d69886d2
objmodel.cpp 197 KB