stack.ops - Stack Ops
Operations that manipulate Parrot's register,
user and integer stacks.
These operations affect entire sets of registers.
- popi()
- popn()
- popp()
- pops()
- Restore all the registers of the type indicated in the name of the operation from the most recently pushed register frames.
- A register frame holds only 16 registers,
so we pop two frames from the frame stack.
We use the first frame to restore registers 16-31,
and the second frame to restore registers 0-15.
By restoring in this order,
we ensure that a
push
followed by a pop
returns the working set of registers to their original state.
- popbottomi()
- popbottomn()
- popbottomp()
- popbottoms()
- Restore registers 0-15 of the type indicated in the name of the operation from a register frame popped off the corresponding frame stack.
- poptopi()
- poptopn()
- poptopp()
- poptops()
- Restore registers 16-31 of the type indicated in the name of the operation from a register frame popped off the corresponding frame stack.
- pushi()
- pushn()
- pushp()
- pushs()
- Save all the registers of the type indicated in the name of the operation on the appropriate register frame stack.
- A register frame holds only 16 registers,
so we push two frames onto the stack.
The first frame holds the values from registers 0-15; the second frame holds the values from registers 16-31.
- pushtopi()
- pushtopn()
- pushtopp()
- pushtops()
- Save registers 16-31 of the type indicated in the name of the operation on the appropriate register frame stack.
- pushbottomi()
- pushbottomn()
- pushbottomp()
- pushbottoms()
- Save registers 0-15 of the type indicated in the name of the operation on the appropriate register frame stack.
- saveall()
- Save all of the registers onto the appropriate frame stacks.
This op is equivalent to:
pushi
pushn
pushs
pushp
- (or some other permutation of these ops).
- restoreall()
- Restore all the registers from the appropriate frame stacks. This op is equivalent to:
popi
popn
pops
popp
- (or some other permutation of these ops).
- savetop()
- Save registers 16-31 of all the register sets on the appropriate frame stacks. This op is equivalent to:
pushtopi
pushtopn
pushtops
pushtopp
- (or some other permutation of these ops).
- restoretop()
- Restore registers 16-31 of all the register sets from the appropriate frame stacks. This op is equivalent to:
poptopi
poptopn
poptops
poptopp
- (or some other permutation of these ops).
These operations affect individual registers.
- entrytype(out INT, in INT)
- Gets the type of entry $2 of the user stack and puts it in $1.
- depth(out INT)
- Puts the depth of the user stack in $1.
- lookback(out INT, in INT)
- lookback(out STR, in INT)
- lookback(out NUM, in INT)
- lookback(out PMC, in INT)
- Finds the entry in the user stack at offset $2 from the top and put it in register $1. Positive numbers count down from the top of the stack, negative numbers count up from the bottom. (0 is the topmost entry, -1 is the bottom-most)
- save(in INT)
- save(in NUM)
- save(in STR)
- save(in PMC)
- Save register or constant $1 onto the user stack.
- savec(in STR)
- savec(in PMC)
- Save a clone of register or constant $1 onto the user stack.
- restore(out INT)
- restore(out NUM)
- restore(out PMC)
- restore(out STR)
- Restore register $1 from the user stack.
- rotate_up(in INT)
- Rotate the top $1 entries in the user stack by one. If $1 is positive, then the stack rotates upwards: the ($1)th entry becomes the ($1-1)th entry and so on, all the way up to the top of the stack, while the entry formerly at the top of the stack becomes the new ($1)th entry. If $1 is negative, the stack rotates downwards: the top entry becomes the second entry, the second becomes the third etc., while the former ($1)th entry becomes the new top entry.
- intsave(in INT)
- Save register or constant $1 onto the high-speed int stack.
- intrestore(out INT)
- Restore register $1 from the high-speed int stack.
- intdepth(out INT)
- Puts the depth of the high-speed int stack in $1.
Copyright (C) 2001-2004 The Perl Foundation. All rights reserved.
This program is free software. It is subject to the same license as the Parrot interpreter itself.