make kiss implement write output to a log

This commit is contained in:
2021-10-12 13:08:43 -06:00
parent 007b635e5c
commit 2b26b94edf
2 changed files with 28 additions and 5 deletions

View File

@@ -792,6 +792,13 @@ class Macros {
// Maybe the NEW wildest code in Kiss?
macros["#extern"] = (wholeExp:ReaderExp, exps:Array<ReaderExp>, k:KissState) -> {
wholeExp.checkNumArgs(4, null, "(#extern <BodyType> <lang> <?compileArgs object> [<typed bindings...>] <body...>)");
var b = wholeExp.expBuilder();
// Skip all extern code generation if -D null-extern is provided to the compiler
if (Context.defined("null-extern")) {
return b.symbol("null");
}
var bodyType = exps.shift();
var langExp = exps.shift();
@@ -834,9 +841,6 @@ class Macros {
{};
}
var b = wholeExp.expBuilder();
// TODO generate tink_json writers and parsers for this
var bindingList = bindingListExp.bindingList("#extern", true);
var idx = 0;

View File

@@ -37,7 +37,7 @@ class Main {
// kiss implement [type] [fromLib]
var _pwd = args.pop();
var theInterface = args.shift();
var pArgs = ["build-scripts/common-args.hxml", "-lib", "kiss"];
var pArgs = ["-D", "null-extern", "build-scripts/common-args.hxml", "-lib", "kiss"];
// pass --lib and the lib containing the interface as specified
if (args.length > 0) {
pArgs = pArgs.concat(["-lib", args.shift()]);
@@ -175,10 +175,29 @@ class Main {
#end
}
// edge cases for this:
// TODO interfaces that extend other interfaces
// TODO generic interfaces
// TODO this could be useful for typedefs as well
// TODO merging a generated implementation with a Kiss file that already has some functions implemented
static function implement(theInterface:String) {
// This runs in a subprocess whose stdout output can only be read all at once,
// so re-implement trace to write to a file:
haxe.Log.trace = (v, ?infos) -> {
File.saveContent("implementLog.txt", "");
File.saveContent("implementLog.txt", File.getContent("implementLog.txt") + "\n" + Std.string(v));
v;
}
#if macro
var type = Context.resolveType(Helpers.parseComplexType(theInterface), Context.currentPos());
trace(type);
switch (type) {
case TInst(classTypeRef, params):
var classType = classTypeRef.get();
var fields = classType.fields.get();
trace(fields);
default:
throw 'Unexpected result from resolveType of $theInterface';
}
#end
}
}