243 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
		
		
			
		
	
	
			243 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
|  | /* | ||
|  |  * Copyright (C)2005-2019 Haxe Foundation | ||
|  |  * | ||
|  |  * Permission is hereby granted, free of charge, to any person obtaining a | ||
|  |  * copy of this software and associated documentation files (the "Software"), | ||
|  |  * to deal in the Software without restriction, including without limitation | ||
|  |  * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
|  |  * and/or sell copies of the Software, and to permit persons to whom the | ||
|  |  * Software is furnished to do so, subject to the following conditions: | ||
|  |  * | ||
|  |  * The above copyright notice and this permission notice shall be included in | ||
|  |  * all copies or substantial portions of the Software. | ||
|  |  * | ||
|  |  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
|  |  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
|  |  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
|  |  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
|  |  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | ||
|  |  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | ||
|  |  * DEALINGS IN THE SOFTWARE. | ||
|  |  */ | ||
|  | 
 | ||
|  | package lua; | ||
|  | 
 | ||
|  | import haxe.extern.Rest; | ||
|  | import haxe.Constraints.Function; | ||
|  | import haxe.extern.Rest; | ||
|  | 
 | ||
|  | /** | ||
|  | 	These are all global static methods within Lua. | ||
|  | **/ | ||
|  | @:native("_G") | ||
|  | extern class Lua { | ||
|  | 	/** | ||
|  | 		A global variable that holds a string containing the current interpreter | ||
|  | 		version. | ||
|  | 	**/ | ||
|  | 	static var _VERSION:String; | ||
|  | 
 | ||
|  | 	static var arg:Table<Int, String>; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		Pushes onto the stack the metatable in the registry. | ||
|  | 	**/ | ||
|  | 	static function getmetatable(tbl:Table<Dynamic, Dynamic>):Table<Dynamic, Dynamic>; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		Pops a table from the stack and sets it as the new metatable for the value | ||
|  | 		at the given acceptable index. | ||
|  | 	**/ | ||
|  | 	static function setmetatable(tbl:Table<Dynamic, Dynamic>, mtbl:Table<Dynamic, Dynamic>):Table<Dynamic, Dynamic>; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		Pops a table from the stack and sets it as the new environment for the value | ||
|  | 		at the given index. If the value at the given index is neither a function nor | ||
|  | 		a thread nor a userdata, lua_setfenv returns `0`. | ||
|  | 		Otherwise it returns `1`. | ||
|  | 	**/ | ||
|  | 	static function setfenv(i:Int, tbl:Table<Dynamic, Dynamic>):Void; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		Allows a program to traverse all fields of a table. | ||
|  | 		Its first argument is a table and its second argument is an index in this | ||
|  | 		table. `next` returns the next index of the table and its associated value. | ||
|  | 		When `i` is `null`, `next` returns an initial index and its associated value. | ||
|  | 		When called with the last index, or with `null` in an empty table, `next` | ||
|  | 		returns `null`.  In particular, you can use `next(t)` to check whether a | ||
|  | 		table is empty. | ||
|  | 
 | ||
|  | 		The order in which the indices are enumerated is not specified, even for | ||
|  | 		numeric indices. (To traverse a table in numeric order, use a numerical for | ||
|  | 		or the `ipairs` function). | ||
|  | 
 | ||
|  | 		The behavior of next is undefined if, during the traversal, any value | ||
|  | 		to a non-existent field in the table is assigned. Existing fields may | ||
|  | 		however be modified. In particular, existing fields may be cleared. | ||
|  | 	**/ | ||
|  | 	static function next<K, V>(k:Table<K, V>, ?i:K):NextResult<K, V>; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		Receives an argument of any type and converts it to a string in a reasonable | ||
|  | 		format. | ||
|  | 
 | ||
|  | 		For complete control of how numbers are converted, use`NativeStringTools.format`. | ||
|  | 	**/ | ||
|  | 	static function tostring(v:Dynamic):String; | ||
|  | 
 | ||
|  | 	static function ipairs<K, V>(t:Table<K, V>):IPairsResult<K, V>; | ||
|  | 
 | ||
|  | 	static function pairs<K, V>(t:Table<K, V>):PairsResult<K, V>; | ||
|  | 
 | ||
|  | 	static function require(module:String):Dynamic; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		Converts the Lua value at the given acceptable base to `Int`. | ||
|  | 		The Lua value must be a number or a string convertible to a number, | ||
|  | 		otherwise `tonumber` returns `0`. | ||
|  | 	**/ | ||
|  | 	static function tonumber(str:String, ?base:Int):Int; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		Returns the Lua type of its only argument as a string. | ||
|  | 		The possible results of this function are: | ||
|  | 
 | ||
|  | 		* `"nil"` (a string, not the Lua value nil), | ||
|  | 		* `"number"` | ||
|  | 		* `"string"` | ||
|  | 		* `"boolean"` | ||
|  | 		* `"table"` | ||
|  | 		* `"function"` | ||
|  | 		* `"thread"` | ||
|  | 		* `"userdata"` | ||
|  | 	**/ | ||
|  | 	static function type(v:Dynamic):String; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		Receives any number of arguments, and prints their values to stdout, | ||
|  | 		using the tostring function to convert them to strings. | ||
|  | 		`print` is not intended for formatted output, but only as a quick way to show | ||
|  | 		a value, typically for debugging. | ||
|  | 
 | ||
|  | 		For complete control of how numbers are converted, use `NativeStringTools.format`. | ||
|  | 	**/ | ||
|  | 	static function print(v:haxe.extern.Rest<Dynamic>):Void; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		If `n` is a number, returns all arguments after argument number `n`. | ||
|  | 		Otherwise, `n` must be the string `"#"`, and select returns the total | ||
|  | 		number of extra arguments it received. | ||
|  | 	**/ | ||
|  | 	static function select(n:Dynamic, rest:Rest<Dynamic>):Dynamic; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		Gets the real value of `table[index]`, without invoking any metamethod. | ||
|  | 	**/ | ||
|  | 	static function rawget<K, V>(t:Table<K, V>, k:K):V; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		Sets the real value of `table[index]` to value, without invoking any metamethod. | ||
|  | 	**/ | ||
|  | 	static function rawset<K, V>(t:Table<K, V>, k:K, v:V):Void; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		This function is a generic interface to the garbage collector. | ||
|  | 		It performs different functions according to its first argument. | ||
|  | 	**/ | ||
|  | 	static function collectgarbage(opt:CollectGarbageOption, ?arg:Int):Int; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		Issues an error when the value of its argument `v` is `false` (i.e., `null` | ||
|  | 		or `false`) otherwise, returns all its arguments. message is an error message. | ||
|  | 		when absent, it defaults to "assertion failed!" | ||
|  | 	**/ | ||
|  | 	static function assert<T>(v:T, ?message:String):T; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		Loads and runs the given file. | ||
|  | 	**/ | ||
|  | 	static function dofile(filename:String):Void; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		Generates a Lua error. The error message (which can actually be a Lua value | ||
|  | 		of any type) must be on the stack top. This function does a long jump, | ||
|  | 		and therefore never returns. | ||
|  | 	**/ | ||
|  | 	static function error(message:String, ?level:Int):Void; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		Calls a function in protected mode. | ||
|  | 	**/ | ||
|  | 	static function pcall(f:Function, rest:Rest<Dynamic>):PCallResult; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		Returns `true` if the two values in acceptable indices `v1` and `v2` are | ||
|  | 		primitively equal (that is, without calling metamethods). | ||
|  | 		Otherwise returns `false`. | ||
|  | 		Also returns `false` if any of the indices are non valid. | ||
|  | 	**/ | ||
|  | 	static function rawequal(v1:Dynamic, v2:Dynamic):Bool; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		This function is similar to pcall, except that you can set a new error | ||
|  | 		handler. | ||
|  | 	**/ | ||
|  | 	static function xpcall(f:Function, msgh:Function, rest:Rest<Dynamic>):PCallResult; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		Loads the chunk from file filename or from the standard input if no filename | ||
|  | 		is given. | ||
|  | 	**/ | ||
|  | 	static function loadfile(filename:String):LoadResult; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		Loads the chunk from given string. | ||
|  | 	**/ | ||
|  | 	static function load(code:haxe.extern.EitherType<String, Void->String>):LoadResult; | ||
|  | } | ||
|  | 
 | ||
