Compare commits

..

No commits in common. "master" and "v3.9.0" have entirely different histories.

4 changed files with 15 additions and 83 deletions

View File

@ -1,8 +0,0 @@
## v3.10.0
- Adding validation of type refs pointing to named functions
## v3.9.0
- Starting to experiment with new metagen parser v2.0a
## v3.8.0
- Adding initial support for service type

View File

@ -54,9 +54,7 @@ class mtgTypeRef implements mtgType
while(sizeof(self::$unresolved) > 0)
{
$ref = array_shift(self::$unresolved);
$resolved = $ref->resolve();
if($resolved instanceof mtgMetaFunc && $resolved->getName())
throw new Exception("Invalid resolving of named function as type: " . $resolved->getName() . " at " . $ref->origin);
$ref->resolve();
}
}
@ -305,11 +303,6 @@ class mtgMetaStruct extends mtgUserType
throw new Exception("{$this->origin} : Duplicate interface reference '{$imp->getName()}'");
$s->attach($imp);
}
foreach($this->funcs as $func)
{
$func->validate($meta);
}
}
function getParent()
@ -463,8 +456,7 @@ class mtgMetaFunc extends mtgMetaUnit implements mtgType
$this->name = $name;
}
function validate(mtgMetaInfo $meta)
{}
function validate(mtgMetaInfo $meta) {}
function getMetaId()
{
@ -586,7 +578,6 @@ class mtgMetaService extends mtgMetaUnit implements mtgScope
private $name;
private $parent_scope;
private $rpcs = array();
private $events = array();
private $user_types = array();
function __construct($name, mtgScope $parent_scope, array $tokens = array())
@ -616,7 +607,7 @@ class mtgMetaService extends mtgMetaUnit implements mtgScope
return $this->parent_scope->findSymbol($name);
}
function getRPCs() : array
function getRPCs()
{
return $this->rpcs;
}
@ -647,14 +638,14 @@ class mtgMetaService extends mtgMetaUnit implements mtgScope
return $this->rpcs[$name];
}
function getUserTypes() : array
function getUserTypes()
{
return $this->user_types;
}
function addUserType(mtgUserType $utype)
{
if($this->hasRPC($utype->getName()) || $this->hasUserType($utype->getName()))
if($this->hasRPC($utype->getName()))
throw new Exception("Service '{$this->name}' already has type '{$utype->getName()}'");
$this->user_types[$utype->getName()] = $utype;
@ -672,17 +663,6 @@ class mtgMetaService extends mtgMetaUnit implements mtgScope
return $this->user_types[$name];
}
function addEvent(mtgMetaStruct $evt)
{
$this->events[] = $evt;
$this->addUserType($evt);
}
function getEvents() : array
{
return $this->events;
}
function getClassId()
{
if($this->hasToken('class_id'))
@ -914,7 +894,6 @@ class mtgMetaField
{
return $this->hasToken($name) ? $this->tokens[$name] : null;
}
}
class mtgMetaPacket extends mtgMetaStruct

View File

