1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/jlutt-dyASMTop

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

dyASMTop

Введение

Данный набор инструментов предназначен для изучения байт-кода redkale и является производным от него.

Использование asm может быть затруднительным, поэтому этот jar-пакет представляет собой инструмент, который упаковывает asm и позволяет напрямую генерировать объекты байт-кода.

Подготовка комплексного примера JFish (https://gitee.com/jlutt/JFish).

Среда разработки

  • jdk1.8 + maven
  • встроенный asm в jdk + GeneratorAdapter

Журнал разработки

  • В большинстве случаев будет проводиться кодирование полного примера.
  • На данный момент pom передаётся на частный сервер, для компиляции его необходимо удалить.
  • 2018-01-15 — создание базового скелета кода, подготовка реализации команды, которая абстрагирует инструкции байт-кода.
  • 2018-01-15 — завершение методов arg для вызова параметров и call для вызова методов.
  • 2018-01-16 — завершение метода получения свойств поля field.
  • 2018-01-16 — завершено получение локальных временных переменных local.
  • 2018-01-16 — завершено определение метода let для создания временных переменных.
  • 2018-01-16 — завершено создание методов для вызова конструктора класса.
  • 2018-01-16 — завершено сравнение методов класса.
  • 2018-01-16 — завершены методы if...else.
  • 2018-01-16 — добавлена функциональность обратного вызова с помощью аннотаций.
  • 2018-01-17 — добавлены методы четырёх арифметических операций.
  • 2018-01-17 — добавлен метод callSuper, который может вызывать только методы mainClass.
  • 2018-01-17 — добавлен метод callStatic для вызова внешних статических методов класса.
  • 2018-01-17 — добавлен метод callStaticSelf для вызова статических методов.
  • 2018-01-17 — добавлен метод for i.
  • 2018-01-17 — в ClassBuilder добавлен метод buildInstance, возвращающий экземпляр объекта.
  • 2018-01-17 — добавлено управление массивами: new, get, set, length.
  • 2018-01-17 — добавлена операция цикла map.
  • 2018-01-17 — добавлены операции цикла для массивов и коллекций.
  • 2018-01-17 — изменён способ вызова super, по умолчанию используется прямой вызов соответствующего метода родительского класса при перегрузке метода без передачи имени метода и параметров.
  • 2018-01-17 — добавлен метод fieldStatic для получения статических полей других объектов.
  • 2018-01-19 — завершена реализация метода addStaticMethod для добавления статических функций.
  • 2018-01-19 — исправлена ошибка в методе field, когда не проверялось isXXX.
  • 2018-01-19 — добавлен пример hello world.
  • 2018-01-19 — добавлен пример преобразования Bean в map.
  • 2018-01-20 — добавлен JFish, использование asmtop и antlr для реализации собственного языка программирования на JVM.

Простой пример

public class FirstHelloWorld {

  //要实现的代码
  public static void main(String[] args) {
    System.out.println("Hello World.");
  }

  public static void main(String... args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
    Class<Object> testHello = ClassBuilder.create(ASMClassLoader.create(), Object.class)
        //增加main静态方法
        .addStaticMethod("main", void.class, Collections.singletonList(String[].class),
            //在有多个函数情况,返回最后一个command.type(),所以在下面加了一个voidReturn()
            CB.sequence(
                CB.call(CB.fieldStatic(System.class, "out"), "println", CB.value("Hello World.")),
                CB.voidReturn()
            ))
        .build();

    //没有对应的接口,用反射测试
    Method mainMethod = testHello.getMethod("main", String[].class);
    mainMethod.invoke(testHello, new Object[]{null});
  }
}
Эффект после обратной компиляции сохранённого файла класса

image

Реализация ссылок

  1. redkale
  2. asmsupport
  3. datakernel

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Упаковка инструмента генерации байт-кода ASM. Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/jlutt-dyASMTop.git
git@api.gitlife.ru:oschina-mirror/jlutt-dyASMTop.git
oschina-mirror
jlutt-dyASMTop
jlutt-dyASMTop
master