Mercurial > projects > dang
view ast/Expr.d @ 201:4f94b5adbc8a
Added ast/Expr.d to contain all expressions.
author | Anders Johnsen <skabet@gmail.com> |
---|---|
date | Mon, 11 Aug 2008 18:41:45 +0200 |
parents | |
children | 227d6a8fb574 |
line wrap: on
line source
module ast.Expr; /** The base class for all Expressions. */ class Expr { /// Returns true if the Expr can be compile-time evaluated. bool isConstantExpr() { return false; } NumberLiteral asNumberLiteral() { return null; } bool isNumberLiteral() { return false; } StringLiteral asStringLiteral() { return null; } bool isStringLiteral() { return false; } ArrayLiteral asArrayLiteral() { return null; } bool isArrayLiteral() { return false; } } /** NumberLiteral */ class NumberLiteral : Expr { override bool isConstantExpr() { return true; } override NumberLiteral asNumberLiteral() { return this; } override bool isNumberLiteral() { return true; } } /** StringLiteral */ class StringLiteral : Expr { override bool isConstantExpr() { return true; } override StringLiteral asStringLiteral() { return this; } override bool isStringLiteral() { return true; } } /** StringLiteral */ class ArrayLiteral : Expr { override bool isConstantExpr() { foreach (arg; arguments) if (!arg.isConstantExpr()) return false; return true; } override ArrayLiteral asArrayLiteral() { return this; } override bool isArrayLiteral() { return true; } private: Expr[] arguments; } /** Identifier */ class Identifier : Expr { }