Skip to content

Commit

Permalink
changed data type enumeration to a enumeration class
Browse files Browse the repository at this point in the history
the No_DataType enumerator was replaced with DataType{} (to indicate an
unset data type; all Xx_DataType were renamed without the _DataType and
uses changed to DataType::Xx; the DataType::Double was assigned to one
so as not to conflict with the value of DataType{}; and the test names
awk script was modified to look for the data type enum class and
generate an unordered map for data type to string with an initializer
list instead of C style array of character array
  • Loading branch information
thunder422 committed Aug 17, 2014
1 parent 4183a87 commit 06ef6f1
Show file tree
Hide file tree
Showing 12 changed files with 342 additions and 301 deletions.
6 changes: 3 additions & 3 deletions basic/input.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -44,11 +44,11 @@ TokenStatus inputTranslate(Translator &translator, Token *commandToken,
else // InputPrompt_Code
{
token = NULL;
status = translator.getExpression(token, String_DataType);
status = translator.getExpression(token, DataType::String);
if (status != Done_TokenStatus)
{
if (status == Parser_TokenStatus
&& token->isDataType(None_DataType))
&& token->isDataType(DataType::None))
{
status = ExpSemiOrComma_TokenStatus;
}
Expand Down Expand Up @@ -77,7 +77,7 @@ TokenStatus inputTranslate(Translator &translator, Token *commandToken,
{
// get variable reference
token = NULL;
if ((status = translator.getOperand(token, Any_DataType,
if ((status = translator.getOperand(token, DataType::Any,
Translator::Variable_Reference)) != Good_TokenStatus)
{
break;
Expand Down
6 changes: 3 additions & 3 deletions basic/let.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ TokenStatus letTranslate(Translator &translator, Token *commandToken,
delete commandToken;
hidden = false;
}
dataType = Any_DataType;
dataType = DataType::Any;
do
{
if ((status = translator.getOperand(token, dataType,
Expand Down Expand Up @@ -132,7 +132,7 @@ TokenStatus letTranslate(Translator &translator, Token *commandToken,
letStack.push(token); // save token

// get data type for assignment
if (dataType == Any_DataType)
if (dataType == DataType::Any)
{
dataType = token->dataType();
}
Expand All @@ -145,7 +145,7 @@ TokenStatus letTranslate(Translator &translator, Token *commandToken,
if ((status = translator.getExpression(token, dataType))
!= Done_TokenStatus)
{
if (status == Parser_TokenStatus && token->isDataType(None_DataType))
if (status == Parser_TokenStatus && token->isDataType(DataType::None))
{
status = ExpOpOrEnd_TokenStatus;
}
Expand Down
8 changes: 4 additions & 4 deletions basic/print.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,19 +40,19 @@ TokenStatus printTranslate(Translator &translator, Token *commandToken,

forever
{
if ((status = translator.getExpression(token, None_DataType))
if ((status = translator.getExpression(token, DataType::None))
!= Done_TokenStatus)
{
if (status == Parser_TokenStatus
&& token->isDataType(None_DataType))
&& token->isDataType(DataType::None))
{
if (translator.doneStackEmpty())
{
status = ExpExprCommaPfnOrEnd_TokenStatus;
}
// change parser error if not inside paren
else if (translator.doneStackTopToken()
->isDataType(None_DataType))
->isDataType(DataType::None))
{
status = ExpSemiCommaOrEnd_TokenStatus;
}
Expand All @@ -66,7 +66,7 @@ TokenStatus printTranslate(Translator &translator, Token *commandToken,

if (!translator.doneStackEmpty())
{
if (translator.doneStackTopToken()->isDataType(None_DataType))
if (translator.doneStackTopToken()->isDataType(DataType::None))
{
translator.doneStackDrop(); // print function
printFunction = true;
Expand Down
15 changes: 7 additions & 8 deletions ibcp.h
Original file line number Diff line number Diff line change
Expand Up @@ -63,19 +63,18 @@ enum {


// data type of operands
enum DataType
enum class DataType
{
No_DataType = -1,
// actual execution data types must be listed first
// since they will also be used for indexes
Double_DataType,
Integer_DataType,
String_DataType,
Double = 1,
Integer,
String,
// end of the actual execution data types
// the following data types are used internally for other uses
None_DataType, // indicates none of the above data types
Number_DataType, // either Double or Integer
Any_DataType // any type (Double, Integer or String)
None, // indicates none of the above data types
Number, // either Double or Integer
Any // any type (Double, Integer or String)
};


Expand Down
22 changes: 11 additions & 11 deletions parser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ Token *Parser::token(bool operandState)
if (!getIdentifier() && !getNumber() && !getString() && !getOperator())
{
// not a valid token, create error token
m_token->setError(tr("unrecognizable character"), None_DataType);
m_token->setError(tr("unrecognizable character"), DataType::None);
}
return m_token; // token may contain an error
}
Expand Down Expand Up @@ -118,7 +118,7 @@ bool Parser::getIdentifier(void)
{
search = ParenWord_SearchType;
}
else if (dataType != None_DataType)
else if (dataType != DataType::None)
{
search = DataTypeWord_SearchType;
}
Expand Down Expand Up @@ -167,7 +167,7 @@ bool Parser::getIdentifier(void)
skipWhitespace();
pos = scanWord(m_pos, dataType, paren);
int len2 = pos - m_pos;
if (dataType != None_DataType || paren
if (dataType != DataType::None || paren
|| (code = m_table.search(m_input.midRef(word1, len),
m_input.midRef(m_pos, len2))) == Invalid_Code)
{
Expand Down Expand Up @@ -213,19 +213,19 @@ int Parser::scanWord(int pos, DataType &dataType, bool &paren)
switch (m_input[pos].unicode())
{
case '%':
dataType = Integer_DataType;
dataType = DataType::Integer;
pos++;
break;
case '$':
dataType = String_DataType;
dataType = DataType::String;
pos++;
break;
case '#':
dataType = Double_DataType;
dataType = DataType::Double;
pos++;
break;
default:
dataType = None_DataType;
dataType = DataType::None;
}

// see if there is an opening parenthesis
Expand Down Expand Up @@ -415,7 +415,7 @@ bool Parser::getNumber(void)
m_token->setValue(numBytes.toInt(&ok));
if (ok)
{
m_token->setDataType(Integer_DataType);
m_token->setDataType(DataType::Integer);
// convert to double in case double is needed
m_token->setValue((double)m_token->valueInt());
return true;
Expand All @@ -435,7 +435,7 @@ bool Parser::getNumber(void)
if (m_token->value() > (double)INT_MIN - 0.5
&& m_token->value() < (double)INT_MAX + 0.5)
{
m_token->setDataType(Integer_DataType);
m_token->setDataType(DataType::Integer);
// convert to integer in case integer is needed
m_token->setValue((int)m_token->value());
if (decimal) // decimal point or exponent?
Expand All @@ -446,7 +446,7 @@ bool Parser::getNumber(void)
}
else // number can't be converted to integer
{
m_token->setDataType(Double_DataType);
m_token->setDataType(DataType::Double);
}
return true;
}
Expand Down Expand Up @@ -485,7 +485,7 @@ bool Parser::getString(void)
m_token->setString(len++, m_input[pos++]); // copy char into string
}
m_token->setType(Constant_TokenType);
m_token->setDataType(String_DataType);
m_token->setDataType(DataType::String);
m_token->setLength(pos - m_pos);
// advance position past end of string
m_pos = pos;
Expand Down
Loading

0 comments on commit 06ef6f1

Please sign in to comment.