text: /*
   * Copyright 2013-2014, Rene Gollent, rene@gollent.com.
   * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de.
   * Distributed under the terms of the MIT License.
   */
  
  #include "CLanguageFamily.h"
  
  #include <new>
  
  #include <stdlib.h>
  
  #include "CLanguageExpressionEvaluator.h"
  #include "CLanguageFamilySyntaxHighlighter.h"
  #include "CLanguageTokenizer.h"
  #include "ExpressionInfo.h"
  #include "TeamTypeInformation.h"
  #include "StringValue.h"
  #include "Type.h"
  #include "TypeLookupConstraints.h"
  
  
  using CLanguage::ParseException;
  
  
  CLanguageFamily::CLanguageFamily()
  {
  }
  
  
  CLanguageFamily::~CLanguageFamily()
  {
  }
  
  
  SyntaxHighlighter*
  CLanguageFamily::GetSyntaxHighlighter() const
  {
  	return new(std::nothrow) CLanguageFamilySyntaxHighlighter();
  }
  
  
  status_t
  CLanguageFamily::EvaluateExpression(const BString& expression,
  	ValueNodeManager* manager, TeamTypeInformation* info,
  	ExpressionResult*& _output, ValueNode*& _neededNode)
  {
  	_output = NULL;
  	_neededNode = NULL;
  	CLanguageExpressionEvaluator evaluator;
  	try {
  		_output = evaluator.Evaluate(expression, manager, info);
  		return B_OK;
  	} catch (ParseException& ex) {
  		BString error;
  		error.SetToFormat("Parse error at position %" B_PRId32 ": %s",
  			ex.position, ex.message.String());
  		StringValue* value = new(std::nothrow) StringValue(error.String());
  		if (value == NULL)
  			return B_NO_MEMORY;
  		BReference<Value> valueReference(value, true);
  		_output = new(std::nothrow) ExpressionResult();
  		if (_output == NULL)
  			return B_NO_MEMORY;
  		_output->SetToPrimitive(value);
  		return B_BAD_DATA;
  	} catch (ValueNeededException& ex) {
  		_neededNode = ex.value;
  	}
  
  	return B_OK;
  }
  