Skip to content

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

Merged
straight-shoota merged 1 commit intocrystal-lang:masterfrom
HertzDevil:feature/crystal-dump-type-info
Jul 28, 2025
Merged

Add the ability to dump type information to a JSON file#16027
straight-shoota merged 1 commit intocrystal-lang:masterfrom
HertzDevil:feature/crystal-dump-type-info

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
@straight-shoota straight-shoota merged commit e9edddb into crystal-lang:master Jul 28, 2025
41 checks passed
@HertzDevil HertzDevil deleted the feature/crystal-dump-type-info branch July 29, 2025 00:31
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