I was experimenting with the following: Martin Rubey <[EMAIL PROTECTED]> writes:
> By the way, there seems to be another, extremely simple optimization to do in > SPADCALL: > > (defmacro SPADCALL (&rest L) > (let ((args (butlast l)) > (fn (car (last l))) > (gi (gensym))) > ;; (values t) indicates a single return value > `(let ((,gi ,fn)) (the (values t) (funcall (car ,gi) ,@args (cdr > ,gi)))))) > > Currently, the optimizer has no way to know that (car ,gi) actually is a > function. I guess, one could have > > `(let ((,gi ,fn)) (the (values t) > (funcall (the function (car ,gi)) ,@args (cdr ,gi))))) > > instead. After a few more or less trivial changes in the boot code (replacing "makeSpadCall" with "function makeSpadConstant", same thing for newGoGet), everything compiles just fine. However, there is another situation, where SPADCALL does not get a function in the car, namely in functions defined in the interpreter. I would need to add a "symbol-function" at the right place, but I have no idea where. Anybody knows the right place for that? I.e., where are interpreter defined functions "created"? Martin ------------------------------------------------------------------------- Check out the new SourceForge.net Marketplace. It's the best place to buy or sell services for just about anything Open Source. http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace _______________________________________________ open-axiom-devel mailing list open-axiom-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/open-axiom-devel