Bug 1244403 - Baldr: move kind out of WasmAstNode and into WasmAstExpr (r=bbouvier)

--HG--
extra : commitid : 5GQTZbUXacT
This commit is contained in:
Luke Wagner 2016-02-01 10:16:25 -06:00
Родитель 045f189d10
Коммит eaac26b261
1 изменённых файлов: 28 добавлений и 38 удалений

Просмотреть файл

@ -88,40 +88,32 @@ class WasmAstSig : public WasmAstBase
} }
}; };
enum class WasmAstKind class WasmAstNode : public WasmAstBase
{};
enum class WasmAstExprKind
{ {
BinaryOperator, BinaryOperator,
Block, Block,
Call, Call,
Const, Const,
Export,
Func,
GetLocal, GetLocal,
Import,
Module,
Nop, Nop,
SetLocal SetLocal
}; };
class WasmAstNode : public WasmAstBase
{
const WasmAstKind kind_;
public:
explicit WasmAstNode(WasmAstKind kind)
: kind_(kind)
{}
WasmAstKind kind() const { return kind_; }
};
class WasmAstExpr : public WasmAstNode class WasmAstExpr : public WasmAstNode
{ {
const WasmAstExprKind kind_;
protected: protected:
explicit WasmAstExpr(WasmAstKind kind) explicit WasmAstExpr(WasmAstExprKind kind)
: WasmAstNode(kind) : kind_(kind)
{} {}
public: public:
WasmAstExprKind kind() const { return kind_; }
template <class T> template <class T>
T& as() { T& as() {
MOZ_ASSERT(kind() == T::Kind); MOZ_ASSERT(kind() == T::Kind);
@ -132,7 +124,7 @@ class WasmAstExpr : public WasmAstNode
struct WasmAstNop : WasmAstExpr struct WasmAstNop : WasmAstExpr
{ {
WasmAstNop() WasmAstNop()
: WasmAstExpr(WasmAstKind::Nop) : WasmAstExpr(WasmAstExprKind::Nop)
{} {}
}; };
@ -141,7 +133,7 @@ class WasmAstConst : public WasmAstExpr
const Val val_; const Val val_;
public: public:
static const WasmAstKind Kind = WasmAstKind::Const; static const WasmAstExprKind Kind = WasmAstExprKind::Const;
explicit WasmAstConst(Val val) explicit WasmAstConst(Val val)
: WasmAstExpr(Kind), : WasmAstExpr(Kind),
val_(val) val_(val)
@ -154,7 +146,7 @@ class WasmAstGetLocal : public WasmAstExpr
uint32_t localIndex_; uint32_t localIndex_;
public: public:
static const WasmAstKind Kind = WasmAstKind::GetLocal; static const WasmAstExprKind Kind = WasmAstExprKind::GetLocal;
explicit WasmAstGetLocal(uint32_t localIndex) explicit WasmAstGetLocal(uint32_t localIndex)
: WasmAstExpr(Kind), : WasmAstExpr(Kind),
localIndex_(localIndex) localIndex_(localIndex)
@ -170,7 +162,7 @@ class WasmAstSetLocal : public WasmAstExpr
WasmAstExpr& value_; WasmAstExpr& value_;
public: public:
static const WasmAstKind Kind = WasmAstKind::SetLocal; static const WasmAstExprKind Kind = WasmAstExprKind::SetLocal;
WasmAstSetLocal(uint32_t localIndex, WasmAstExpr& value) WasmAstSetLocal(uint32_t localIndex, WasmAstExpr& value)
: WasmAstExpr(Kind), : WasmAstExpr(Kind),
localIndex_(localIndex), localIndex_(localIndex),
@ -189,7 +181,7 @@ class WasmAstBlock : public WasmAstExpr
WasmAstExprVector exprs_; WasmAstExprVector exprs_;
public: public:
static const WasmAstKind Kind = WasmAstKind::Block; static const WasmAstExprKind Kind = WasmAstExprKind::Block;
explicit WasmAstBlock(WasmAstExprVector&& exprs) explicit WasmAstBlock(WasmAstExprVector&& exprs)
: WasmAstExpr(Kind), : WasmAstExpr(Kind),
exprs_(Move(exprs)) exprs_(Move(exprs))
@ -205,7 +197,7 @@ class WasmAstCall : public WasmAstExpr
WasmAstExprVector args_; WasmAstExprVector args_;
public: public:
static const WasmAstKind Kind = WasmAstKind::Call; static const WasmAstExprKind Kind = WasmAstExprKind::Call;
WasmAstCall(Expr expr, uint32_t index, WasmAstExprVector&& args) WasmAstCall(Expr expr, uint32_t index, WasmAstExprVector&& args)
: WasmAstExpr(Kind), expr_(expr), index_(index), args_(Move(args)) : WasmAstExpr(Kind), expr_(expr), index_(index), args_(Move(args))
{} {}
@ -223,8 +215,7 @@ class WasmAstFunc : public WasmAstNode
public: public:
WasmAstFunc(uint32_t sigIndex, WasmAstValTypeVector&& varTypes, WasmAstExpr* maybeBody) WasmAstFunc(uint32_t sigIndex, WasmAstValTypeVector&& varTypes, WasmAstExpr* maybeBody)
: WasmAstNode(WasmAstKind::Func), : sigIndex_(sigIndex),
sigIndex_(sigIndex),
varTypes_(Move(varTypes)), varTypes_(Move(varTypes)),
maybeBody_(maybeBody) maybeBody_(maybeBody)
{} {}
@ -241,7 +232,7 @@ class WasmAstImport : public WasmAstNode
public: public:
WasmAstImport(TwoByteChars module, TwoByteChars func, uint32_t sigIndex) WasmAstImport(TwoByteChars module, TwoByteChars func, uint32_t sigIndex)
: WasmAstNode(WasmAstKind::Import), module_(module), func_(func), sigIndex_(sigIndex) : module_(module), func_(func), sigIndex_(sigIndex)
{} {}
TwoByteChars module() const { return module_; } TwoByteChars module() const { return module_; }
TwoByteChars func() const { return func_; } TwoByteChars func() const { return func_; }
@ -255,7 +246,7 @@ class WasmAstExport : public WasmAstNode
public: public:
WasmAstExport(TwoByteChars name, uint32_t funcIndex) WasmAstExport(TwoByteChars name, uint32_t funcIndex)
: WasmAstNode(WasmAstKind::Export), name_(name), funcIndex_(funcIndex) : name_(name), funcIndex_(funcIndex)
{} {}
TwoByteChars name() const { return name_; } TwoByteChars name() const { return name_; }
size_t funcIndex() const { return funcIndex_; } size_t funcIndex() const { return funcIndex_; }
@ -278,8 +269,7 @@ class WasmAstModule : public WasmAstNode
public: public:
explicit WasmAstModule(LifoAlloc& lifo) explicit WasmAstModule(LifoAlloc& lifo)
: WasmAstNode(WasmAstKind::Module), : lifo_(lifo),
lifo_(lifo),
funcs_(lifo), funcs_(lifo),
imports_(lifo), imports_(lifo),
exports_(lifo), exports_(lifo),
@ -329,7 +319,7 @@ class WasmAstBinaryOperator final : public WasmAstExpr
WasmAstExpr* rhs_; WasmAstExpr* rhs_;
public: public:
static const WasmAstKind Kind = WasmAstKind::BinaryOperator; static const WasmAstExprKind Kind = WasmAstExprKind::BinaryOperator;
explicit WasmAstBinaryOperator(Expr expr, WasmAstExpr* lhs, WasmAstExpr* rhs) explicit WasmAstBinaryOperator(Expr expr, WasmAstExpr* lhs, WasmAstExpr* rhs)
: WasmAstExpr(Kind), : WasmAstExpr(Kind),
expr_(expr), lhs_(lhs), rhs_(rhs) expr_(expr), lhs_(lhs), rhs_(rhs)
@ -1227,19 +1217,19 @@ static bool
EncodeExpr(Encoder& e, WasmAstExpr& expr) EncodeExpr(Encoder& e, WasmAstExpr& expr)
{ {
switch (expr.kind()) { switch (expr.kind()) {
case WasmAstKind::Nop: case WasmAstExprKind::Nop:
return e.writeExpr(Expr::Nop); return e.writeExpr(Expr::Nop);
case WasmAstKind::BinaryOperator: case WasmAstExprKind::BinaryOperator:
return EncodeBinaryOperator(e, expr.as<WasmAstBinaryOperator>()); return EncodeBinaryOperator(e, expr.as<WasmAstBinaryOperator>());
case WasmAstKind::Block: case WasmAstExprKind::Block:
return EncodeBlock(e, expr.as<WasmAstBlock>()); return EncodeBlock(e, expr.as<WasmAstBlock>());
case WasmAstKind::Call: case WasmAstExprKind::Call:
return EncodeCall(e, expr.as<WasmAstCall>()); return EncodeCall(e, expr.as<WasmAstCall>());
case WasmAstKind::Const: case WasmAstExprKind::Const:
return EncodeConst(e, expr.as<WasmAstConst>()); return EncodeConst(e, expr.as<WasmAstConst>());
case WasmAstKind::GetLocal: case WasmAstExprKind::GetLocal:
return EncodeGetLocal(e, expr.as<WasmAstGetLocal>()); return EncodeGetLocal(e, expr.as<WasmAstGetLocal>());
case WasmAstKind::SetLocal: case WasmAstExprKind::SetLocal:
return EncodeSetLocal(e, expr.as<WasmAstSetLocal>()); return EncodeSetLocal(e, expr.as<WasmAstSetLocal>());
default:; default:;
} }