Skip to content

Instantly share code, notes, and snippets.

@profelis
Last active December 19, 2015 17:38
Show Gist options
  • Save profelis/5992334 to your computer and use it in GitHub Desktop.
Save profelis/5992334 to your computer and use it in GitHub Desktop.
ClassField -> Field
function getField(field:ClassField):Field {
var typedExpr = field.expr();
var expr = typedExpr != null ? Context.getTypedExpr(typedExpr) : null;
var f = {
name: field.name,
doc: field.doc,
pos: field.pos,
meta: field.meta.get(),
kind: null,
access: []
};
f.kind = switch (field.kind) {
case FieldKind.FVar(read, write):
if (read == AccInline) {
f.access.push(AInline);
FieldType.FVar(null, expr);
} else if (read == AccNormal && write == AccNormal)
FieldType.FVar(null, expr);
else
FieldType.FProp(getAccess(read, true), getAccess(write, false), null, expr);
case FieldKind.FMethod(k):
switch (k) {
case MethInline: f.access.push(AInline);
case MethDynamic: f.access.push(ADynamic);
case MethMacro: f.access.push(AMacro);
case MethNormal:
}
FieldType.FFun(switch (expr.expr) {
case EFunction(name, f): f;
case _: throw "assert";
});
};
if (field.isPublic) f.access.push(APublic);
return f;
}
function getAccess(a:VarAccess, read:Bool):String {
return switch (a) {
case AccNever: "never";
case AccNo: "null";
case AccNormal: "default";
case AccCall: read ? "get" : "set";
case _: trace("! " + a); "default";
}
}
for (field in classType.fields.get())
var f = getField(field);
for (field in classType.statics.get()) {
var f = getField(field);
f.access.push(AStatic);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment