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
{

}