Author: bernhard
Date: Mon Jan 26 05:03:41 2009
New Revision: 36027

Modified:
   trunk/languages/pipp/src/common/php_filesystem.pir

Log:
[Pipp] Fiddle with 'dirname'

Modified: trunk/languages/pipp/src/common/php_filesystem.pir
==============================================================================
--- trunk/languages/pipp/src/common/php_filesystem.pir  (original)
+++ trunk/languages/pipp/src/common/php_filesystem.pir  Mon Jan 26 05:03:41 2009
@@ -43,11 +43,51 @@
         $P0 = split '/', $S0
   L2:
 
-    $S0 = pop $P0
+    .local int last_nonempty_has_been_popped
+    last_nonempty_has_been_popped = 0
+
+    # _dumper(path)
+    # _dumper($P0)
+    # an absolute path gives at least two components
+    $I0 = elements $P0
+    if $I0 <= 1 goto return_pwd
+
+    # check for an absolute path
+    .local int    is_abs_path
+    is_abs_path = 0
+    $S0 = $P0[0]
+    ne $S0, '', abs_path
+        is_abs_path = 1
+  abs_path:
+  
+  pop_empty:
+    # pop empty path components
+    $I0 = elements $P0
+    if $I0 == 0 goto return_root_or_pwd
+        $S0 = $P0[-1]
+        ne $S0, '', check_already_popped
+        $S0 = pop $P0
+        goto pop_empty
+
+  check_already_popped:
+    if last_nonempty_has_been_popped goto return_join
+        $S0 = pop $P0   
+        last_nonempty_has_been_popped = 1
+        goto pop_empty
+
+  return_root_or_pwd:
+    if is_abs_path goto return_root
+    goto return_pwd
+
+  return_root:
+    .RETURN_STRING(slash)
+
+  return_pwd:
+    .RETURN_STRING('.')
+
+  return_join:
     $S0 = join slash_str, $P0
-    ne $S0, '', L3
-        $S0 = slash
-  L3:
+    eq $S0, '', return_root_or_pwd 
     .RETURN_STRING($S0)
 .end
 

Reply via email to