Example #1
0
static Symbol* task_proc(NodeFunction* pFunc, ParseInfo* pinfo, std::vector<Symbol*>* pvecSyms)
{
	if(!pFunc || !pinfo) return 0;

	SymbolTable *pTable = new SymbolTable();
	SymbolArray arrArgs;
	arrArgs.SetDontDel(1);

	const NodeFunction *pThreadFunc = 0;
	RuntimeInfo *pruninfo2 = new RuntimeInfo();
	pThreadFunc = (NodeFunction*)pFunc/*->clone()->optimize()*/;

	if(pvecSyms) arrArgs.GetArr() = *pvecSyms;
	arrArgs.UpdateIndices();

	pTable->InsertSymbol(T_STR"<args>", &arrArgs);
	Symbol* pRet = pThreadFunc->eval(*pinfo, *pruninfo2, pTable);
	pTable->RemoveSymbolNoDelete(T_STR"<ret>");
	pTable->RemoveSymbolNoDelete(T_STR"<args>");

	if(pTable) delete pTable;
	if(pvecSyms) delete_symbols(pvecSyms);
	//if(pThreadFunc) delete pThreadFunc;
	delete pruninfo2;

	return pRet;
}
Example #2
0
File: calc.cpp Project: b0nk/mbot
double
ModCalc::calc (c_char exp)
{
  error[0] = 0;
  braces = 0;
  top = bottom = NULL;
  scan_symbols (exp);
  if (error[0] != 0)
    return 0;
  double result = parse_explist ();
  if (error[0] == 0)
    ans = result;
  delete_symbols ();
  return result;
}