if args.arg:
        for arg in args.arg:
            k, v = arg.split('=', 2)
            sargs[k] = v
    parse_pos = lambda p: Rel(int(p[1:]) if p[1:] else 0) if p[0] == '~' else int(p)

    x, y, z = map(parse_pos, args.place_location.split(',', 3))

    if args.world_dir:
        world_dir = os.path.realpath(args.world_dir)
        writer = FunctionWriter(world_dir, args.namespace)
        if args.rem_existing:
            writer.empty_directory()
    else:
        writer = DummyWriter()

    session = Session((x, y, z), writer, args.namespace, stack_size=args.stack,
                      args=sargs, debug=args.debug)
    assembler.write_to_session(session)
    setup, cleanup = session.create_up_down_functions()
    print('Generated', writer.command_count, 'commands in',
          writer.func_count, 'functions')
    print('== Setup command ==')
    print ('/' + setup)
    print('== Cleanup command ==')
    print('/' + cleanup)

    if args.jump:
        print('== Jump to %s command ==' % args.jump)
        print('/' + assembler.get_sub_jump_command(args.jump).resolve(session.scope))