Esempio n. 1
0
//DEF074278: Java VM requires more command line testArguments.
void Defect_DEF074278_Part2()
	{
   	TBuf<180> testArguments(_L("one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty twenty-one twenty-two twenty-three twenty-four "));
	TBuf<210> inputArguments;

	TUint testArgNo = 25;

	int argc=0;
	char** argv=0;
	char** envp=0;

	TheTest.Printf(_L("Retrieving the arguments passed in from T_UCRT0P1\n"));
	__crt0(argc,argv,envp);			// get args & environment from somewhere

	//Get all the arguments into a descriptor, beginning at pos 1, as pos 0 contains
	//the T_UCRT0P2 exe path and name.
	for (TInt i=1; i < argc; i++)
		{
		char *str=argv[i];
		while(*str)
			inputArguments.Append((TChar)*str++);
		inputArguments.Append(' ');
		}

	//tests all the arguments were passed to the new process correctly.
	TheTest.Printf(_L("Checking all arguements were passed to the new process correctly... "));
	TEST(testArguments == inputArguments );
	TEST2(testArgNo, argc);

	exit(0);
	}
Esempio n. 2
0
int main(int argc, char **argv) {
	char buffer[1024];
	int decpt, sign;
	char *rve;

	pspDebugScreenInit();
	pspDebugScreenPrintf("%d", 0);

	checkSetLessThan();
	checkLeftShift();
	checkRightShift();
	
/*
dtoa(double d, int mode, int ndigits, int *decpt, int *sign, char **rve);
*/
	
	emitString((char *)_itoa(12345678, buffer, 10));
	emitLong(0x0123456789ABCDEFL);
	emitLong(testArguments(0x100, 0x1234567800000000L, 9.0f));
	test();
	checkFloat24(1.0f);
	emitFloat(2.0f / GlobalFloat);
	//emitString(dtoa(1234.567, 0, 10, &decpt, &sign, &rve));

	return 0;
}
Esempio n. 3
0
void verify(struct a_NODE * node_p)
{
	struct a_NODE * aux;
	if(node_p)
	{
	struct a_NODE node_ = *node_p;

	switch(node_.token)
	{
		// TOKENS
		case LIT_TRUE:

			break;
		case LIT_FALSE:

			break;
		case LIT_INTEGER:

			break;
		case TK_IDENTIFIER:
			break;
		case LIT_CHAR:

			break;
		case LIT_STRING:

			break;
		// LIST
		case LIST:
			verify((node_.sons[0]));
			verify((node_.sons[1]));
			break;
		// TYPE
		case KW_BOOL:
			break;
		case KW_WORD:
			break;
		case KW_BYTE:
			break;
		// FUNC_DECLARATION
		case ARGUMENTS:
			verify((node_.sons[0]));
			verify((node_.sons[1]));
			if((node_.sons[2])!=NULL)
			{
				verify((node_.sons[2]));
			}
			break;
		case D_NODE: // GAMBIARRATION
			verify((node_.sons[0]));
			verify((node_.sons[1]));
			break;
		case FUNC_DECLARATION:
			/*node_.sons[1]->node->type = ID_FUNC;
			if(node_.sons[0]->token == KW_BOOL)
				node_.sons[1]->node->dataType = ID_BOOL;
			else if(node_.sons[0]->token == KW_WORD)
				node_.sons[1]->node->dataType = ID_WORD;
			else if(node_.sons[0]->token == KW_BYTE)
				node_.sons[1]->node->dataType = ID_BYTE;

			currentFunction = node_.sons[1]->node;

			aux = node_.sons[2];
			for(aux = node_.sons[2] ; aux != NULL ; aux = aux->sons[2])
			{
				aux->sons[1]->node->type = ID_SCALAR;
				if(aux->sons[0]->token == KW_BOOL)
				{
					aux->sons[1]->node->dataType = ID_BOOL;
				}
				else if(aux->sons[0]->token == KW_WORD)
				{
					aux->sons[1]->node->dataType = ID_WORD;
				}
				else if(aux->sons[0]->token == KW_BYTE)
				{
					aux->sons[1]->node->dataType = ID_BYTE;
				}

				node_.sons[1]->node->args = insertInIntList(aux->sons[0]->token,node_.sons[1]->node->args);
			}
			*/
			currentFunction = node_.sons[1]->node;
			verify((node_.sons[3])); // SEMPRE D_NODE , GAMBIARRATIONN

			break;
		// DECLARATIONS
		case PROG:
			verify((node_.sons[0]));
			verify((node_.sons[1]));
			break;
		case DECLARATION:
			if(node_.sons[1]->node->type != SYMBOL_IDENTIFIER)
				{hasError++;printf("Semantic error on line %d: variable %s already declared \n",node_.lineNumber,node_.sons[1]->node->value);}
			else
			{
				if(node_.sons[0]->token == KW_BOOL)
					node_.sons[1]->node->dataType = ID_BOOL;
				else if(node_.sons[0]->token == KW_WORD)
					node_.sons[1]->node->dataType = ID_WORD;
				else if(node_.sons[0]->token == KW_BYTE)
					node_.sons[1]->node->dataType = ID_BYTE;
				node_.sons[1]->node->type = ID_SCALAR;
				if(!(
					(node_.sons[0]->token == KW_BOOL && (node_.sons[2]->token == LIT_TRUE || node_.sons[2]->token == LIT_FALSE)) ||
					(((node_.sons[0]->token == KW_WORD) || (node_.sons[0]->token == KW_BYTE)) && ((node_.sons[2]->token == LIT_INTEGER)||(node_.sons[2]->token == LIT_CHAR)))))
					{hasError++;printf("Semantic error on line %d: Scalar initialized wrong.\n",node_.lineNumber);}
			}

			break;
		case DECLARATION_POINTER:
			if(node_.sons[1]->node->type != SYMBOL_IDENTIFIER)
				{hasError++;printf("Semantic error on line %d: variable already declared\n",node_.lineNumber);}
			else
			{
				if(node_.sons[0]->token == KW_BOOL)
					node_.sons[1]->node->dataType = ID_BOOL;
				else if(node_.sons[0]->token == KW_WORD)
					node_.sons[1]->node->dataType = ID_WORD;
				else if(node_.sons[0]->token == KW_BYTE)
					node_.sons[1]->node->dataType = ID_BYTE;
				node_.sons[1]->node->type = ID_POINTER;
			}
			break;
		case DECLARATION_VEC:
			if(node_.sons[1]->node->type != SYMBOL_IDENTIFIER)
				{hasError++;printf("Semantic error on line %d: variable already declared\n",node_.lineNumber);}
			else
			{
				if(node_.sons[0]->token == KW_BOOL)
					node_.sons[1]->node->dataType = ID_BOOL;
				else if(node_.sons[0]->token == KW_WORD)
					node_.sons[1]->node->dataType = ID_WORD;
				else if(node_.sons[0]->token == KW_BYTE)
					node_.sons[1]->node->dataType = ID_BYTE;
				node_.sons[1]->node->type = ID_VECTOR;

				if(!isInt(node_.sons[2]))
					{hasError++;printf("Semantic error on line %d: Vector with not-integer size\n",node_.lineNumber);}
			}
			break;
		case DECLARATION_VEC_INIT:
			if(node_.sons[1]->node->type != SYMBOL_IDENTIFIER)
				{hasError++;printf("Semantic error on line %d: variable already declared\n",node_.lineNumber);}
			else
			{
				if(node_.sons[0]->token == KW_BOOL)
					node_.sons[1]->node->dataType = ID_BOOL;
				else if(node_.sons[0]->token == KW_WORD)
					node_.sons[1]->node->dataType = ID_WORD;
				else if(node_.sons[0]->token == KW_BYTE)
					node_.sons[1]->node->dataType = ID_BYTE;
				node_.sons[1]->node->type = ID_VECTOR;

				if(!isInt(node_.sons[2]))
					{hasError++;printf("Semantic error on line %d: Vector with not-integer size\n",node_.lineNumber);}
				if(!(node_.sons[3]->token == LIST))
					{hasError++;printf("Semantic error on line %d: Vector initialized wrong.\n",node_.lineNumber);}
			}
			break;

		// EXPRESSION
		case '&':
			if(!(node_.sons[0]->node->type==ID_SCALAR))
				{hasError++;printf("Semantic error: getting reference for not-scalar on line %d\n",node_.lineNumber);}
			verify(node_.sons[0]);
			break;
		case POINTER:
			if(!(node_.sons[0]->node->type==ID_POINTER))
				{hasError++;printf("Semantic error: using not-pointer as pointer on line %d\n",node_.lineNumber);}
			verify(node_.sons[0]);
			break;
		case '*':
			if(!(isInt(node_.sons[0]) && isInt(node_.sons[1])))
				{hasError++;printf("Semantic error: multiplying not integer on line %d\n",node_.lineNumber);}
			verify(node_.sons[0]);
			verify(node_.sons[1]);
			break;
		case '(':
			verify((node_.sons[0]));
			break;
		case '+':
			if(!(isInt(node_.sons[0]) && isInt(node_.sons[1])))
				{hasError++;printf("Semantic error: adding not integer on line %d\n",node_.lineNumber);}
			verify(node_.sons[0]);
			verify(node_.sons[1]);
			break;
		case '-':
			if(!(isInt(node_.sons[0]) && isInt(node_.sons[1])))
				{hasError++;printf("Semantic error: subtracting not integer on line %d\n",node_.lineNumber);}
			verify(node_.sons[0]);
			verify(node_.sons[1]);
			break;
		case '/':
			if(!(isInt(node_.sons[0]) && isInt(node_.sons[1])))
				{hasError++;printf("Semantic error: dividing not integer on line %d\n",node_.lineNumber);}
			verify(node_.sons[0]);
			verify(node_.sons[1]);
			break;
		case OR:
			if(!(isBoolean(node_.sons[0]) && isBoolean(node_.sons[1])))
				{hasError++;printf("Semantic error: '||' with not boolean on line %d\n",node_.lineNumber);}
			verify(node_.sons[0]);
			verify(node_.sons[1]);
			break;
		case AND:
			if(!(isBoolean(node_.sons[0]) && isBoolean(node_.sons[1])))
				{hasError++;printf("Semantic error: '&&' with not boolean on line %d\n",node_.lineNumber);}
			verify(node_.sons[0]);
			verify(node_.sons[1]);
			break;
		case LE:
			verify(node_.sons[0]);
			verify(node_.sons[1]);
			break;
		case EQ:
			verify(node_.sons[0]);
			verify(node_.sons[1]);
			break;
		case GE:
			verify(node_.sons[0]);
			verify(node_.sons[1]);
			break;
		case NE:
			verify(node_.sons[0]);
			verify(node_.sons[1]);
			break;
		case '>':
			if(!(isInt(node_.sons[0]) && isInt(node_.sons[1])))
				{hasError++;printf("Semantic error: '>' with not integer on line %d\n",node_.lineNumber);}
			verify(node_.sons[0]);
			verify(node_.sons[1]);
			break;
		case '<':
			if(!(isInt(node_.sons[0]) && isInt(node_.sons[1])))
				{hasError++;printf("Semantic error: '<' with not integer on line %d\n",node_.lineNumber);}
			verify(node_.sons[0]);
			verify(node_.sons[1]);
			break;
		case VECCALL:
			if(node_.sons[0]->node->type == SYMBOL_IDENTIFIER)
				{hasError++;printf("Semantic error: Vector %s not declared used on line %d\n",node_.sons[0]->node->value,node_.lineNumber);}
			if(!isInt(node_.sons[1]))
				{hasError++;printf("Semantic error: Vector index not integer on line %d\n",node_.lineNumber);}
			if(!(node_.sons[0]->node->type==ID_VECTOR))
				{hasError++;printf("Semantic error: Something not-vector used as vector on line %d\n",node_.lineNumber);}
			break;
		case NORMAL:
			if(node_.sons[0]->node->type == SYMBOL_IDENTIFIER)
				{hasError++;printf("Semantic error: Variable %s not declared used on line %d\n",node_.sons[0]->node->value,node_.lineNumber);}
			if(node_.sons[0]->node->type != ID_SCALAR && node_.sons[0]->node->type != ID_POINTER)
				{hasError++;printf("Semantic error: Something not-scalar used as scalar on line %d\n",node_.lineNumber);}
			break;
		// FUNCALL ARGCALL CMD_SEQ
		case FUNCALL:
			if(node_.sons[0]->node->type == SYMBOL_IDENTIFIER)
				{hasError++;printf("Semantic error: Function %s not yet declared used on line %d\n",node_.sons[0]->node->value,node_.lineNumber);}
			if(!(node_.sons[0]->node->type==ID_FUNC))
				{hasError++;printf("Semantic error: Something not-function used as function on line %d\n",node_.lineNumber);}
			testArguments(node_.sons[0]->node,node_.sons[1]);
			break;
		case ARGCALL:
			break;
		case CMD_SEQ:
			verify((node_.sons[0]));
			verify((node_.sons[1]));
			break;
		// OUTPUT
		case OUTPUT_L:
			verify(node_.sons[0]);
			verify(node_.sons[1]);
			break;
		// CMD
		case INPUT:
			verify(node_.sons[0]);
			break;
		case OUTPUT:
			verify(node_.sons[0]);
			break;
		case RETURN:
			if(!currentFunction)
				{hasError++;printf("Semantic error: 'return' in wrong place on line %d\n",node_.lineNumber);}
			else if(currentFunction->dataType == ID_WORD)
			{
				if(!isInt(node_.sons[0]))
					{hasError++;printf("Semantic error: wrong return type for function %s, on line %d\n",currentFunction->value,node_.lineNumber);}
			}
			else if(currentFunction->dataType == ID_BYTE)
			{
				if(!isInt(node_.sons[0]))
					{hasError++;printf("Semantic error: wrong return type for function %s, on line %d\n",currentFunction->value,node_.lineNumber);}
			}
			else if(currentFunction->dataType == ID_BOOL)
			{
				if(!isBoolean(node_.sons[0]))
					{hasError++;printf("Semantic error: wrong return type for function %s, should be boolean, on line %d\n",currentFunction->value,node_.lineNumber);}
			}
			break;
		case BLOCK:
			verify((node_.sons[0]));
			break;
		case '=':
			verify(node_.sons[1]); ////////////////////////////////////////////////////////////////////// REMEMBER
			if(node_.sons[0]->token == VECCALL)
			{
				if(!(node_.sons[0]->sons[0]->node->type == ID_VECTOR))
					{hasError++;printf("Semantic error: not-vector used as vector on line %d\n",node_.lineNumber);}

				if(!isInt(node_.sons[0]->sons[1]))
					{hasError++;printf("Semantic error: vector index is not integer on line %d\n",node_.lineNumber);}

				if(node_.sons[0]->sons[0]->node->dataType == ID_WORD)
				{
					if(!isInt(node_.sons[1]))
						{hasError++;printf("Semantic error: atributing to integer vector from not-integer on line %d\n",node_.lineNumber);}
				}
				else if(node_.sons[0]->sons[0]->node->dataType == ID_BYTE)
				{
					if(!isInt(node_.sons[1]))
						{hasError++;printf("Semantic error: atributing to integer vector from not-integer on line %d\n",node_.lineNumber);}
				}
				else if(node_.sons[0]->sons[0]->node->dataType == ID_BOOL)
				{
					if(!isBoolean(node_.sons[1]))
						{hasError++;printf("Semantic error: atributing to boolean vector from not-boolean on line %d\n",node_.lineNumber);}
				}
				else
					{hasError++;printf("Semantic error: identifier %s not declared on line %d\n",node_.sons[0]->node->value,node_.lineNumber);}
			}
			else if(node_.sons[0]->token == POINTER)
			{
				if(node_.sons[0]->sons[0]->node->type != ID_POINTER)
					{hasError++;printf("Semantic error: dereferencing non-pointer on line %d\n",node_.lineNumber);}
				if(node_.sons[0]->sons[0]->node->dataType == ID_WORD)
				{

					if(!isInt(node_.sons[1]))
						{hasError++;printf("Semantic error: atributing to integer scalar from not-integer on line %d\n",node_.lineNumber);}
				}
				else if(node_.sons[0]->sons[0]->node->dataType == ID_BYTE)
				{
					if(!isInt(node_.sons[1]))
						{hasError++;printf("Semantic error: atributing to integer scalar from not-integer on line %d\n",node_.lineNumber);}
				}
				else if(node_.sons[0]->sons[0]->node->dataType == ID_BOOL)
				{
					if(!isBoolean(node_.sons[1]))
						{hasError++;printf("Semantic error: atributing to boolean scalar from not-boolean on line %d\n",node_.lineNumber);}
				}
				else
					{hasError++;printf("Semantic error: identifier %s not declared on line %d\n",node_.sons[0]->node->value,node_.lineNumber);}
			}
			else if(node_.sons[0]->node->type == ID_POINTER)
			{
				if(!isPt(node_.sons[1]))
				{
					{hasError++;printf("Semantic error: atributin a non-pointer to a pointer on line %d\n",node_.lineNumber);}
				}

			}
			else if(node_.sons[0]->node->type == ID_SCALAR)
			{
				if(node_.sons[0]->node->type == ID_VECTOR)
					{hasError++;printf("Semantic error: vector used as not-vector on line %d\n",node_.lineNumber);}
				if(node_.sons[0]->node->dataType == ID_WORD)
				{
					if(!isInt(node_.sons[1]))
						{hasError++;printf("Semantic error: atributing to integer scalar from not-integer on line %d\n",node_.lineNumber);}
				}
				else if(node_.sons[0]->node->dataType == ID_BYTE)
				{
					if(!isInt(node_.sons[1]))
						{hasError++;printf("Semantic error: atributing to integer scalar from not-integer on line %d\n",node_.lineNumber);}
				}
				else if(node_.sons[0]->node->dataType == ID_BOOL)
				{
					if(!isBoolean(node_.sons[1]))
						{hasError++;printf("Semantic error: atributing to boolean scalar from not-boolean on line %d\n",node_.lineNumber);}
				}
				else
					{hasError++;printf("Semantic error: identifier %s not declared on line %d\n",node_.sons[0]->node->value,node_.lineNumber);}
			}
			else
			{
				{hasError++;printf("Semantic error: atributing to non-variable on line %d\n",node_.lineNumber);}
			}
			break;
		case IF_THEN:
			if(!isBoolean(node_.sons[0]))
				{hasError++;printf("Semantic error: if called with not-boolean on line %d\n",node_.lineNumber);}
			verify(node_.sons[1]);
			break;
		case IF_THEN_ELSE:
			if(!isBoolean(node_.sons[0]))
				{hasError++;printf("Semantic error: if called with not-boolean on line %d\n",node_.lineNumber);}
			verify(node_.sons[1]);
			verify(node_.sons[2]);
			break;
		case LOOP :
			if(!isBoolean(node_.sons[0]))
				{hasError++;printf("Semantic error: loop called with not-boolean on line %d\n",node_.lineNumber);}
			verify(node_.sons[1]);
			break;
		// DEFAULT
		default:
			break;

	} // switch
	} // if node
}