1247606Spjd/* 2247606Spjd * Copyright 2013-2014, Rene Gollent, rene@gollent.com. 3247606Spjd * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de. 4247606Spjd * Distributed under the terms of the MIT License. 5247606Spjd */ 6247606Spjd 7247606Spjd#include "CLanguageFamily.h" 8247606Spjd 9247606Spjd#include <new> 10247606Spjd 11247606Spjd#include <stdlib.h> 12247606Spjd 13247606Spjd#include "CLanguageExpressionEvaluator.h" 14247606Spjd#include "CLanguageFamilySyntaxHighlighter.h" 15247606Spjd#include "CLanguageTokenizer.h" 16247606Spjd#include "ExpressionInfo.h" 17247606Spjd#include "TeamTypeInformation.h" 18247606Spjd#include "StringValue.h" 19247606Spjd#include "Type.h" 20247606Spjd#include "TypeLookupConstraints.h" 21247606Spjd 22247606Spjd 23247606Spjdusing CLanguage::ParseException; 24247606Spjd 25247606Spjd 26247606SpjdCLanguageFamily::CLanguageFamily() 27247606Spjd{ 28247606Spjd} 29247606Spjd 30247606Spjd 31247606SpjdCLanguageFamily::~CLanguageFamily() 32247606Spjd{ 33247606Spjd} 34263234Srwatson 35247606Spjd 36247606SpjdSyntaxHighlighter* 37247606SpjdCLanguageFamily::GetSyntaxHighlighter() const 38247606Spjd{ 39247606Spjd return new(std::nothrow) CLanguageFamilySyntaxHighlighter(); 40247606Spjd} 41247606Spjd 42247606Spjd 43247606Spjdstatus_t 44247606SpjdCLanguageFamily::EvaluateExpression(const BString& expression, 45247606Spjd ValueNodeManager* manager, TeamTypeInformation* info, 46247606Spjd ExpressionResult*& _output, ValueNode*& _neededNode) 47247606Spjd{ 48247606Spjd _output = NULL; 49247606Spjd _neededNode = NULL; 50247606Spjd CLanguageExpressionEvaluator evaluator; 51247606Spjd try { 52247606Spjd _output = evaluator.Evaluate(expression, manager, info); 53247606Spjd return B_OK; 54247676Spjd } catch (ParseException& ex) { 55247606Spjd BString error; 56247606Spjd error.SetToFormat("Parse error at position %" B_PRId32 ": %s", 57247606Spjd ex.position, ex.message.String()); 58247606Spjd StringValue* value = new(std::nothrow) StringValue(error.String()); 59247606Spjd if (value == NULL) 60247606Spjd return B_NO_MEMORY; 61247606Spjd BReference<Value> valueReference(value, true); 62247606Spjd _output = new(std::nothrow) ExpressionResult(); 63247606Spjd if (_output == NULL) 64247606Spjd return B_NO_MEMORY; 65247606Spjd _output->SetToPrimitive(value); 66247606Spjd return B_BAD_DATA; 67247606Spjd } catch (ValueNeededException& ex) { 68247606Spjd _neededNode = ex.value; 69247606Spjd } 70247606Spjd 71247606Spjd return B_OK; 72247606Spjd} 73247606Spjd