Esempio n. 1
0
Variable* Operation::getReference(Function* origin)
{
		if(origin && origin->skipping <= 0)
		{
			Function* function = program.getFunction(information);
			if(function)
			{
				return 0;
			}
			else
			{
				Variable* vptr = origin->getVariable(information);
				
				if(!vptr)
				{
					Variable v(information);
					origin->variables.push_back(v);
					vptr = &origin->variables[origin->variables.size()-1];
				}				
				
				for(int j = 0; j < inputs.size(); j++)
				{	
					int size = inputs[j].evaluate(origin).getValuef();
					vptr->allocate(j, size+1);
				}					
				
				
				if(vptr)
				{
					vptr = vptr->getVariable(0, inputs, origin);
					if(vptr)
						return vptr;
				}
				
				return 0;
			}
		}

	return 0;	
}
Esempio n. 2
0
Variable Operation::evaluate(Variable current, Function* origin)
{
	if(isAStatement && processManager_statement.runIndex(processIndex, current, origin, inputs))
	{}
	else
		if(origin && origin->skipping <= 0)
			if(information.length() > 0 &&  ((information[0] >= '0' && information[0] <= '9') || information[0] == '.') )
			{
				if(information[0] == '.')
				{
					information = "0"+information;
				}
				Variable v;
				v.setValue(information);
				return v;
			}
			else if(processManager.runIndex(processIndex, current, origin, inputs))
			{}
			else if(information.length() > 0 && information[0] == '\"')
			{
				Variable v;
				v.setValue(information);
				return v;
			}
			else
			{
				Function* function = program.getFunction(information);
				if(function)
				{
					function = program.getFunction(information, inputs.size());
					if(function)
					{
						Function f = *function;
						vector<Variable> functionInputs;
						for(int i = 0; i < inputs.size(); i++)
							functionInputs.push_back(inputs[i].evaluate(origin));
						return f.evaluate(functionInputs);				
					}
					else
					{
						Variable v;
						v.setValue("Inputs do not match function");
						return v;
					}
				}
				else
				{		
					if(origin)
					{
						Variable* vptr = origin->getVariable(information);

						if(!vptr)
						{
							Variable v(information);
							origin->variables.push_back(v);
							vptr = &origin->variables[origin->variables.size()-1];
						}

						for(int j = 0; j < inputs.size(); j++)
						{	
							int size = inputs[j].evaluate(origin).getValuef();
							vptr->allocate(j, size+1);
						}					
						
						if(origin && assignmentType == key.operator_equal && vptr)
						{	
							Variable result = assignment.evaluate(origin);

							vptr = origin->getVariable(information);
							vptr = vptr->getVariable(0, inputs, origin);

							vptr->set(result);

							return result;
						}
						else
						{
							if(vptr)
							{
								vptr = vptr->getVariable(0, inputs, origin);
								if(vptr)
									return *vptr;
							}
							return Variable();
						}
					}
				}
	}

	return current;	
}