initStdTable method
void
initStdTable()
Implementation
void initStdTable() {
defGlobal(
LuaObject.table('table', {
'insert':
LuaFuncBuilder.create('insert')
.arg('t')
.arg('position')
.arg('value', optional: true)
.exec(
call: () {
LuaObject? tableData = findVar('t');
if ((tableData?.isNil ?? true) || tableData!.isNotTable) {
throw 'Expected table argument "t" for "${context!.id}".';
}
LuaObject? value = findVar('value');
int? position;
if (value?.isNil ?? true) {
value = findVar('position');
// Insert a nil value is a noop
if (value == null) {
return LuaObject.nil('ret');
}
} else {
final pos = findVar('position');
position = pos?.valueAsInt();
if ((pos?.isNil ?? true) || position == null) {
throw 'Expected integer "position" for "${context!.id}".';
}
}
final int sz = tableData.tableSize;
final int next = (position ?? sz) + 1;
if (tableData.tableInsert(next, value!) == null) {
throw 'Index out of bounds: $next with bounds of $sz.';
}
},
)
..doc = LuaDoc(
category: 'Runtime',
html: '''
Inserts <code>value</code> into table <code>t</code> at <code>position</code>.<br/>
<br/>
If only two arguments are given, then the second argument becomes <code>value</code>
and the <code>position</code> is determined to be the front of the table <code>t</code>.<br/>
This is convenient to write stacks in lua.
<pre><code class="language-lua">local t = {}
table.insert(t, 1, "foo")
-- is the same as
table.insert(t, "foo")
</code></pre>
''',
),
'remove': LuaFuncBuilder.create('remove')
.arg('tableData')
.arg('position')
.exec(
call: () {
LuaObject? tableData = findVar('tableData');
if ((tableData?.isNil ?? true) || tableData!.isNotTable) {
throw 'Expected table argument "tableData" for "${context!.id}".';
}
int? position = findVar('value')?.valueAsInt();
if (position == null) {
throw 'Expected integer "position" for "${context!.id}".';
}
return tableData.tableRemove(position);
},
),
}),
).doc = LuaDoc(
category: 'Runtime',
html: '''
Tables are to lua what classes are to other modern programming languages.<br/>
They can also be used as lists.
''',
);
}