Changeset 11389


Ignore:
Timestamp:
Nov 18, 2008, 7:05:20 PM (11 years ago)
Author:
rme
Message:

%STACK-BLOCK takes a size in bytes, not words.

This error was causing varargs send functions to trash the C stack.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/objc-bridge/objc-runtime.lisp

    r11358 r11389  
    18491849         (static-arg-words 2)           ;receiver, selptr
    18501850         (marg-words (gensym))
     1851         (marg-size (gensym))
    18511852         (selptr (gensym)))
    18521853    (collect ((static-arg-forms))
     
    18991900          (declare (dynamic-extent ,rest-arg))
    19001901          (let* ((,selptr (%get-selector ,selector))
    1901                  (,marg-words ,static-arg-words))
     1902                 (,marg-words ,static-arg-words)
     1903                 (,marg-size nil))
    19021904            (dolist (,arg-temp ,rest-arg)
    19031905              (if (or (typep ,arg-temp 'double-float)
     
    19081910                (incf ,marg-words 2)
    19091911                (incf ,marg-words 1)))
    1910             (%stack-block ((,marg-ptr ,marg-words))
     1912            (setq ,marg-size (ash ,marg-words 2))
     1913            (%stack-block ((,marg-ptr ,marg-size))
    19111914              (progn ,@(static-arg-forms))
    19121915              (%process-varargs-list ,marg-ptr ,static-arg-words ,rest-arg)
    19131916              (external-call "_objc_msgSendv"
    1914                              :address ,receiver
    1915                              :address ,selptr
    1916                              :size_t (* 4 ,marg-words)
     1917                             :id ,receiver
     1918                             :<SEL> ,selptr
     1919                             :size_t ,marg-size
    19171920                             :address ,marg-ptr
    19181921                             ,return-type-spec))))))))
Note: See TracChangeset for help on using the changeset viewer.