Skip to content

Commit ba0e037

Browse files
committed
Add rescue. Resolves #1 (hopefully).
Handle dynamic properly. Resolves #2.
1 parent 899b9cc commit ba0e037

File tree

2 files changed

+9
-4
lines changed

2 files changed

+9
-4
lines changed

src/tink/typecrawler/Crawler.hx

+6-3
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ class Crawler {
9797

9898
gen.array(genType(t, pos));
9999

100-
case TDynamic(t):
100+
case TDynamic(t) if (t != null):
101101

102102
gen.dyn(gen.dynAccess(genType(t, pos)), t.toComplex());
103103

@@ -152,10 +152,13 @@ class Crawler {
152152
});
153153
}
154154

155-
gen.enm(constructors, t.toComplex(), genType);
155+
gen.enm(constructors, t.toComplex(), pos, genType);
156156

157157
case v:
158-
pos.error(gen.reject(t));
158+
switch gen.rescue(t, pos, genType) {
159+
case None: pos.error(gen.reject(t));
160+
case Some(e): e;
161+
}
159162
}
160163

161164
function serializableFields(fields:Array<ClassField>):Array<FieldInfo> {

src/tink/typecrawler/Generator.hx

+3-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package tink.typecrawler;
33
import haxe.macro.Expr;
44
import haxe.macro.Type;
55
import tink.typecrawler.FieldInfo;
6+
import haxe.ds.Option;
67

78
typedef GenType = Type->Position->Expr;
89

@@ -20,7 +21,8 @@ typedef Generator = {
2021
function anon(fields:Array<FieldInfo>, ct:ComplexType):Function;
2122
function array(e:Expr):Expr;
2223
function map(k:Expr, v:Expr):Expr;
23-
function enm(constructors:Array<EnumConstructor>, ct:ComplexType, gen:GenType):Expr;
24+
function enm(constructors:Array<EnumConstructor>, ct:ComplexType, pos:Position, gen:GenType):Expr;
25+
function rescue(t:Type, pos:Position, gen:GenType):Option<Expr>;
2426
function reject(t:Type):String;
2527
}
2628

0 commit comments

Comments
 (0)