{"id":30176855,"url":"https://github.com/peyapeyapeyang/langjal","last_synced_at":"2025-08-12T03:18:30.595Z","repository":{"id":305741076,"uuid":"1023562717","full_name":"PeyaPeyaPeyang/LangJAL","owner":"PeyaPeyaPeyang","description":"A custom-designed assembly language for the Java Virtual Machine.  ","archived":false,"fork":false,"pushed_at":"2025-07-27T23:21:19.000Z","size":365,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-08T12:17:52.729Z","etag":null,"topics":["assembler","assembly-language","assembly-language-programming","intellij-plugin","java","java-assembly-interpreter","jvm","jvm-bytecode","jvm-languages"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/PeyaPeyaPeyang.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-07-21T10:52:10.000Z","updated_at":"2025-07-27T23:21:22.000Z","dependencies_parsed_at":"2025-07-21T20:32:36.313Z","dependency_job_id":null,"html_url":"https://github.com/PeyaPeyaPeyang/LangJAL","commit_stats":null,"previous_names":["peyapeyapeyang/langjal"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/PeyaPeyaPeyang/LangJAL","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PeyaPeyaPeyang%2FLangJAL","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PeyaPeyaPeyang%2FLangJAL/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PeyaPeyaPeyang%2FLangJAL/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PeyaPeyaPeyang%2FLangJAL/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/PeyaPeyaPeyang","download_url":"https://codeload.github.com/PeyaPeyaPeyang/LangJAL/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PeyaPeyaPeyang%2FLangJAL/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":269994317,"owners_count":24509064,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-12T02:00:09.011Z","response_time":80,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["assembler","assembly-language","assembly-language-programming","intellij-plugin","java","java-assembly-interpreter","jvm","jvm-bytecode","jvm-languages"],"created_at":"2025-08-12T03:18:28.327Z","updated_at":"2025-08-12T03:18:30.581Z","avatar_url":"https://github.com/PeyaPeyaPeyang.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003ch1\u003eJAL\u003c/h1\u003e\n\n  \u003ca href=\"https://javadoc.io/doc/tokyo.peya/langjal\"\u003e\u003cimg src=\"https://javadoc.io/badge2/tokyo.peya/langjal/javadoc.svg?style=flat-square\"\u003e\u003c/a\u003e\n\u003c/div\u003e\n\n**JAL (Java Assembly Language)**  is a custom-designed assembly language for the Java Virtual Machine.  \nIt makes exploring the internals of the JVM not just possible, but genuinely fun.\n\n---\n\n## 🚀 What is JAL?\n\nJAL is a fresh take on Java assembly — a spiritual successor to projects like **Jasmin**, but with modern features and design.\n\nUnlike Jasmin, which stopped development around 2022 and only supports outdated Java versions, **JAL supports modern JVM features**, including automatic generation of **StackMapFrames**, which are mandatory from Java 1.6 and up. Jasmin users may remember `VerifyError`s haunting their dreams — JAL eliminates them.\n\n### Why JAL is cool:\n\n- **Named local variables**  \n  Instead of remembering slot numbers, you can name your variables:\n  ```\n  istore 0 [-\u003eexample]  \n  iload example\n  ```\n- **Structured exception handling with labels**  \n  Try-catch-finally blocks are declared with jump labels:\n  ```\n  tryStart: [~tryEnd, java/lang/Exception: catchStart, java/lang/Error: catchStart2 -\u003efinallyStart]  \n  tryEnd:  \n    \n  catchStart:  \n  catchStart2:  \n  finallyStart:\n   ```\n\n- **Readable member references**  \n  Method and field calls separate class and member names for clarity:\n  ```\n  invokevirtual java/io/PrintStream-\u003eprintln(Ljava/lang/String;)V\n  ```\n\n### Sample: HelloWorld\n\n```java\npublic class HelloWorld {\n  public static main([Ljava/lang/String;)V {\n    // Print \"Hello, World!\"\n    getstatic java/lang/System-\u003eout:Ljava/io/PrintStream;\n    ldc \"Hello, World!\"\n    invokevirtual java/io/PrintStream-\u003eprintln(Ljava/lang/String;)V\n    \n    // Return from main\n    return\n  }\n}\n```\n\n---\n\n## 🧠 StackMapFrame? Automatically Done.\n\nOne of the biggest pain points in JVM bytecode writing is StackMapFrame management.  \nJAL's compiler **calculates and inserts StackMapFrames automatically** — no more manual frame declaration, no more hair-pulling `VerifyError`s.\n\n---\n\n## 📦 Installation\n\nJAL is available as a [Javasm IntelliJ plugin](https://plugins.jetbrains.com/plugin/27944-javasm), [jal-gradle-plugin](https://github.com/PeyaPeyaPeyang/jal-gradle-plugin)\nor [JAL CLI Compiler](https://github.com/PeyaPeyaPeyang/LangJAL/releases)\n\nTo install the JAL CLI Compiler, download the latest release from the [releases page](https://github.com/PeyaPeyaPeyang/LangJAL/releases)\nand decompress it to a directory of your choice.\nTo use the JAL CLI Compiler, add the `bin` directory to your system's PATH environment variable.\n\n---\n\n## 🛠️ JAL CLI Compiler Usage\n\nTo compile JAL files, use the JAL CLI compiler:\n\n```bash\n$ jalc MyProgram.jal\n```\n\nOr specify the jal files directly:\n\n```bash\n$ jalc MyJALFiles\n```\n\n### Making .jar file\n\nTo create a `.jar` file from your compiled JAL files, use the `jar` command:\n\n```bash\n$ jalc MyProgram.jal --output /path/to/MyProgram.jar\n$ jalc MyJALFiles --output /path/to/MyJALFiles.jar\n```\n\n#### Customizing output directory\n\nYou can specify the output directory for the compiled classes using the `--output` option:\n\n```bash\n$ jalc MyProgram.jal --output /path/to/output/directory\n$ jalc MyJALFiles --output /path/to/output/directory\n```\n\n---\n\n## 🔌 Javasm IntelliJ Plugin Features\n\nJavasm supercharges your JAL development inside IntelliJ IDEA with [Javasm](https://plugins.jetbrains.com/plugin/27944-javasm) plugin:\n\n- ✅ **Instruction name completion**  \n  Start typing and get autocompletion for all instructions.\n\n- 📄 **Hover documentation**  \n  Hover over instructions to see inline documentation.\n\n- 🌀 **Label navigation**  \n  Ctrl+Click a label to jump to its declaration.\n\n- 🐞 **Debugger integration**  \n  Full integration with IntelliJ's standard JVM debugger (JDWP).  \n  Breakpoints, step-over, step-into — all supported.\n\n- 📊 **Frame and Stack Viewer**   \n  A custom tool window that shows:\n  - Stack state at the selected instruction\n  - Local variable states\n  - Visualises the stack during live debugging sessions\n\n---\n\n## 📄 License\n\nMIT License. See the [LICENCE](./LICENCE) file for details.\n\n---\n\n❤️ A project by someone who enjoys poking around the JVM bytecode guts.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpeyapeyapeyang%2Flangjal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpeyapeyapeyang%2Flangjal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpeyapeyapeyang%2Flangjal/lists"}