generate main functions for Kiss files

This commit is contained in:
2021-07-25 21:06:31 -06:00
parent b01a04b164
commit 81ca9ad020
3 changed files with 21 additions and 6 deletions

View File

@@ -160,12 +160,25 @@ class Kiss {
var topLevelBegin = load(kissFile, k);
if (topLevelBegin != null) {
// TODO this is where an error would be thrown, or main() would be generated from top-level expressions
// TODO There are two ideas for how to handle expressions at the top level of a Kiss file:
// 1. Throw an error, because the top level should only contain field definitions
// 2. Append the expression to the body of an automatically generated main() function
// if that result is non-null, try to make main (but this may cause a duplicate declaration)
// If no main function is defined manually, Kiss expressions at the top of a file will be put in a main function.
// If a main function IS defined, this will result in an error
if (k.fieldDict.exists("main")) {
throw CompileError.fromExp(topLevelBegin, '$kissFile has expressions outside of field definitions, but already defines its own main function.');
}
var b = topLevelBegin.expBuilder();
// This doesn't need to be added to the fieldDict because all code generation is done
k.fieldList.push({
name: "main",
access: [AStatic],
kind: FFun(Helpers.makeFunction(
b.symbol("main"),
false,
b.list([]),
[topLevelBegin],
k,
"function")),
pos: topLevelBegin.macroPos()
});
}
k.fieldList;

View File

@@ -134,6 +134,7 @@
(set lastConfigDir (joinPath (userHome) ".kiss-vscode" "lastActiveConfig"))
(tryLoadConfig)))
// Manually define main so it will exist when test is not defined:
(function :Void main []
(#when test
(set builtinConfigDir "config")

View File

@@ -1,3 +1,4 @@
#! /bin/bash
# Run the build without -D test first, to make sure it works that way too:
haxe build.hxml && haxe -D test build.hxml -cmd "node bin/extension.js"