[phc-internals] [phc commit] r1823 - in branches/dataflow/src: lib
optimize optimize/ssa
codesite-noreply at google.com
codesite-noreply at google.com
Sun Oct 26 21:21:21 GMT 2008
Author: paul.biggar
Date: Sun Oct 26 14:18:03 2008
New Revision: 1823
Modified:
branches/dataflow/src/lib/AttrMap.h
branches/dataflow/src/lib/List.h
branches/dataflow/src/lib/error.h
branches/dataflow/src/optimize/Basic_block.cpp
branches/dataflow/src/optimize/Basic_block.h
branches/dataflow/src/optimize/CFG.cpp
branches/dataflow/src/optimize/ssa/Dominance.h
Log:
Convert std::lists to Lists, using the recent change from trunk (not merged
using svnmerge, but it should be fine).
Modified: branches/dataflow/src/lib/AttrMap.h
==============================================================================
--- branches/dataflow/src/lib/AttrMap.h (original)
+++ branches/dataflow/src/lib/AttrMap.h Sun Oct 26 14:18:03 2008
@@ -36,6 +36,7 @@
public:
void erase_with_prefix (std::string key_prefix);
+public:
AttrMap* clone();
void clone_all_from(AttrMap* other);
};
Modified: branches/dataflow/src/lib/List.h
==============================================================================
--- branches/dataflow/src/lib/List.h (original)
+++ branches/dataflow/src/lib/List.h Sun Oct 26 14:18:03 2008
@@ -12,6 +12,30 @@
#include "lib/Object.h"
#include "process_ir/Foreach.h"
+// XXX HACK
+/* The implementation of List requires a clone() method, because it was
+ * originally designed for the maketea derived clone() methods. But we
want to
+ * use List instead of std::list to make sure garbage collection is used
+ * everywhere. This "hack" allows us to call Object::clone(), and fail if
+ * clone() is called for classes that don't support it (all other classes).
+ */
+template<Object*>
+Object* phc_clone (Object* object)
+{
+ if (object == NULL)
+ return NULL;
+
+ return object->clone ();
+}
+
+template<typename T>
+T phc_clone (T object)
+{
+ assert (0);
+}
+
+
+
template<typename _Tp, typename _Alloc = phc_allocator<_Tp> >
class List : public std::list<_Tp, _Alloc>, virtual public Object
{
@@ -57,17 +81,14 @@
// shallow copy (or call a copy-constructor, which?) if not. I think that
// checking for a clonable trait of _Tp might do that (involves adding
such
// a trait to Object, which is OK).
+ //
List* clone()
{
List* result = new List<_Tp, _Alloc>;
- typename List<_Tp, _Alloc>::const_iterator i;
- for(i = begin(); i != end(); i++)
+ foreach (_Tp elem, *this)
{
- if(*i)
- result->push_back((*i)->clone());
- else
- result->push_back(NULL);
+ result->push_back (phc_clone (elem));
}
return result;
Modified: branches/dataflow/src/lib/error.h
==============================================================================
--- branches/dataflow/src/lib/error.h (original)
+++ branches/dataflow/src/lib/error.h Sun Oct 26 14:18:03 2008
@@ -9,7 +9,6 @@
#define PHC_ERROR_H
#include <stdarg.h>
-#include <stddef.h>
class String;
Modified: branches/dataflow/src/optimize/Basic_block.cpp
==============================================================================
--- branches/dataflow/src/optimize/Basic_block.cpp (original)
+++ branches/dataflow/src/optimize/Basic_block.cpp Sun Oct 26 14:18:03 2008
@@ -18,7 +18,7 @@
{
phi_lhss = new VARIABLE_NAME_list;
mus = new VARIABLE_NAME_list;
- chis = new list<pair<MIR::VARIABLE_NAME*, MIR::VARIABLE_NAME*> >;
+ chis = new List<pair<MIR::VARIABLE_NAME*, MIR::VARIABLE_NAME*> >;
}
Branch_block::Branch_block (CFG* cfg, MIR::Branch* b)
@@ -50,10 +50,10 @@
{
}
-list<pair<String*,String*> >*
+List<pair<String*,String*> >*
Basic_block::get_graphviz_properties ()
{
- list<pair<String*,String*> >* result = new list<pair<String*,String*> >;
+ List<pair<String*,String*> >* result = new List<pair<String*,String*> >;
result->push_back (make_pair (s("shape"), s("box")));
return result;
}
@@ -100,10 +100,10 @@
return s(ss.str());
}
-list<pair<String*,String*> >*
+List<pair<String*,String*> >*
Branch_block::get_graphviz_properties ()
{
- list<pair<String*,String*> >* result =
+ List<pair<String*,String*> >* result =
Basic_block::get_graphviz_properties ();
result->push_back (make_pair (s("shape"), s("diamond")));
@@ -112,10 +112,10 @@
}
-list<pair<String*,String_list> >*
+List<pair<String*,String_list> >*
Basic_block::get_graphviz_bb_properties ()
{
- list<pair<String*,String_list> >* result = new
list<pair<String*,String_list> >;
+ List<pair<String*,String_list> >* result = new
List<pair<String*,String_list> >;
// if (defs)
// result->push_back (pair<String*, Set*> (s("defs"), defs));
// if (uses)
@@ -125,10 +125,10 @@
return result;
}
-list<pair<String*,String_list> >*
+List<pair<String*,String_list> >*
Basic_block::get_graphviz_head_properties ()
{
- list<pair<String*,String_list> >* result = new
list<pair<String*,String_list> >;
+ List<pair<String*,String_list> >* result = new
List<pair<String*,String_list> >;
// Phi nodes
foreach (VARIABLE_NAME* phi_lhs, *get_phi_lhss ())
{
@@ -177,10 +177,10 @@
return result;
}
-list<pair<String*,String_list> >*
+List<pair<String*,String_list> >*
Basic_block::get_graphviz_tail_properties ()
{
- list<pair<String*,String_list> >* result = new
list<pair<String*,String_list> >;
+ List<pair<String*,String_list> >* result = new
List<pair<String*,String_list> >;
// Add chis:
VARIABLE_NAME* lhs;
Modified: branches/dataflow/src/optimize/Basic_block.h
==============================================================================
--- branches/dataflow/src/optimize/Basic_block.h (original)
+++ branches/dataflow/src/optimize/Basic_block.h Sun Oct 26 14:18:03 2008
@@ -36,12 +36,12 @@
// Override if there are extra properties for this block.
// Returns a list of (name,value) pairs
- virtual std::list<std::pair<String*,String*> >* get_graphviz_properties
();
+ virtual List<std::pair<String*,String*> >* get_graphviz_properties ();
// Returns a list of (name, list[values]) pairs
- virtual std::list<std::pair<String*,String_list> >*
get_graphviz_bb_properties ();
- virtual std::list<std::pair<String*,String_list> >*
get_graphviz_head_properties ();
- virtual std::list<std::pair<String*,String_list> >*
get_graphviz_tail_properties ();
+ virtual List<std::pair<String*,String_list> >* get_graphviz_bb_properties
();
+ virtual List<std::pair<String*,String_list> >*
get_graphviz_head_properties ();
+ virtual List<std::pair<String*,String_list> >*
get_graphviz_tail_properties ();
public:
/*
@@ -139,7 +139,7 @@
// arguments in edges. Then they can be updated all-at-once.
MIR::VARIABLE_NAME_list* phi_lhss;
MIR::VARIABLE_NAME_list* mus;
- std::list<std::pair<MIR::VARIABLE_NAME*, MIR::VARIABLE_NAME*> >* chis;
+ List<std::pair<MIR::VARIABLE_NAME*, MIR::VARIABLE_NAME*> >* chis;
public:
/*
@@ -198,7 +198,7 @@
* Graphviz
*/
String* get_graphviz_label ();
- std::list<std::pair<String*,String*> >* get_graphviz_properties ();
+ List<std::pair<String*,String*> >* get_graphviz_properties ();
// Assert a block has a two successors, representing true and false
// branches, and return the true branch.
Modified: branches/dataflow/src/optimize/CFG.cpp
==============================================================================
--- branches/dataflow/src/optimize/CFG.cpp (original)
+++ branches/dataflow/src/optimize/CFG.cpp Sun Oct 26 14:18:03 2008
@@ -290,7 +290,7 @@
}
#define LINE_LENGTH 30
- static String* unparse_properties (list<pair<String*, String_list> >*
properties)
+ static String* unparse_properties (List<pair<String*, String_list> >*
properties)
{
stringstream ss;
pair<String*, String_list> props;
Modified: branches/dataflow/src/optimize/ssa/Dominance.h
==============================================================================
--- branches/dataflow/src/optimize/ssa/Dominance.h (original)
+++ branches/dataflow/src/optimize/ssa/Dominance.h Sun Oct 26 14:18:03 2008
@@ -14,10 +14,10 @@
// invalidating the dominance information.
// Forward dominance frontier
- Map <vertex_t, std::list<vertex_t> > df;
+ Map <vertex_t, List<vertex_t> > df;
// BB -> blocks dominated by BB
- Map <vertex_t, std::list<vertex_t> > idominated;
+ Map <vertex_t, List<vertex_t> > idominated;
// BB -> BB's dominator
Map <vertex_t, vertex_t> idominator;
More information about the phc-internals
mailing list