Example #1
0
/*
** over
*/
void over( void )
{
	if(ds_len() < 2){
		error_msg(5);
		clean_stack();
		return;
	}
	ds_p++;
	*ds_p = *(ds_p-2);
	return;
}
Example #2
0
/*
** push
*/
void push( STACK_TYPE value )
{ 
	if(ds_len() >= STACK_SIZE){
		error_msg(1);
		clean_stack();
		return;
	}
	ds_p++;
	*ds_p = value;
	return;
} 
Example #3
0
/*
** negate 
*/
void negate( void )
{
	if(ds_len() < 1){
		error_msg(2);
		clean_stack();
		return ;
	}
	
	*ds_p = 0 - *ds_p;
	return;
}
Example #4
0
/*
** pop
*/
void pop( void )
{
	if(ds_len() < 1){
		error_msg(2);
		clean_stack();
		return ;
	} 
	printf("%d\n",*ds_p);
	ds_p--; 
	return;
} 
Example #5
0
/*
** mul
*/
void mul( void )
{
	if(ds_len() < 2) {
		error_msg(5);
		clean_stack();
		return;
	} 
	*(ds_p-1) *= *ds_p; 
	ds_p--;
	return;
} 
Example #6
0
/*
** dup
*/
void dup( void )
{
	if(ds_len() < 1) {
		error_msg(2);
		clean_stack();
		return;
	} 
	ds_p++; 
	*ds_p = *(ds_p-1); 
	return;
} 
Example #7
0
/*
** bool1 
*/
void bool1( void )
{
	if(ds_len() < 1){
		error_msg(2);
		clean_stack();
		return ;
	}
	
	if(*ds_p != 0)
		*ds_p = 1; 
	return;
}
Example #8
0
/*
** swap
*/
void swap( void )
{
	if(ds_len() < 2) {
		error_msg(5);
		clean_stack();
		return;
	} 
	STACK_TYPE tmp; 
	tmp = *ds_p;
	*ds_p = *(ds_p-1);
	*(ds_p-1) = tmp;
	return;
} 
Example #9
0
/*
** rot
*/
void rot( void )
{
	STACK_TYPE tmp;
	if(ds_len() <3){
		error_msg(6);
		clean_stack();
		return;
	}
	tmp = *(ds_p-2);
	*(ds_p-2) = *(ds_p-1);
	*(ds_p-1) = *ds_p;
	*ds_p = tmp;
	return;
}
Example #10
0
/*
** interpret_words 
*/
int interpret_words( char *s )
{
	int i;
	int status = INTERPRETER;

	switch( what_is(s) ) {

	case 2:
	case 4:
		push( atoi(s) );
		break;
		
	case 5:
		status = COMPILER;
		break;
	
	case 6:
		status = COMMENT;
		break;
	
	case 0:
	case 3: 	
		for (i = 0; i <= CODEWORDS_NUM; i++) {
			if( i == CODEWORDS_NUM ) {
				printf("Undefine word!\n-->%s<--\n", s);
				clean_stack();
				break;
			}
			else if( !strcmp(word_str[i], s) ) {
				word_pointer[i]();
				break;
			}
		}
		break;
	}
				
	return status;
}
Example #11
0
 // Push an exception in the canonical position for handlers (stack(0)).
 void push_ex_oop(Node* ex_oop) {
   ensure_stack(1);  // ensure room to push the exception
   set_stack(0, ex_oop);
   set_sp(1);
   clean_stack(1);
 }