typescript-to-lua
Version:
A generic TypeScript to Lua transpiler. Write your code in TypeScript and publish Lua!
47 lines • 3.11 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.transformConsoleCall = transformConsoleCall;
const ts = require("typescript");
const lua = require("../../LuaAST");
const diagnostics_1 = require("../utils/diagnostics");
const call_1 = require("../visitors/call");
const isStringFormatTemplate = (node) => ts.isStringLiteral(node) && node.text.includes("%");
function transformConsoleCall(context, node, calledMethod) {
const methodName = calledMethod.name.text;
const signature = context.checker.getResolvedSignature(node);
const parameters = (0, call_1.transformArguments)(context, node.arguments, signature);
switch (methodName) {
case "error":
case "info":
case "log":
case "warn":
if (node.arguments.length > 0 && isStringFormatTemplate(node.arguments[0])) {
// print(string.format([arguments]))
const stringFormatCall = lua.createCallExpression(lua.createTableIndexExpression(lua.createIdentifier("string"), lua.createStringLiteral("format")), parameters);
return lua.createCallExpression(lua.createIdentifier("print"), [stringFormatCall]);
}
// print([arguments])
return lua.createCallExpression(lua.createIdentifier("print"), parameters);
case "assert":
if (node.arguments.length > 1 && isStringFormatTemplate(node.arguments[1])) {
// assert([condition], string.format([arguments]))
const stringFormatCall = lua.createCallExpression(lua.createTableIndexExpression(lua.createIdentifier("string"), lua.createStringLiteral("format")), parameters.slice(1));
return lua.createCallExpression(lua.createIdentifier("assert"), [parameters[0], stringFormatCall]);
}
// assert()
return lua.createCallExpression(lua.createIdentifier("assert"), parameters);
case "trace":
if (node.arguments.length > 0 && isStringFormatTemplate(node.arguments[0])) {
// print(debug.traceback(string.format([arguments])))
const stringFormatCall = lua.createCallExpression(lua.createTableIndexExpression(lua.createIdentifier("string"), lua.createStringLiteral("format")), parameters);
const debugTracebackCall = lua.createCallExpression(lua.createTableIndexExpression(lua.createIdentifier("debug"), lua.createStringLiteral("traceback")), [stringFormatCall]);
return lua.createCallExpression(lua.createIdentifier("print"), [debugTracebackCall]);
}
// print(debug.traceback([arguments])))
const debugTracebackCall = lua.createCallExpression(lua.createTableIndexExpression(lua.createIdentifier("debug"), lua.createStringLiteral("traceback")), parameters);
return lua.createCallExpression(lua.createIdentifier("print"), [debugTracebackCall]);
default:
context.diagnostics.push((0, diagnostics_1.unsupportedProperty)(calledMethod.name, "console", methodName));
}
}
//# sourceMappingURL=console.js.map