@Override public void resolve(Compiler compiler, FunctionSymbol currentFunction) { super.resolve(compiler, currentFunction); ObjectSymbol definingObject = getDefiningObject(); if (eventTargetName.equals(definingObject.getName())) { // Class initialization event handlers if (eventName.equals("Load")) { definingObject.setObjectLoadEventHandler(this); return; } else if (eventName.equals("Initialize")) { definingObject.setInstanceInitializeEventHandler(this); return; } } // Data member bound event handler Symbol symbol = definingObject.getScope().lookupShallow(eventTargetName); if (symbol == null) { compiler.error(getPosition(), Error.errUndefinedSymbol, eventTargetName); return; } if (!(symbol instanceof DataMemberSymbol)) { compiler.error(getPosition(), Error.errDataMemberExpected, eventTargetName); return; } DataMemberSymbol targetDataMember = (DataMemberSymbol) symbol; Type targetDataMemberType = targetDataMember.getType(); if (!targetDataMemberType.isObjectType()) { compiler.error(getPosition(), Error.errObjectTypeNeeded, targetDataMemberType.toString()); return; } targetDataMemberType.resolve(compiler); Scope scope = ((ObjectType) targetDataMemberType).getScope(); if (scope instanceof ErrorScope) { // Error already reported return; } Symbol event = ((ObjectScope) scope).lookupInObject(eventName); if (event == null || !(event instanceof EventSymbol)) { compiler.error(getPosition(), Error.errUndefinedSymbol, eventName); } }
public void emitSingleFunction(final FunctionSymbol sym) { System.out.println(sym); System.out.println(" -> " + sym.toString()); }