|  | /** | ||
|  | 	Enum for describing garbage collection options | ||
|  | **/ | ||
|  | enum abstract CollectGarbageOption(String) { | ||
|  | 	var Stop = "stop"; | ||
|  | 	var Restart = "restart"; | ||
|  | 	var Collect = "collect"; | ||
|  | 	var Count = "count"; | ||
|  | 	var Step = "step"; | ||
|  | 	var SetPause = "setpause"; | ||
|  | 	var SetStepMul = "setstepmul"; | ||
|  | } | ||
|  | 
 | ||
|  | @:multiReturn | ||
|  | extern class PCallResult { | ||
|  | 	var status:Bool; | ||
|  | 	var value:Dynamic; | ||
|  | } | ||
|  | 
 | ||
|  | @:multiReturn | ||
|  | extern class NextResult<K, V> { | ||
|  | 	var index:K; | ||
|  | 	var value:V; | ||
|  | } | ||
|  | 
 | ||
|  | @:multiReturn | ||
|  | extern class IPairsResult<K, V> { | ||
|  | 	var next:Table<K, V>->Int->NextResult<Int, V>; | ||
|  | 	var table:Table<K, V>; | ||
|  | 	var index:Int; | ||
|  | } | ||
|  | 
 | ||
|  | @:multiReturn | ||
|  | extern class PairsResult<K, V> { | ||
|  | 	var next:Table<K, V>->K->NextResult<K, V>; | ||
|  | 	var table:Table<K, V>; | ||
|  | 	var index:K; | ||
|  | } | ||
|  | 
 | ||
|  | @:multiReturn | ||
|  | extern class LoadResult { | ||
|  | 	var func:Function; | ||
|  | 	var message:String; | ||
|  | } |