 +              ');'
 +            );
 +          }
-+          $sig[$i].= '$'.$i;
++          $sig[$i]= '$'.$i;
 +        } else {
 +          $sig[$i]= '$'.$i;
 +        }

+    // Instantiate
+    if ($type->hasConstructor()) {
+      $args= func_get_args();
+      return $type->getConstructor()->newInstance(array_slice($args, 1));
+    } else {
+      return $type->newInstance();
+    }

+      $generic= array();
+      if ($routine->hasAnnotation('generic', 'params')) {
+        foreach (explode(',', $routine->getAnnotation('generic', 'params')) as $i => $placeholder) {
+          if ('' === ($replaced= strtr(ltrim($placeholder), $placeholders))) {
+            $generic[$i]= NULL;
+          } else {
+            $details[DETAIL_ARGUMENTS][$i]= $replaced;
+            $generic[$i]= Type::forName($replaced);
+          }
+        }
+      }
+      if ($routine->hasAnnotation('generic', 'return')) {
