26.12.2012 Views

ATL: Atlas Transformation Language Specification of the ... - Eclipse

ATL: Atlas Transformation Language Specification of the ... - Eclipse

ATL: Atlas Transformation Language Specification of the ... - Eclipse

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

No change.<br />

Description<br />

<strong>Specification</strong> <strong>of</strong> <strong>the</strong> <strong>ATL</strong> Virtual Machine<br />

The <strong>of</strong>fset operand must be <strong>of</strong> type int. Execution proceeds at <strong>the</strong> <strong>of</strong>fset from <strong>the</strong> address <strong>of</strong> <strong>the</strong><br />

opcode <strong>of</strong> this goto instruction. The target address must be that <strong>of</strong> an opcode <strong>of</strong> an instruction<br />

within <strong>the</strong> operation that contains this goto instruction.<br />

4.3.3 The iterate instruction<br />

Operation<br />

Delimitate <strong>the</strong> beginning <strong>of</strong> iteration on collection elements.<br />

Format<br />

Operand Stack<br />

Description<br />

Iterate<br />

…, collection ⇒ …<br />

collection is popped from <strong>the</strong> operand stack. Execution proceeds from <strong>the</strong> opcode following this<br />

iterate instruction to its corresponding enditerate opcode (iterate instructions can be nested) for<br />

each element <strong>of</strong> <strong>the</strong> popped collection. Before each loop entry, <strong>the</strong> next element <strong>of</strong> <strong>the</strong> popped<br />

collection is pushed onto <strong>the</strong> operand stack. After <strong>the</strong> last loop, execution proceeds from <strong>the</strong> opcode<br />

following <strong>the</strong> enditerate instruction associated with this iterate instruction. Within an operation,<br />

each iterate instruction has to be associated with an enditerate instruction.<br />

4.3.4 The enditerate instruction<br />

Operation<br />

Delimitate <strong>the</strong> end <strong>of</strong> iteration on collection elements.<br />

Format<br />

Operand Stack<br />

No change.<br />

Description<br />

enditerate<br />

Delimitate <strong>the</strong> end <strong>of</strong> an iteration previously opened by an iterate instruction. No action is<br />

associated with an enditerate instruction. Within a given operation, <strong>the</strong> number <strong>of</strong> enditerate<br />

instructions must be equal to <strong>the</strong> number <strong>of</strong> iterate instructions. An enditerate instruction may be<br />

specified only if a non-delimited iterate instruction has been previously declared in <strong>the</strong> same<br />

operation.<br />

4.3.5 The call instruction<br />

Operation<br />

Call a method.<br />

Format<br />

Operand Stack<br />

value<br />

call<br />

signature<br />

…, context, [arg1, [arg2 ...]] ⇒ … when called operation has no return<br />

Page 30 / 62

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!