initStdPrint method

void initStdPrint({
  1. StdPrintCallback? impl,
})

Implementation

void initStdPrint({StdPrintCallback? impl}) {
  final token = Token.synthesized('print');
  final defPrint = FuncExpr.named(
    token,
    body: [],
    args: [DeclArg(Token.synthesized('...', type: TokenType.kSpread))],
    idParts: [RawExpr(token)],
  );

  exec() {
    tostring(LuaObject e) {
      final mm = e.readMetatable('__tostring')?.as<LuaObject>();
      if (mm == null) {
        return e.toString();
      }
      return callLuaFunction(mm, args: [e]).unpack();
    }

    impl?.call(findVarArgs()?.map(tostring).join(' ') ?? '');
  }

  defGlobal(LuaObject.func('print', defPrint, exec)).doc = LuaDoc(
    category: catRuntime,
    html: '''
        Converts a lua object to a string and then
        displays to console. See <a href="#tostring">tostring</a>.
        ''',
  );
}