Add wrapper for onTypeNotFound to allow error reporting.
This commit is contained in:
@@ -29,4 +29,27 @@ class MacroApi {
|
||||
|
||||
static public function pos()
|
||||
return haxe.macro.Context.currentPos();
|
||||
|
||||
static public function onTypeNotFound(f:String->haxe.macro.Expr.TypeDefinition)
|
||||
haxe.macro.Context.onTypeNotFound(function (name:String) {
|
||||
@:privateAccess Positions.errorFunc = @:privateAccess Positions.abortTypeBuild;
|
||||
|
||||
var ret =
|
||||
try f(name)
|
||||
catch (abort:tink.macro.Positions.AbortBuild) {
|
||||
var cl = macro class {
|
||||
static var __error = ${Positions.errorExpr(abort.pos, abort.message)};
|
||||
}
|
||||
var path = name.split('.');
|
||||
cl.name = path.pop();
|
||||
cl.pack = path;
|
||||
cl.pos = abort.pos;
|
||||
cl;
|
||||
}
|
||||
|
||||
@:privateAccess Positions.errorFunc = @:privateAccess Positions.contextError;
|
||||
|
||||
return ret;
|
||||
});
|
||||
|
||||
}
|
@@ -30,8 +30,17 @@ class Positions {
|
||||
return Positions.error(pos, error);
|
||||
}, pos);
|
||||
|
||||
static public inline function error(pos:Position, error:Dynamic):Dynamic
|
||||
return Context.error(Std.string(error), sanitize(pos));
|
||||
|
||||
static public function error(pos:Position, error:Dynamic):Dynamic
|
||||
return errorFunc(sanitize(pos), Std.string(error));
|
||||
|
||||
static function contextError(pos:Position, error:String):Dynamic
|
||||
return Context.error(error, pos);
|
||||
|
||||
static function abortTypeBuild(pos:Position, error:String):Dynamic
|
||||
return throw new AbortBuild(error, pos);
|
||||
|
||||
static var errorFunc = contextError;
|
||||
|
||||
static public inline function warning<A>(pos:Position, warning:Dynamic, ?ret:A):A {
|
||||
Context.warning(Std.string(warning), pos);
|
||||
@@ -40,4 +49,7 @@ class Positions {
|
||||
|
||||
static public function makeFailure<A>(pos:Position, reason:String):Outcome<A, Error>
|
||||
return Failure(new Error(reason, pos));
|
||||
}
|
||||
|
||||
class AbortBuild extends tink.core.Error {
|
||||
}
|
Reference in New Issue
Block a user