Index: src/SynTree/Expression.cc
===================================================================
--- src/SynTree/Expression.cc	(revision fdd0509487d63253738f8e8217fdb95ae3fb381e)
+++ src/SynTree/Expression.cc	(revision ddb80bdef0426d2cec4497bdc27176f0987deb06)
@@ -83,4 +83,17 @@
 }
 
+long long int ConstantExpr::intValue() const {
+	if ( BasicType * basicType = dynamic_cast< BasicType * >( result ) ) {
+		if ( basicType->isInteger() ) {
+			return get_constant()->get_ival();
+		}
+	} else if ( dynamic_cast< OneType * >( result ) ) {
+		return 1;
+	} else if ( dynamic_cast< ZeroType * >( result ) ) {
+		return 0;
+	}
+	throw SemanticError( "Constant expression of non-integral type ", this );
+}
+
 VariableExpr::VariableExpr( DeclarationWithType *_var ) : Expression(), var( _var ) {
 	assert( var );
Index: src/SynTree/Expression.h
===================================================================
--- src/SynTree/Expression.h	(revision fdd0509487d63253738f8e8217fdb95ae3fb381e)
+++ src/SynTree/Expression.h	(revision ddb80bdef0426d2cec4497bdc27176f0987deb06)
@@ -295,5 +295,8 @@
 
 	Constant * get_constant() { return & constant; }
+	const Constant * get_constant() const { return & constant; }
 	void set_constant( const Constant & newValue ) { constant = newValue; }
+
+	long long int intValue() const;
 
 	virtual ConstantExpr * clone() const { return new ConstantExpr( * this ); }
