Expose target class.

This commit is contained in:
back2dos
2013-07-16 19:25:22 +02:00
parent 6fbdc9b57b
commit 4d9cb4cddd

View File

@@ -14,19 +14,19 @@ class ClassBuilder {
var memberList:Array<Member>; var memberList:Array<Member>;
var macros:Map<String,Field>; var macros:Map<String,Field>;
var constructor:Null<Constructor>; var constructor:Null<Constructor>;
var localClass:ClassType; public var target(default, null):ClassType;//TODO: this could be lazy
var superFields:Map<String,Bool>; var superFields:Map<String,Bool>;
public function new() { public function new() {
this.memberMap = new Map(); this.memberMap = new Map();
this.memberList = []; this.memberList = [];
this.macros = new Map(); this.macros = new Map();
this.localClass = Context.getLocalClass().get(); this.target = Context.getLocalClass().get();
switch (localClass.kind) { switch (target.kind) {
case KAbstractImpl(a): case KAbstractImpl(a):
//TODO: remove this whole workaround //TODO: remove this whole workaround
var meta = localClass.meta; var meta = target.meta;
for (tag in a.get().meta.get()) for (tag in a.get().meta.get())
if (!meta.has(tag.name)) if (!meta.has(tag.name))
meta.add(tag.name, tag.params, tag.pos); meta.add(tag.name, tag.params, tag.pos);
@@ -46,7 +46,7 @@ class ClassBuilder {
public function getConstructor():Constructor { public function getConstructor():Constructor {
if (constructor == null) if (constructor == null)
if (localClass.superClass != null && localClass.superClass.t.get().constructor != null) { if (target.superClass != null && target.superClass.t.get().constructor != null) {
try { try {
var ctor = Context.getLocalClass().get().superClass.t.get().constructor.get(); var ctor = Context.getLocalClass().get().superClass.t.get().constructor.get();
var func = Context.getTypedExpr(ctor.expr()).getFunction().sure(); var func = Context.getTypedExpr(ctor.expr()).getFunction().sure();
@@ -75,7 +75,7 @@ class ClassBuilder {
return this.constructor == null; return this.constructor == null;
public function export(?verbose):Array<Field> { public function export(?verbose):Array<Field> {
var ret = (constructor == null || localClass.isInterface) ? [] : [constructor.toHaxe()]; var ret = (constructor == null || target.isInterface) ? [] : [constructor.toHaxe()];
for (member in memberList) { for (member in memberList) {
if (member.isBound) if (member.isBound)
switch (member.kind) {//TODO: this seems like an awful place for a cleanup. If all else fails, this should go into a separate plugin (?) switch (member.kind) {//TODO: this seems like an awful place for a cleanup. If all else fails, this should go into a separate plugin (?)
@@ -101,12 +101,12 @@ class ClassBuilder {
public function hasOwnMember(name:String):Bool public function hasOwnMember(name:String):Bool
return return
macros.exists(name) || (memberMap.exists(name)); macros.exists(name) || memberMap.exists(name);
public function hasSuperField(name:String):Bool { public function hasSuperField(name:String):Bool {
if (superFields == null) { if (superFields == null) {
superFields = new Map(); superFields = new Map();
var cl = localClass.superClass; var cl = target.superClass;
while (cl != null) { while (cl != null) {
var c = cl.t.get(); var c = cl.t.get();
for (f in c.fields.get()) for (f in c.fields.get())