<?php
namespace eMacros\Runtime\Environment;
use eMacros\Applicable;
use eMacros\Scope;
use eMacros\GenericList;
use eMacros\Symbol;
use eMacros\Runtime\PHPFunction;
class EnvironmentUse implements Applicable {
/**
* Imports a function into current environment
* Usage: (use utf8_decode) (use utf8_encode utf8enc)
* (non-PHPdoc)
* @see \eMacros\Applicable::apply()
*/
public function apply(Scope $scope, GenericList $arguments) {
foreach ($arguments as $name) {
if ($name instanceof Symbol) {
$func = $alias = $name->symbol;
}
elseif ($name instanceof GenericList) {
//obtain symbol pair
list($func, $alias) = $name;
if (!($func instanceof Symbol)) {
throw new \InvalidArgumentException(sprintf("Use: Expected symbol as first argument, %s found instead.", substr(strtolower(strstr(get_class($func), '\\')), 1)));
}
if (!($alias instanceof Symbol)) {
throw new \InvalidArgumentException(sprintf("Use: Expected symbol as second argument, %s found instead.", substr(strtolower(strstr(get_class($alias), '\\')), 1)));
}
$func = $func->symbol;
$alias = $alias->symbol;
}
else {
throw new \InvalidArgumentException(sprintf("Use: Unexpected %s %s as argument.", substr(strtolower(strstr(get_class($name), '\\')), 1), $name->__toString()));
}
if (!function_exists($func)) {
throw new \UnexpectedValueException("Use: Function $func not found.");
}
$scope->symbols[$alias] = new PHPFunction($func);
}
return null;
}
}
?>
|