private boolean compileProcedures() { workspace.world.program(workspace.world.newProgram()); try { CompilerResults results = workspace .compiler() .compileProgram( proceduresInterface.innerSource(), workspace.world.newProgram(getGlobalVariableNames()), workspace.getExtensionManager()); workspace.setProcedures(results.proceduresMap()); for (Procedure procedure : workspace.getProcedures().values()) { if (procedure.fileName.equals("")) { procedure.setOwner(proceduresInterface); } else if (procedure.fileName.equals("aggregate")) { procedure.setOwner(workspace.aggregateManager()); } else { procedure.setOwner(new ExternalFileInterface(procedure.fileName)); } } workspace.init(); workspace.world.program(results.program()); new org.nlogo.window.Events.CompiledEvent(proceduresInterface, results.program(), null, null) .raise(this); return true; } catch (CompilerException error) { if (AbstractWorkspace.isApplet()) { System.err.println("CompilerException: " + error); error.printStackTrace(); new org.nlogo.window.Events.CompiledEvent(proceduresInterface, null, null, error) .raise(this); } if (error.fileName().equals("")) { new org.nlogo.window.Events.CompiledEvent(proceduresInterface, null, null, error) .raise(this); } else if (error.fileName().equals("aggregate")) { new org.nlogo.window.Events.CompiledEvent(workspace.aggregateManager(), null, null, error) .raise(this); } else { new org.nlogo.window.Events.CompiledEvent( new ExternalFileInterface(error.fileName()), null, null, error) .raise(this); } return false; } }