Skip to content

Commit

Permalink
table: use base and type info structures for print and input entries
Browse files Browse the repository at this point in the history
moved base and type info structures to table header file
added internal class constructor with base and type info structures
added table constructor with these arguments, also appends alternate
- removed append alternate from operand, print item, and input assign
added base and type literal constants for print and input entries
eliminated input parse intermediate class
  • Loading branch information
thunder422 committed Feb 28, 2015
1 parent 1598427 commit a52bd65
Show file tree
Hide file tree
Showing 6 changed files with 63 additions and 50 deletions.
5 changes: 5 additions & 0 deletions basic/command.h
Expand Up @@ -44,6 +44,11 @@ class Internal : public Table
Table {Code{}, name, name2, "", NoName_Flag | flags, 2, exprInfo,
No_OperandType} {}

Internal(BaseInfo baseInfo, TypeInfo typeInfo,
const AlternateItem &alternateItem, unsigned moreFlags = {}) :
Table {baseInfo, typeInfo, 2, No_OperandType, NoName_Flag | moreFlags,
alternateItem} {}

Internal(const char *name, const char *name2, ExprInfo *exprInfo,
const char *option) :
Table {Code{}, name, name2, option, NoName_Flag, 2, exprInfo,
Expand Down
43 changes: 19 additions & 24 deletions basic/input.cpp
Expand Up @@ -90,15 +90,18 @@ class InputBeginStr : public Internal
};


constexpr BaseInfo inputAssignBase = {Code{}, "InputAssign", Reference_Flag};

constexpr TypeInfo Dbl = {"", &None_Dbl_ExprInfo};
constexpr TypeInfo Int = {"%", &None_Int_ExprInfo};
constexpr TypeInfo Str = {"$", &None_Str_ExprInfo};


class InputAssign : public Internal
{
public:
InputAssign(const char *name2, ExprInfo *exprInfo,
const AlternateItem &alternateItem) :
Internal {"InputAssign", name2, exprInfo, Reference_Flag}
{
appendAlternate(alternateItem);
}
InputAssign(TypeInfo typeInfo, const AlternateItem &alternateItem) :
Internal {inputAssignBase, typeInfo, alternateItem} {}

void recreate(Recreator &recreator, RpnItemPtr &rpnItem) override;
};
Expand All @@ -108,7 +111,7 @@ class InputAssignDbl : public InputAssign
public:
InputAssignDbl(const AlternateItem &alternateItem,
const AlternateItem &alternateItem2) :
InputAssign {"", &None_Dbl_ExprInfo, alternateItem}
InputAssign {Dbl, alternateItem}
{
appendAlternate(alternateItem2);
}
Expand All @@ -120,7 +123,7 @@ class InputAssignInt : public InputAssign
{
public:
InputAssignInt(const AlternateItem &alternateItem) :
InputAssign {"%", &None_Int_ExprInfo, alternateItem} {}
InputAssign {Int, alternateItem} {}

// TODO virtual run() override function for InputAssignInt
};
Expand All @@ -129,45 +132,37 @@ class InputAssignStr : public InputAssign
{
public:
InputAssignStr(const AlternateItem &alternateItem) :
InputAssign {"$", &None_Str_ExprInfo, alternateItem} {}
InputAssign {Str, alternateItem} {}

// TODO virtual run() override function for InputAssignStr
};


class InputParse : public Internal
{
public:
InputParse(const char *name2, const AlternateItem &alternateItem = {}) :
Internal {"InputParse", name2, &Null_ExprInfo}
{
appendAlternate(alternateItem);
}
};
constexpr BaseInfo inputParseBase = {Code{}, "InputParse", TableFlag{}};

class InputParseDbl : public InputParse
class InputParseDbl : public Internal
{
public:
InputParseDbl(const AlternateItem &alternateItem) :
InputParse {"", alternateItem} {}
Internal {inputParseBase, Dbl, alternateItem} {}

// TODO virtual run() override function for InputParseDbl
};

class InputParseInt : public InputParse
class InputParseInt : public Internal
{
public:
InputParseInt(const AlternateItem &alternateItem) :
InputParse {"%", alternateItem} {}
Internal {inputParseBase, Int, alternateItem} {}

// TODO virtual run() override function for InputParseInt
};

class InputParseStr : public InputParse
class InputParseStr : public Internal
{
public:
InputParseStr(const AlternateItem &alternateItem) :
InputParse {"$", alternateItem} {}
Internal {inputParseBase, Str, alternateItem} {}

// TODO virtual run() override function for InputParseStr
};
Expand Down
17 changes: 1 addition & 16 deletions basic/operand.cpp
Expand Up @@ -30,19 +30,6 @@ extern ExprInfo Dbl_None_ExprInfo;
extern ExprInfo Int_None_ExprInfo;
extern ExprInfo Str_None_ExprInfo;

