From 537fb688fe12b04df433da95e8a68f0b89d70ebd Mon Sep 17 00:00:00 2001
From: Ludovic Pouzenc <ludovic@pouzenc.fr>
Date: Fri, 3 Aug 2012 19:15:04 +0000
Subject: Parsing du code applicatif. Fractorisé avec le parsing du code du
 Framework, ajout d'un pruning pour les batteries de tests de CakePHP
 lui-même.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

git-svn-id: file:///var/svn/2012-php-weave/trunk@14 d972a294-176a-4cf9-8ea1-fcd5b0c30f5c
---
 .../src/php-weave/abstract_weaver.class.php         | 21 ++++++++++++++++++---
 1 file changed, 18 insertions(+), 3 deletions(-)

(limited to 'poc/poc02-compiling-cake/src/php-weave/abstract_weaver.class.php')

diff --git a/poc/poc02-compiling-cake/src/php-weave/abstract_weaver.class.php b/poc/poc02-compiling-cake/src/php-weave/abstract_weaver.class.php
index 1bc7bce..117324d 100644
--- a/poc/poc02-compiling-cake/src/php-weave/abstract_weaver.class.php
+++ b/poc/poc02-compiling-cake/src/php-weave/abstract_weaver.class.php
@@ -120,14 +120,14 @@ abstract class AbstractWeaver {
 					if ($k instanceof PHPParser_Node_Scalar_String && $v instanceof PHPParser_Node_Scalar_String) {
 						$k=$k->value;
 						$v=$v->value;
-						dbg(0,"Found '$k' => '$v'");
+//						dbg(0,"Found '$k' => '$v'");
 						$constants[$k]=$v;
 					}
 				} else {
-					dbg(0,"Skipped funcall: " . $this->prettyPrinter->prettyPrint(array($stmt)));
+//					dbg(0,"Skipped funcall: " . $this->prettyPrinter->prettyPrint(array($stmt)));
 				}
 			} else {
-				dbg(0,"Skipped : " . get_class($stmt));
+//				dbg(0,"Skipped : " . get_class($stmt));
 			}
 		}
 		return $constants;
@@ -247,6 +247,21 @@ abstract class AbstractWeaver {
 		return $found;
 	}
 
+	public function parseAndCacheSourceTree($sourcetree_path, $cache_path, $regexMatch, $regexPrune, $env, $traverser=null) {
+		$filelist=$this->findAllFiles($sourcetree_path, $regexMatch, $regexPrune);
+		foreach ($filelist as $f) {
+			$cache_filepath=$cache_path . "/" . sha1($f) . "-" . substr(sha1(print_r($env,true)),-8,8) . ".ast";
+			// If the cache is already up to date, skip parsing
+			if ( $stat_cache=@stat($cache_filepath) ) {
+				$stat_source=stat($f);
+				if ($stat_cache['mtime'] >= $stat_source['mtime'] ) continue;
+			}
+
+			$ast=$this->parseAndWalk($f, $traverser, $env);
+			$this->serializeAST($ast, $f, $cache_filepath);
+		}
+	}
+
 	// Framework specific code
 	abstract public function detectFramework($sourcetree_rootpath);
 	abstract public function parseFrameworkConfig($fw_props);
-- 
cgit v1.2.3