mediawiki-extensions-Scribunto/includes/engines/LuaCommon/LuaModule.php
Lucas Werkmeister (WMDE) 18d122b60d Revert "Namespace LuaCommon"
This reverts commit 62e1fb0b5f.

Reason for revert: caused several errors:
* unnamespaced HooksTest collides with core’s class of the same name
* Scribunto_LuaError renamed without class alias despite being used in Wikibase

Bug: T314464
Change-Id: I8b151327236bf86945e59823fba155497e4b3fc6
2022-08-03 10:03:12 +00:00

75 lines
1.8 KiB
PHP

<?php
use MediaWiki\Extension\Scribunto\ScribuntoException;
use MediaWiki\Extension\Scribunto\ScribuntoModuleBase;
class Scribunto_LuaModule extends ScribuntoModuleBase {
/**
* @var mixed
*/
protected $initChunk;
/**
* @var Scribunto_LuaEngine
*/
protected $engine;
/**
* @param Scribunto_LuaEngine $engine
* @param string $code
* @param string|bool $chunkName
*/
public function __construct( Scribunto_LuaEngine $engine, $code, $chunkName ) {
parent::__construct( $engine, $code, $chunkName );
}
public function validate() {
try {
$this->getInitChunk();
} catch ( ScribuntoException $e ) {
return $e->toStatus();
}
return Status::newGood();
}
/**
* Get the chunk which, when called, will return the export table.
* @return mixed
*/
public function getInitChunk() {
if ( !$this->initChunk ) {
$this->initChunk = $this->engine->getInterpreter()->loadString(
$this->code,
// Prepending an "=" to the chunk name avoids truncation or a "[string" prefix
'=' . $this->chunkName );
}
return $this->initChunk;
}
/**
* Invoke a function within the module. Return the expanded wikitext result.
*
* @param string $name
* @param PPFrame $frame
* @throws ScribuntoException
* @return string|null
*/
public function invoke( $name, $frame ) {
$ret = $this->engine->executeModule( $this->getInitChunk(), $name, $frame );
if ( !isset( $ret ) ) {
throw $this->engine->newException(
'scribunto-common-nosuchfunction', [ 'args' => [ $name ] ]
);
}
if ( !$this->engine->getInterpreter()->isLuaFunction( $ret ) ) {
throw $this->engine->newException(
'scribunto-common-notafunction', [ 'args' => [ $name ] ]
);
}
$result = $this->engine->executeFunctionChunk( $ret, $frame );
return $result[0] ?? null;
}
}