struct BaseInfo
{
Code code;
const char *name;
unsigned flags;
};

struct TypeInfo
{
const char *name2;
ExprInfo *exprInfo;
};

constexpr TypeInfo Dbl = {"", &Dbl_None_ExprInfo};
constexpr TypeInfo Int = {"%", &Int_None_ExprInfo};
constexpr TypeInfo Str = {"$", &Str_None_ExprInfo};
Expand Down Expand Up @@ -80,10 +67,8 @@ Operand::Operand(Code code, const char *name, int precedence, unsigned flags,

Operand::Operand(BaseInfo baseInfo, TypeInfo typeInfo, OperandType operandType,
const AlternateItem &alternateItem) :
Table {baseInfo.code, baseInfo.name, typeInfo.name2, "",
NoName_Flag | baseInfo.flags, 2, typeInfo.exprInfo, operandType}
Table {baseInfo, typeInfo, 2, operandType, NoName_Flag, alternateItem}
{
appendAlternate(alternateItem);
}

void Operand::encode(ProgramWriter &programWriter, Token *token)
Expand Down
23 changes: 13 additions & 10 deletions basic/print.cpp
Expand Up @@ -54,15 +54,19 @@ class Print : public Command
};


constexpr BaseInfo printItemBase = {Code{}, "PrintItem", TableFlag{}};

constexpr TypeInfo Dbl = {"", &None_Dbl_ExprInfo};
constexpr TypeInfo Int = {"%", &None_Int_ExprInfo};
constexpr TypeInfo Str = {"$", &None_Str_ExprInfo};

class PrintItem : public Internal
{
public:
PrintItem(const char *name2, ExprInfo *exprInfo,
const AlternateItem &alternateItem, unsigned moreFlags = {}) :
Internal {"PrintItem", name2, exprInfo, Print_Flag | moreFlags}
{
appendAlternate(alternateItem);
}
PrintItem(TypeInfo typeInfo, const AlternateItem &alternateItem,
unsigned moreFlags = {}) :
Internal {printItemBase, typeInfo, alternateItem,
Print_Flag | moreFlags} {}

void recreate(Recreator &recreator, RpnItemPtr &rpnItem) override;
};
Expand All @@ -71,8 +75,7 @@ class PrintDbl : public PrintItem
{
public:
PrintDbl(const AlternateItem &alternateItem) :
PrintItem {"", &None_Dbl_ExprInfo, alternateItem,
UseConstAsIs_Flag} {}
PrintItem {Dbl, alternateItem, UseConstAsIs_Flag} {}

// TODO virtual run() override function for PrintDbl
};
Expand All @@ -81,7 +84,7 @@ class PrintInt : public PrintItem
{
public:
PrintInt(const AlternateItem &alternateItem) :
PrintItem {"%", &None_Int_ExprInfo, alternateItem} {}
PrintItem {Int, alternateItem} {}

// TODO virtual run() override function for PrintInt
};
Expand All @@ -90,7 +93,7 @@ class PrintStr : public PrintItem
{
public:
PrintStr(const AlternateItem &alternateItem) :
PrintItem {"$", &None_Str_ExprInfo, alternateItem} {}
PrintItem {Str, alternateItem} {}

// TODO virtual run() override function for PrintStr
};
Expand Down
9 changes: 9 additions & 0 deletions table.cpp
Expand Up @@ -1167,6 +1167,15 @@ Table::Table(Code code, const char *name, const char *name2, const char *option,
{
}

Table::Table(BaseInfo baseInfo, TypeInfo typeInfo, int precedence,
OperandType operandType, unsigned moreFlags,
const AlternateItem &alternateItem = {}) :
Table {baseInfo.code, baseInfo.name, typeInfo.name2, "",
baseInfo.flags | moreFlags, precedence, typeInfo.exprInfo, operandType}
{
appendAlternate(alternateItem);
}


std::string Table::commandName() const
{
Expand Down
16 changes: 16 additions & 0 deletions table.h
Expand Up @@ -88,6 +88,19 @@ struct ExprInfo
}
};

struct BaseInfo
{
Code code;
const char *name;
unsigned flags;
};

struct TypeInfo
{
const char *name2;
ExprInfo *exprInfo;
};


class Table;
struct AlternateItem
Expand Down Expand Up @@ -115,6 +128,9 @@ class Table
Table(Code code, const char *name, const char *name2, const char *option,
unsigned flags, int precedence, ExprInfo *exprInfo,
RecreateFunction _recreate);
Table(BaseInfo baseInfo, TypeInfo typeInfo, int precedence,
OperandType operandType, unsigned moreFlags,
const AlternateItem &alternateItem);

Table &operator=(const Table &) = delete;
Table(const Table &) = delete;
Expand Down

0 comments on commit a52bd65

Please sign in to comment.