#include <fstream.hfa>
#include <stdlib.hfa>
forall( T ) { // distribution
struct Stack { T * stack; int tp; }; // fixed array implementation
void ?{}( Stack(T) & s, int sz ) with(s) { stack = alloc( sz ); tp = 0; }
void ^?{}( Stack(T) & s ) with(s) { free( stack ); }
T top( Stack(T) & s ) with(s) { return stack[tp]; }
void push( Stack(T) & s, T val ) with(s) { stack[ tp++ ] = val; }
T pop( Stack(T) & s ) with(s) { return stack[ --tp ]; }
}
int main() {
Stack(int) s = { 10 }; // max depth
for ( i; 3 ) push( s, i );
for ( i; 3 ) sout | pop( s );
}