Project

General

Profile

Actions

Task #12627

open

Спецификация инструкции вызова метода invokestatic

Added by Alexander Protsenko 8 months ago.

Status:
New
Priority:
Normal
Assignee:
Category:
Specification
Target version:
Start date:
09/13/2023
Due date:
% Done:

0%

Estimated time:
Detected in build:
git
Published in build:

Description

На примере инструкции invokestatic предлагается разобраться с механизмом вызова методов в JVM.

1.
Для этого надо изучить описание методов (метаинформация, хранящаяся в памяти):
https://docs.oracle.com/javase/specs/jvms/se11/html/jvms-4.html#jvms-4.6
Описать pseudo инструкцию/и для загрузки информации о методе в память, необходимую для его вызова.

2. Описать шаблон, который вызывает метод с помощью этой инструкции.

3. Добавить печать информацию про метод в генерируемый тест.

Например для класса:

public class TestClass01 {
    public long inc() {
        long a;
        long b = 2L;
        a = b + 5L;
        a++;
        return ++a; 
      }
    }

Байт-код метода inc() выглядит следующим образом:

  public long inc();
    descriptor: ()J
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=5, args_size=1
         0: ldc2_w        #2                  // long 2l
         3: lstore_3
         4: lload_3
         5: ldc2_w        #4                  // long 5l
         8: ladd
         9: lstore_1
        10: lload_1
        11: lconst_1
        12: ladd
        13: lstore_1
        14: lload_1
        15: lconst_1
        16: ladd
        17: dup2
        18: lstore_1
        19: lreturn
      LineNumberTable:
        line 4: 0
        line 5: 4
        line 6: 10
        line 7: 14
}

Основная часть информации о методе находится тут:

  public long inc();
    descriptor: ()J
    flags: (0x0001) ACC_PUBLIC

No data to display

Actions

Also available in: Atom PDF