Skip to content

Add the ability to dump type information to a JSON file #16027

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

HertzDevil
Copy link
Contributor

If the environment variable CRYSTAL_DUMP_TYPE_INFO is set, at build time the compiler will emit a bunch of type information to a JSON file at that path. The JSON looks something like:

{
    "types": [
        {
            "name": "Regex",
            "id": 46,
            "min_subtype_id": 46,
            "supertype_id": 188,
            "has_inner_pointers": true,
            "size": 8,
            "align": 8,
            "instance_size": 56,
            "instance_align": 8,
            "instance_vars": [
                {
                    "name": "@re",
                    "type_name": "Pointer(LibPCRE2::Code)",
                    "offset": 8,
                    "size": 8
                },
                {
                    "name": "@jit",
                    "type_name": "Bool",
                    "offset": 16,
                    "size": 1
                },
                {
                    "name": "@source",
                    "type_name": "String",
                    "offset": 24,
                    "size": 8
                },
                {
                    "name": "@match_data",
                    "type_name": "Crystal::ThreadLocalValue(Pointer(LibPCRE2::MatchData))",
                    "offset": 32,
                    "size": 16
                },
                {
                    "name": "@options",
                    "type_name": "Regex::Options",
                    "offset": 48,
                    "size": 8
                }
            ]
        }
    ]
}

At the moment this is intended to be an internal tool that supplements the similarly named CRYSTAL_DUMP_TYPE_ID environment variable. I originally made this to generate human-readable reports from GC heap dumps, but there are probably other good uses like enhancing the debugger support scripts.

@straight-shoota straight-shoota added this to the 1.18.0 milestone Jul 23, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants