78 lines
1.4 KiB
PHP
78 lines
1.4 KiB
PHP
<?php
|
|
|
|
class mtgMetaFunc extends mtgMetaUnit implements mtgType
|
|
{
|
|
private string $name;
|
|
private $args = array();
|
|
private $ret_type;
|
|
|
|
function __construct($name)
|
|
{
|
|
$this->name = $name;
|
|
}
|
|
|
|
function validate(mtgMetaInfo $meta)
|
|
{}
|
|
|
|
function __toString()
|
|
{
|
|
$str = "func ";
|
|
|
|
$str .= $this->name.'(';
|
|
foreach($this->getArgs() as $arg)
|
|
$str .= $arg->getType() . ',';
|
|
$str = rtrim($str, ',');
|
|
$str .= ')';
|
|
if($ret_type = $this->getReturnType())
|
|
$str .= ':'.$ret_type;
|
|
return $str;
|
|
}
|
|
|
|
function setReturnType(mtgTypeRef $type)
|
|
{
|
|
$this->ret_type = $type;
|
|
}
|
|
|
|
function getReturnType() : ?mtgType
|
|
{
|
|
return $this->ret_type ? $this->ret_type->resolve() : null;
|
|
}
|
|
|
|
function getName() : string
|
|
{
|
|
return $this->name;
|
|
}
|
|
|
|
function getArgs()
|
|
{
|
|
return $this->args;
|
|
}
|
|
|
|
function setArgs(array $args)
|
|
{
|
|
foreach($args as $arg)
|
|
$this->addArg($arg);
|
|
}
|
|
|
|
function addArg(mtgMetaField $arg)
|
|
{
|
|
if($this->hasArg($arg->getName()))
|
|
throw new Exception("Func '{$this->name}' already has arg '{$arg->getName()}'");
|
|
|
|
$this->args[$arg->getName()] = $arg;
|
|
}
|
|
|
|
function hasArg($name)
|
|
{
|
|
return isset($this->args[$name]);
|
|
}
|
|
|
|
function getArg($name)
|
|
{
|
|
if(!isset($this->args[$name]))
|
|
throw new Exception("No such arg '$name'");
|
|
return $this->args[$name];
|
|
}
|
|
}
|
|
|