Changeset 13235

Show
Ignore:
Timestamp:
03/26/08 18:15:41 (10 months ago)
Author:
pottedmeat
Message:

Refs #5602. Clean up externalized variable calculations in executed functions

Location:
util/trunk/docscripts
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • util/trunk/docscripts/includes/dojo.inc

    r12999 r13235  
    327327 
    328328  foreach ($executions as $execution) { 
     329    $execution->removeSwallowedMixins($swallowed_mixins); 
    329330    $execution->rollOut($output); 
    330     $execution->removeSwallowedMixins($swallowed_mixins); 
    331331 
    332332    unset($execution); 
     
    341341    $is_prototype = false; 
    342342    if ($call->getParameter(0)->isA(DojoVariable) || $call->getParameter(0)->isA(DojoFunctionDeclare)) { 
    343       if ($call->getParameter(0)->isA(dojoVariable)) { 
     343      if ($call->getParameter(0)->isA(DojoVariable)) { 
    344344        $object = $call->getParameter(0)->getVariable(); 
    345345        if (strpos($object, '(') !== false) { 
  • util/trunk/docscripts/lib/parser/DojoFunctionBody.php

    r12919 r13235  
    279279 
    280280    foreach ($possible_mixins as $i => $mixin) { 
    281       $parameter = $mixin->getParameter(0); 
    282       if ($mixin->getName() == 'dojo.extend' && $parameter->isA(DojoFunctionDeclare)) { 
    283         $code = $this->package->getCode(); 
    284         $line = substr($code[$parameter->start[0]], 0, $parameter->start[1]); 
    285         $line = substr($line, 0, strrpos($line, $mixin->getName())); 
    286         preg_match_all('%(?:([a-zA-Z0-9_.$\s]+)\s*=\s*)+%', $line, $matches); 
    287         foreach ($matches[1] as $match) { 
    288           $match = trim($match); 
    289           if (!preg_match('%^var\s+%', $match)) { 
    290             $found = true; 
    291             while ($found) { 
    292               $found = false; 
    293               foreach ($internals as $internal_name => $external_name) { 
    294                 if ($internal_name == 'this') continue; 
    295                 if (strpos($match, $internal_name . '.') === 0) { 
    296                   $last = $match; 
    297                   $match = $external_name . substr($match, strlen($internal_name)); 
    298                   if ($last != $match) { 
    299                     $found = true; 
     281      if (($this->start[0] < $mixin->start[0] || ($this->start[0] == $mixin->start[0] && $this->start[1] < $mixin->start[1])) && 
     282          ($this->end[0] > $mixin->end[0] || ($this->end[0] == $mixin->end[0] && $this->end[1] > $mixin->end[1]))) { 
     283        $parameter = $mixin->getParameter(0); 
     284        if ($mixin->getName() == 'dojo.extend' && $parameter->isA(DojoFunctionDeclare)) { 
     285          $code = $this->package->getCode(); 
     286          $line = substr($code[$parameter->start[0]], 0, $parameter->start[1]); 
     287          $line = substr($line, 0, strrpos($line, $mixin->getName())); 
     288          preg_match_all('%(?:([a-zA-Z0-9_.$\s]+)\s*=\s*)+%', $line, $matches); 
     289          foreach ($matches[1] as $match) { 
     290            $match = trim($match); 
     291            if (!preg_match('%^var\s+%', $match)) { 
     292              $found = true; 
     293              while ($found) { 
     294                $found = false; 
     295                foreach ($internals as $internal_name => $external_name) { 
     296                  if ($internal_name == 'this') continue; 
     297                  if (strpos($match, $internal_name . '.') === 0) { 
     298                    $last = $match; 
     299                    $match = $external_name . substr($match, strlen($internal_name)); 
     300                    if ($last != $match) { 
     301                      $found = true; 
     302                    } 
    300303                  } 
    301304                } 
    302305              } 
    303             } 
    304             $parameter->getFunction()->setFunctionName($match); 
    305           } 
    306         } 
    307       } 
    308       elseif ($parameter->isA(DojoVariable)) { 
    309         $object = $parameter->getVariable(); 
    310         if ($object == "this") { 
    311           unset($possible_mixins[$i]); 
    312           continue; 
    313         } 
    314         if (($mixin->start[0] > $this->start[0] || ($mixin->start[0] == $this->start[0] && $mixin->start[1] > $this->start[1])) 
    315             && ($mixin->end[0] < $this->end[0] || ($mixin->end[0] == $this->end[0] && $mixin->end[1] < $this->end[1]))) { 
    316           if (array_key_exists($object, $internals)) { 
    317               unset($possible_mixins[$i]); 
    318           } 
    319           else { 
    320             foreach ($internals as $internal_name => $external_name) { 
    321               if (strpos($object, $internal_name . '.') === 0) { 
    322                 $object = $external_name . substr($object, strlen($internal_name)); 
     306              $parameter->getFunction()->setFunctionName($match); 
     307            } 
     308          } 
     309          $this->externalized_mixins[] = $mixin; 
     310        } 
     311        elseif ($parameter->isA(DojoVariable)) { 
     312          $object = $parameter->getVariable(); 
     313          if ($object == "this") { 
     314            unset($possible_mixins[$i]); 
     315          } 
     316          elseif (($mixin->start[0] > $this->start[0] || ($mixin->start[0] == $this->start[0] && $mixin->start[1] > $this->start[1])) 
     317              && ($mixin->end[0] < $this->end[0] || ($mixin->end[0] == $this->end[0] && $mixin->end[1] < $this->end[1]))) { 
     318            if (array_key_exists($object, $internals)) { 
     319                unset($possible_mixins[$i]); 
     320            } 
     321            else { 
     322              foreach ($internals as $internal_name => $external_name) { 
     323                if (strpos($object, $internal_name . '.') === 0) { 
     324                  $object = $external_name . substr($object, strlen($internal_name)); 
     325                } 
    323326              } 
    324             } 
    325  
    326             $parameter->setVariable($object); 
    327           } 
    328         } 
    329       } 
    330       else { 
    331         unset($possible_mixins[$i]); 
    332       } 
    333     } 
    334   } 
    335  
    336   public function getExternalizedObjects($function_name=false){ 
     327 
     328              $parameter->setVariable($object); 
     329            } 
     330          } 
     331          $this->externalized_mixins[] = $mixin; 
     332        } 
     333        else { 
     334          $this->externalized_mixins[] = $mixin; 
     335          array_splice($possible_mixins, $i--, 1); 
     336        } 
     337      } 
     338    } 
     339  } 
     340 
     341  public function getExternalizedObjects($function_name=false, $parameter_names=array()){ 
    337342    if ($this->externalized_objects) { 
    338343      return $this->externalized_objects; 
     
    341346    $this->build(); 
    342347    $lines = Text::chop($this->package->getCode(), $this->start[0], $this->start[1], $this->end[0], $this->end[1], true); 
     348    foreach ($this->externalized_mixins as $mixin) { 
     349      $lines = Text::blankOutAtPositions($lines, $mixin->start[0], $mixin->start[1], $mixin->end[0], $mixin->end[1]); 
     350    } 
    343351    $internals = $this->getLocalVariableNames(); 
    344352 
     
    373381          $name = $function_name . substr($name, 4); 
    374382        } 
     383 
     384        if (in_array($name, $parameter_names)) { 
     385          continue; 
     386        } 
     387 
    375388        $externalized_object->setName($name); 
    376389        $this->externalized_objects[] = $externalized_object; 
     
    448461  } 
    449462 
    450   public function getExternalizedAllVariableNames($function_name) { 
     463  public function getExternalizedAllVariableNames($function_name, $parameter_names=array()) { 
    451464    if ($this->externalized_avariables) { 
    452465      return $this->externalized_avariables; 
     
    463476    } 
    464477 
    465     $objects = $this->getExternalizedObjects(); 
     478    $objects = $this->getExternalizedObjects(false, $parameter_names); 
    466479    foreach ($objects as $object) { 
    467480      $object->build(); 
     
    525538      } 
    526539    } 
    527        
     540 
    528541    return $this->externalized_avariables = $variables; 
    529542  } 
    530543 
    531   public function getExternalizedInstanceVariableNames($function_name) { 
     544  public function getExternalizedInstanceVariableNames($function_name, $parameter_names=array()) { 
    532545    if ($this->externalized_ivariables) { 
    533546      return $this->externalized_ivariables; 
     
    536549    $ivariables = array(); 
    537550 
    538     $variables = $this->getExternalizedAllVariableNames($function_name); 
     551    $variables = $this->getExternalizedAllVariableNames($function_name, $parameter_names); 
    539552    foreach ($variables as $variable) { 
    540553      if (strpos($variable, 'this.') === 0) { 
     
    546559  } 
    547560 
    548   public function getExternalizedVariableNames($function_name) { 
     561  public function getExternalizedVariableNames($function_name, $parameter_names=array()) { 
    549562    if ($this->externalized_variables) { 
    550563      return $this->externalized_variables; 
     
    553566    $evariables = array(); 
    554567 
    555     $variables = $this->getExternalizedAllVariableNames($function_name); 
     568    $variables = $this->getExternalizedAllVariableNames($function_name, $parameter_names); 
    556569    foreach ($variables as $variable) { 
    557570      if (strpos($variable, 'this.') !== 0) { 
  • util/trunk/docscripts/lib/parser/DojoFunctionDeclare.php

    r12987 r13235  
    132132  } 
    133133 
    134   public function getVariableNames($function_name){ 
    135     return $this->body->getExternalizedVariableNames($function_name); 
     134  public function getVariableNames($function_name, $parameter_names=array()){ 
     135    return $this->body->getExternalizedVariableNames($function_name, $parameter_names); 
    136136  } 
    137137 
     
    141141 
    142142  public function getObjects(){ 
    143     return $this->body->getExternalizedObjects(); 
     143    return $this->body->getExternalizedObjects(false, $this->getParameterNames()); 
    144144  } 
    145145 
     
    325325      } 
    326326 
    327       $variables = $this->body->getExternalizedInstanceVariableNames($function_name); 
     327      $variables = $this->body->getExternalizedInstanceVariableNames($function_name, $this->getParameterNames()); 
    328328      foreach($variables as $variable) { 
    329329        $output[$function_name . '.' . $variable]['instance'] = $function_name; 
    330330      } 
    331331 
    332       $variables = $this->body->getExternalizedVariableNames($function_name); 
     332      $variables = $this->body->getExternalizedVariableNames($function_name, $this->getParameterNames()); 
    333333      foreach($variables as $variable) { 
    334334        list($first,) = explode('.', $variable, 2);