diff --git a/packages/collections/pub/eadlist.php b/packages/collections/pub/eadlist.php
index 38f850c..0f6f285 100644
--- a/packages/collections/pub/eadlist.php
+++ b/packages/collections/pub/eadlist.php
@@ -36,7 +36,7 @@
{
?>
&templateset=ead&disabletheme=1&output='>
-
+ __getMixinClosure($MixinClass, 'initialize');
+
}
}
diff --git a/packages/core/lib/archonobject.inc.php b/packages/core/lib/archonobject.inc.php
index c1b3742..ec15d4a 100755
--- a/packages/core/lib/archonobject.inc.php
+++ b/packages/core/lib/archonobject.inc.php
@@ -10,20 +10,14 @@ public function callOverridden()
$args = func_get_args();
$MixinClass = prev($methodInfo->Classes);
- $arrStrArgs = array();
-
- for($i = 0; $i < count($args); $i++)
- {
- $arrStrArgs[] = "\$args[{$i}]";
- }
-
// Simulate mixing after.
if($_ARCHON->Mixins[get_class($this)]->Methods[$method]->Parameters[$MixinClass]->MixOrder == MIX_AFTER)
{
$prevresult = call_user_func_array(array($this, 'callOverridden'), $args);
}
- eval("\$result = {$MixinClass}::{$method}(" . implode(',', $arrStrArgs) . ");");
+ $closure = $this->__getMixinClosure($MixinClass, $method);
+ $result = call_user_func_array($closure->bindTo($this), $args);
// Simulate mixing before.
if($_ARCHON->Mixins[get_class($this)]->Methods[$method]->Parameters[$MixinClass]->MixOrder == MIX_BEFORE)
@@ -235,21 +229,14 @@ public function __call($method, $args)
$_ARCHON->Callstack[] = $stackmember;
$MixinClass = end(end($_ARCHON->Callstack)->Classes);
- $arrStrArgs = array();
-
- for($i = 0; $i < count($args); $i++)
- {
- $arrStrArgs[] = "\$args[{$i}]";
- }
-
// Simulate mixing after.
if($_ARCHON->Mixins[get_class($this)]->Methods[$method]->Parameters[$MixinClass]->MixOrder == MIX_AFTER)
{
$prevresult = call_user_func_array(array($this, 'callOverridden'), $args);
}
- eval("\$result = {$MixinClass}::{$method}(" . implode(',', $arrStrArgs) . ");");
- //$result = call_user_func_array(array(($MixinClass) $this, $method), $args);
+ $closure = $this->__getMixinClosure($MixinClass, $method);
+ $result = call_user_func_array($closure->bindTo($this), $args);
// Simulate mixing before.
if($_ARCHON->Mixins[get_class($this)]->Methods[$method]->Parameters[$MixinClass]->MixOrder == MIX_BEFORE)
@@ -308,5 +295,21 @@ public function __toString()
return get_class($this);
}
}
+
+
+ private function __getMixinClosure($MixinClass, $mixinMethod) {
+ $method = new ReflectionMethod($MixinClass, $mixinMethod);
+ $start = $method->getStartLine() - 1;
+ $length = $method->getEndLine() - $start;
+
+ $source = file($method->getFileName());
+ $method_body = implode("", array_slice($source, $start, $length));
+ $method_body = preg_replace("/$mixinMethod/", "", $method_body, 1);
+ $method_body = preg_replace("/public/", "", $method_body, 1);
+ eval('$closure = '.$method_body.';');
+
+ return $closure;
+ }
+
}
?>
diff --git a/packages/core/lib/querylog.inc.php b/packages/core/lib/querylog.inc.php
index 66c8a43..6930086 100755
--- a/packages/core/lib/querylog.inc.php
+++ b/packages/core/lib/querylog.inc.php
@@ -5,7 +5,7 @@ public function logQuery(&$DB, $Scope, $Message, $IsManip = NULL)
{
$this->QueryCount++;
- if($OutputQueries)
+ if($this->OutputQueries)
{
echo("\n\n$Message\n\n");
}