# HG changeset patch # User Anders Johnsen # Date 1218482864 -7200 # Node ID 227d6a8fb57498e3d26b8ffd5aead4cf6c8f6349 # Parent 28beb8b110ee18cbafd67fea7f671befdd079327 Added some random stuff... diff -r 28beb8b110ee -r 227d6a8fb574 ast/Expr.d --- a/ast/Expr.d Mon Aug 11 19:43:17 2008 +0200 +++ b/ast/Expr.d Mon Aug 11 21:27:44 2008 +0200 @@ -5,6 +5,19 @@ */ class Expr { + /// Get the type of the Expr + Object getType() + { + assert(0, "Unimplemented"); + return null; + } + + /// Set the type of the Expr + void setType(Object type) + { + assert(0, "Unimplemented"); + } + /// Returns true if the Expr can be compile-time evaluated. bool isConstantExpr() { return false; } @@ -16,11 +29,39 @@ ArrayLiteral asArrayLiteral() { return null; } bool isArrayLiteral() { return false; } + + Assign asAssign() { return null; } + bool isAssign() { return false; } + + Binary asBinary() { return null; } + bool isBinary() { return false; } + + Negate asNegate() { return null; } + bool isNegate() { return false; } + + Deref asDeref() { return null; } + bool isDeref() { return false; } + + AddressOf asAddressOf() { return null; } + bool isAddressOf() { return false; } + + Index asIndex() { return null; } + bool isIndex() { return false; } + + Identifier asIdentifier() { return null; } + bool isIdentifier() { return false; } + + Member asMember() { return null; } + bool isMember() { return false; } + +private: +/// FIXME: Add DType? here } /** NumberLiteral */ +/// FIXME: Should there be an IntegerLiteral and FloatLiteral instead? class NumberLiteral : Expr { override bool isConstantExpr() { return true; } @@ -40,14 +81,27 @@ override bool isStringLiteral() { return true; } } - /** - StringLiteral + ArrayLiteral */ class ArrayLiteral : Expr { + /// Return the arguments for the ArrayLiteral + Expr[] getArguments() { return arguments; } + + /// Return a given argument for the ArrayLiteral + Expr getArgument(int index) { return arguments[index]; } + + /// Get the count of arguments for the ArrayLiteral + int getArgumentCount() { return arguments.length; } + override bool isConstantExpr() { + /** + If all the arguments to the ArrayLiteral is an constant Expr, then + this ArrayLiteral can be considered an constant Expr aswell. + */ + // FIXME: consider if it should save the result foreach (arg; arguments) if (!arg.isConstantExpr()) return false; @@ -61,12 +115,84 @@ Expr[] arguments; } +/** + Assign + */ +class Assign : Expr +{ + override Assign asAssign() { return this; } + override bool isAssign() { return true; } +private: + Expr left, right; +} + +/** + Binary + */ +class Binary : Expr +{ + override Binary asBinary() { return this; } + override bool isBinary() { return true; } + +private: + Expr left, right; +} + +/** + Negate + */ +class Negate : Expr +{ + override Negate asNegate() { return this; } + override bool isNegate() { return true; } + +private: + Expr expr; +} + +/** + Deref + */ +class Deref : Expr +{ + override Deref asDeref() { return this; } + override bool isDeref() { return true; } +} + +/** + AddressOf + */ +class AddressOf : Expr +{ + override AddressOf asAddressOf() { return this; } + override bool isAddressOf() { return true; } +} + +/** + Index + */ +class Index : Expr +{ + override Index asIndex() { return this; } + override bool isIndex() { return true; } +} /** Identifier */ class Identifier : Expr { + override Identifier asIdentifier() { return this; } + override bool isIdentifier() { return true; } +} +/** + Member + */ +class Member : Expr +{ + override Member asMember() { return this; } + override bool isMember() { return true; } } + diff -r 28beb8b110ee -r 227d6a8fb574 ast/Stmt.d --- a/ast/Stmt.d Mon Aug 11 19:43:17 2008 +0200 +++ b/ast/Stmt.d Mon Aug 11 21:27:44 2008 +0200 @@ -5,7 +5,7 @@ */ class Stmt { - bool isCompundStmt() { return false; } + bool isCompoundStmt() { return false; } CompoundStmt asCompoundStmt() { return null; } bool isDeclStmt() { return false; } diff -r 28beb8b110ee -r 227d6a8fb574 doc/candydoc/modules.ddoc --- a/doc/candydoc/modules.ddoc Mon Aug 11 19:43:17 2008 +0200 +++ b/doc/candydoc/modules.ddoc Mon Aug 11 21:27:44 2008 +0200 @@ -1,3 +1,1 @@ MODULES = - $(MODULE_FULL ast.Decl) - $(MODULE_FULL ast.Expr)