Index: src/SynTree/Mutator.h
===================================================================
--- src/SynTree/Mutator.h	(revision f6f0cca3f172613989f420c40761026fe191b651)
+++ src/SynTree/Mutator.h	(revision ff29f0885c5ef43cc494cdb91326ef1813825a32)
@@ -39,4 +39,5 @@
 	virtual Statement * mutate( ExprStmt * exprStmt ) = 0;
 	virtual Statement * mutate( AsmStmt * asmStmt ) = 0;
+	virtual Statement * mutate( DirectiveStmt * dirStmt ) = 0;
 	virtual Statement * mutate( IfStmt * ifStmt ) = 0;
 	virtual Statement * mutate( WhileStmt * whileStmt ) = 0;
Index: src/SynTree/Statement.cc
===================================================================
--- src/SynTree/Statement.cc	(revision f6f0cca3f172613989f420c40761026fe191b651)
+++ src/SynTree/Statement.cc	(revision ff29f0885c5ef43cc494cdb91326ef1813825a32)
@@ -81,4 +81,11 @@
 
 
+DirectiveStmt::DirectiveStmt( const std::string & directive ) : Statement(), directive( directive ) {}
+
+void DirectiveStmt::print( std::ostream &os, Indenter ) const {
+	os << "GCC Directive:" << directive << endl;
+}
+
+
 const char *BranchStmt::brType[] = { "Goto", "Break", "Continue" };
 
@@ -370,6 +377,34 @@
 void WaitForStmt::print( std::ostream &os, Indenter indent ) const {
 	os << "Waitfor Statement" << endl;
-	os << indent << "... with block:" << endl << indent+1;
-	// block->print( os, indent + 4 );
+	indent += 1;
+	for( auto & clause : clauses ) {
+		os << indent << "target function :";
+		if(clause.target.function) { clause.target.function->print(os, indent + 1); }
+		os << endl << indent << "with arguments :" << endl;
+		for( auto & thing : clause.target.arguments) {
+			if(thing) { thing->print(os, indent + 1); }
+		}
+		os << indent << " with statment :" << endl;
+		if(clause.statement) { clause.statement->print(os, indent + 1); }
+
+		os << indent << " with condition :" << endl;
+		if(clause.condition) { clause.condition->print(os, indent + 1); }
+	}
+
+	os << indent << " timeout of :" << endl;
+	if(timeout.time) { timeout.time->print(os, indent + 1); }
+
+	os << indent << " with statment :" << endl;
+	if(timeout.statement) { timeout.statement->print(os, indent + 1); }
+
+	os << indent << " with condition :" << endl;
+	if(timeout.condition) { timeout.condition->print(os, indent + 1); }
+
+
+	os << indent << " else :" << endl;
+	if(orelse.statement) { orelse.statement->print(os, indent + 1); }
+
+	os << indent << " with condition :" << endl;
+	if(orelse.condition) { orelse.condition->print(os, indent + 1); }
 }
 
Index: src/SynTree/Statement.h
===================================================================
--- src/SynTree/Statement.h	(revision f6f0cca3f172613989f420c40761026fe191b651)
+++ src/SynTree/Statement.h	(revision ff29f0885c5ef43cc494cdb91326ef1813825a32)
@@ -122,4 +122,17 @@
 };
 
+class DirectiveStmt : public Statement {
+	public:
+	std::string directive;
+
+	DirectiveStmt( const std::string & );
+	virtual ~DirectiveStmt(){}
+
+	virtual DirectiveStmt * clone() const { return new DirectiveStmt( *this ); }
+	virtual void accept( Visitor & v ) { v.visit( this ); }
+	virtual Statement * acceptMutator( Mutator & m ) { return m.mutate( this ); }
+	virtual void print( std::ostream & os, Indenter indent = {} ) const;
+};
+
 class IfStmt : public Statement {
   public:
Index: src/SynTree/SynTree.h
===================================================================
--- src/SynTree/SynTree.h	(revision f6f0cca3f172613989f420c40761026fe191b651)
+++ src/SynTree/SynTree.h	(revision ff29f0885c5ef43cc494cdb91326ef1813825a32)
@@ -44,4 +44,5 @@
 class ExprStmt;
 class AsmStmt;
+class DirectiveStmt;
 class IfStmt;
 class WhileStmt;
Index: src/SynTree/Visitor.h
===================================================================
--- src/SynTree/Visitor.h	(revision f6f0cca3f172613989f420c40761026fe191b651)
+++ src/SynTree/Visitor.h	(revision ff29f0885c5ef43cc494cdb91326ef1813825a32)
@@ -41,4 +41,5 @@
 	virtual void visit( ExprStmt * exprStmt ) = 0;
 	virtual void visit( AsmStmt * asmStmt ) = 0;
+	virtual void visit( DirectiveStmt * directiveStmt ) = 0;
 	virtual void visit( IfStmt * ifStmt ) = 0;
 	virtual void visit( WhileStmt * whileStmt ) = 0;