@ -54,7 +54,7 @@ class mtgMetaParsedModule implements mtgScope
}
}
function mtg_parse_meta(array $meta_srcs, $valid_tokens = null, $inc_path = null, $version = null, string $extension = '.meta')
function mtg_parse_meta(array $meta_srcs, $valid_tokens = null, $inc_path = null, $version = null)
{
if($inc_path === null)
{
@ -91,7 +91,7 @@ function mtg_parse_meta(array $meta_srcs, $valid_tokens = null, $inc_path = null
$meta = new mtgMetaInfo();
foreach($meta_srcs as $src)
mtg_load_meta($meta, $meta_parser, $src, $extension);
mtg_load_meta($meta, $meta_parser, $src);
$meta->validate();
@ -100,21 +100,18 @@ function mtg_parse_meta(array $meta_srcs, $valid_tokens = null, $inc_path = null
return $meta;
}
function mtg_load_meta(
mtgMetaInfo $meta, mtgIMetaInfoParser $meta_parser,
string $dir_or_file, string $extension = '.meta'
)
function mtg_load_meta(mtgMetaInfo $meta, mtgIMetaInfoParser $meta_parser, string $dir_or_file)
{
$files = mtg_resolve_files($dir_or_file, $extension);
$files = mtg_resolve_files($dir_or_file);
foreach($files as $file)
$meta_parser->parse($meta, $file);
}
function mtg_resolve_files(string $dir_or_file, string $extension = '.meta') : array
function mtg_resolve_files(string $dir_or_file) : array
{
$files = array();
if(is_dir($dir_or_file))
$files = mtg_find_meta_files($dir_or_file, $extension);
$files = mtg_find_meta_files($dir_or_file);
else if(is_file($dir_or_file))
$files[] = $dir_or_file;
else
@ -122,7 +119,7 @@ function mtg_resolve_files(string $dir_or_file, string $extension = '.meta') : a
return $files;
}
function mtg_find_meta_files($dir, $extension = '.meta')
function mtg_find_meta_files($dir)
{
$items = scandir($dir);
if($items === false)
@ -134,7 +131,7 @@ function mtg_find_meta_files($dir, $extension = '.meta')
if($item[0] == '.')
continue;
if(strpos($item, $extension) !== (strlen($item)-strlen($extension)))
if(strpos($item, ".meta") !== (strlen($item)-5))
continue;
$file = $dir . '/' . $item;

View File

@ -31,7 +31,6 @@ class mtgMetaInfoParser2 implements mtgIMetaInfoParser
const T_bool = 1030;
const T_blob = 1031;
const T_Service = 1032;
const T_Event = 1033;
const T_MaxType = 1034; //built-in types end mark
private array $config = array();
@ -96,7 +95,6 @@ class mtgMetaInfoParser2 implements mtgIMetaInfoParser
"extends" => self::T_Extends,
"implements" => self::T_Implements,
"func" => self::T_Func,
"event" => self::T_Event,
];
$this->T2descr = array_flip($this->symbol2T);
@ -115,7 +113,6 @@ class mtgMetaInfoParser2 implements mtgIMetaInfoParser
$this->T2descr[self::T_Extends] = '<extends>';
$this->T2descr[self::T_Implements] = '<implements>';
$this->T2descr[self::T_Func] = '<func>';
$this->T2descr[self::T_Event] = '<Event>';
}
private static function _addDefaultTokens(array &$config)
@ -358,7 +355,7 @@ class mtgMetaInfoParser2 implements mtgIMetaInfoParser
return $values;
}
private function _parseEnum($is_global = true) : mtgMetaEnum
private function _parseEnum($is_global = true)
{
$this->_nextT();
$name = $this->_parseDotName();
@ -577,37 +574,6 @@ class mtgMetaInfoParser2 implements mtgIMetaInfoParser
$this->_addUnit(new mtgMetaInfoUnit($this->module, $fn));
}
private function _parseEvent() : mtgMetaStruct
{
$this->_nextT();
$struct_origin = new mtgOrigin($this->file, $this->line);
$name = $this->_parseDotName();
$this->_checkThenNext(ord('{'));
$s = new mtgMetaStruct($name, array(), null, array(), array());
$s->setOrigin($struct_origin);
$tokens = $this->shared_tokens;
if($this->T == self::T_Prop)
$tokens = array_merge($tokens, $this->_parsePropTokens());
$s->setTokens($tokens);
$flds = $this->_parseFields(
function()
{
if($this->_nextIf(ord('}')))
return true;
if($this->_nextIf(self::T_Func))
$this->_error("Events don't support functions");
}
);
foreach($flds as $fld)
$s->addField($fld);
return $s;
}
private function _parseStruct()
{
$this->_nextT();
@ -694,7 +660,7 @@ class mtgMetaInfoParser2 implements mtgIMetaInfoParser
$this->_nextT();
}
private function _parseRPC($is_global = true) : mtgMetaRPC
private function _parseRPC($is_global = true)
{
$this->_nextT();
$code = $this->T_value;
@ -753,8 +719,6 @@ class mtgMetaInfoParser2 implements mtgIMetaInfoParser
$service->addRPC($this->_parseRPC(false));
else if($this->T == self::T_Enum)
$service->addUserType($this->_parseEnum(false));
else if($this->T == self::T_Event)
$service->addEvent($this->_parseEvent());
else
$this->_error("Unsupported type");
}