From: E S Date: 2005-01-12T04:05:52+09:00 Subject: Re: Variable Arguments > L�hett�j�: "Mystifier" > Aihe: Re: Variable Arguments > > I am asking VM level. I am currently writing a stack based VM for Ruby > from scratch. It is going to run ruby after compiling it to byte codes. > > In the process, I have to think about the bytecodes, the calling > convention etc. A very basic toy could be ready early. I am also looking > out for better performance and am willing to drop / alter ruby > specifications, though my approach is to find a way without opting for > the change. > > Currently, I am writing an Interpreter while the specifications are > fluid. Once it is stabilized, I shall move over to jit compiler. > > Arity did give me a possible way to resolve my issue. Thanks. Glad that you found a way. It being a somewhat interesting topic, though, I'm interested in the issue at the VM level. From what I understand, you'll compile the Ruby code >> def foo(x, y, *z) >> end >> foo.bar(5, 4, 5, 6) to bytecode, i.e. method-call :foo [5, 4, 5, 6] # Or whatever Which is then expanded to a new stack frame with the passed-in variables at the ready. I'm guessing your problem is how to assign the parameters to variables? For this, the pseudo-bytecode sequence would change to something like: method-call :foo :foo-call [5,4,5,6] c-param-check :foo :foo-call # Expected params c-assign-param :foo-call :x [5] c-assign-param :foo-call :y [4] c-assign-array :foo-call :z [5,6] call :foo-call :foo This of course if you don't just want to delegate the whole process to the stack builder. > Regards, > Mystifier E