Данный набор инструментов предназначен для изучения байт-кода 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});
}
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )