From 5370ef5ff67cf202102df89a9746a04abad95df6 Mon Sep 17 00:00:00 2001 From: Gergo Magyar Date: Tue, 9 Jun 2026 10:27:07 +0000 Subject: [PATCH] feat(install): vendor tree-sitter-c at 0.21.4 with GitNexus-built prebuilds (#2116) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit tree-sitter-c is the one grammar dependency upstream ships incomplete prebuilds for (4/6 — no linux-arm64/win32-arm64), AND it is a REQUIRED grammar: its own `install` (node-gyp-build) compiles from source when no prebuild matches and exits non-zero, so on a toolchain-less ARM host `npm install gitnexus` HARD-FAILS at the c step — during npm's dependency phase, before any GitNexus postinstall runs (so a postinstall "supplement" can't help). Fix: vendor c prebuild-only at the pinned 0.21.4 (Kotlin pattern), with all six prebuilds GitNexus-cross-built, and drop it from `dependencies`: - vendor/tree-sitter-c/ (bindings + node-types + manifest + prebuilds); build probe scripts/build-tree-sitter-c.cjs; added to the build workflow registry (kind 'npm' — built from c@0.21.4 source). - materialize-vendor-grammars.cjs: c is REQUIRED, so it is always materialized, even under GITNEXUS_SKIP_OPTIONAL_GRAMMARS (it needs no toolchain). - Removed from package.json dependencies + lockfile (nothing else needs npm c — tree-sitter-cpp's dep on c is dev-only and not installed). Preserves the #1242 ABI pin: vendoring 0.21.4 keeps the good ABI while closing the ARM gap. - parser-loader note + the prebuild-coverage guard + a cli-commands assertion updated; c moves from the npm-gap allow-list into the vendored 6/6 cohort. Verified: tsc clean, 31 unit tests pass, c loads/parses; the guard is RED for c/dart/proto/kotlin until the workflow populates prebuilds (the must-fill gate). Closes the operational risk in #2116. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../workflows/build-tree-sitter-prebuilds.yml | 7 + gitnexus/package-lock.json | 20 - gitnexus/package.json | 3 +- gitnexus/scripts/build-tree-sitter-c.cjs | 38 + .../scripts/materialize-vendor-grammars.cjs | 17 +- .../src/core/tree-sitter/parser-loader.ts | 29 +- gitnexus/test/unit/cli-commands.test.ts | 15 + gitnexus/test/unit/prebuild-coverage.test.ts | 9 +- gitnexus/vendor/tree-sitter-c/LICENSE | 21 + gitnexus/vendor/tree-sitter-c/README.md | 39 + .../tree-sitter-c/bindings/node/index.d.ts | 28 + .../tree-sitter-c/bindings/node/index.js | 7 + gitnexus/vendor/tree-sitter-c/package.json | 18 + .../vendor/tree-sitter-c/prebuilds/.gitkeep | 0 .../vendor/tree-sitter-c/src/node-types.json | 4556 +++++++++++++++++ 15 files changed, 4762 insertions(+), 45 deletions(-) create mode 100644 gitnexus/scripts/build-tree-sitter-c.cjs create mode 100644 gitnexus/vendor/tree-sitter-c/LICENSE create mode 100644 gitnexus/vendor/tree-sitter-c/README.md create mode 100644 gitnexus/vendor/tree-sitter-c/bindings/node/index.d.ts create mode 100644 gitnexus/vendor/tree-sitter-c/bindings/node/index.js create mode 100644 gitnexus/vendor/tree-sitter-c/package.json create mode 100644 gitnexus/vendor/tree-sitter-c/prebuilds/.gitkeep create mode 100644 gitnexus/vendor/tree-sitter-c/src/node-types.json diff --git a/.github/workflows/build-tree-sitter-prebuilds.yml b/.github/workflows/build-tree-sitter-prebuilds.yml index 2dd679f3b..a23e14ac7 100644 --- a/.github/workflows/build-tree-sitter-prebuilds.yml +++ b/.github/workflows/build-tree-sitter-prebuilds.yml @@ -60,6 +60,7 @@ on: branches: [main] paths: # Vendored grammars: their version lives in the vendor snapshot package.json. + - 'gitnexus/vendor/tree-sitter-c/package.json' - 'gitnexus/vendor/tree-sitter-dart/package.json' - 'gitnexus/vendor/tree-sitter-proto/package.json' - 'gitnexus/vendor/tree-sitter-kotlin/package.json' @@ -117,6 +118,11 @@ jobs: // 'vendored' builds from gitnexus/vendor/ (which carries the C // source + binding.gyp). Extend this list to cover a new grammar. const REGISTRY = { + // c is vendored prebuild-only but BUILT from the published npm + // package (kind 'npm'), held at 0.21.4 — it closes upstream's 4/6 + // ARM gap (#2116) for a REQUIRED grammar that otherwise hard-fails + // install on toolchain-less ARM. + c: { name: 'tree-sitter-c', kind: 'npm' }, dart: { name: 'tree-sitter-dart', kind: 'vendored' }, proto: { name: 'tree-sitter-proto', kind: 'vendored' }, kotlin: { name: 'tree-sitter-kotlin', kind: 'npm' }, @@ -317,6 +323,7 @@ jobs: // Catch an emulated x64 Node silently mis-passing on an arm64 runner. if (process.arch !== expect) throw new Error(`runner arch ${process.arch} != ${expect}`); const snippets = { + c: "int main(void) { return 0; }", dart: "void main() { print(\"hi\"); }", proto: "syntax = \"proto3\";\nmessage M { int32 id = 1; }", kotlin: "fun main() { println(\"hi\") }", diff --git a/gitnexus/package-lock.json b/gitnexus/package-lock.json index a9ef8994b..187475381 100644 --- a/gitnexus/package-lock.json +++ b/gitnexus/package-lock.json @@ -33,7 +33,6 @@ "pino": "^10.3.1", "pino-pretty": "^13.1.3", "tree-sitter": "0.21.1", - "tree-sitter-c": "0.21.4", "tree-sitter-c-sharp": "0.23.1", "tree-sitter-cpp": "0.23.2", "tree-sitter-go": "^0.23.0", @@ -4970,25 +4969,6 @@ "node-gyp-build": "^4.8.0" } }, - "node_modules/tree-sitter-c": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/tree-sitter-c/-/tree-sitter-c-0.21.4.tgz", - "integrity": "sha512-IahxFIhXiY15SUlrt2upBiKSBGdOaE1fjKLK1Ik5zxqGHf6T1rvr3IJrovbsE5sXhypx7Hnmf50gshsppaIihA==", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "node-addon-api": "^8.0.0", - "node-gyp-build": "^4.8.1" - }, - "peerDependencies": { - "tree-sitter": "^0.21.0" - }, - "peerDependenciesMeta": { - "tree_sitter": { - "optional": true - } - } - }, "node_modules/tree-sitter-c-sharp": { "version": "0.23.1", "resolved": "https://registry.npmjs.org/tree-sitter-c-sharp/-/tree-sitter-c-sharp-0.23.1.tgz", diff --git a/gitnexus/package.json b/gitnexus/package.json index 8cea186ac..8edbe1a3b 100644 --- a/gitnexus/package.json +++ b/gitnexus/package.json @@ -49,7 +49,7 @@ "test:watch": "vitest", "test:coverage": "vitest run --coverage", "test:cross-platform": "tsx scripts/run-cross-platform.ts", - "postinstall": "node scripts/materialize-vendor-grammars.cjs && node scripts/build-tree-sitter-dart.cjs && node scripts/build-tree-sitter-proto.cjs && node scripts/build-tree-sitter-swift.cjs && node scripts/build-tree-sitter-kotlin.cjs", + "postinstall": "node scripts/materialize-vendor-grammars.cjs && node scripts/build-tree-sitter-c.cjs && node scripts/build-tree-sitter-dart.cjs && node scripts/build-tree-sitter-proto.cjs && node scripts/build-tree-sitter-swift.cjs && node scripts/build-tree-sitter-kotlin.cjs", "prepare": "node scripts/build.js", "prepack": "node scripts/build.js" }, @@ -77,7 +77,6 @@ "pino": "^10.3.1", "pino-pretty": "^13.1.3", "tree-sitter": "0.21.1", - "tree-sitter-c": "0.21.4", "tree-sitter-c-sharp": "0.23.1", "tree-sitter-cpp": "0.23.2", "tree-sitter-go": "^0.23.0", diff --git a/gitnexus/scripts/build-tree-sitter-c.cjs b/gitnexus/scripts/build-tree-sitter-c.cjs new file mode 100644 index 000000000..06152372e --- /dev/null +++ b/gitnexus/scripts/build-tree-sitter-c.cjs @@ -0,0 +1,38 @@ +#!/usr/bin/env node +/** + * Probe tree-sitter-c prebuild availability at install time. + * + * tree-sitter-c is vendored prebuild-only (like swift/kotlin), held at 0.21.4 + * for ABI compatibility with the bundled tree-sitter@0.21.1 runtime (#1242). + * It is vendored — rather than left as a plain npm dependency — because upstream + * ships prebuilds for only 4 of 6 platform-archs (#2116) and tree-sitter-c is a + * REQUIRED grammar whose source build hard-fails `npm install` on a toolchain-less + * ARM host. GitNexus cross-builds all six prebuilds (build-tree-sitter-prebuilds + * workflow) and materialize-vendor-grammars.cjs copies them into node_modules/; + * node-gyp-build selects the right binary at require time. + * + * This probe calls node-gyp-build once so a missing/unloadable prebuild surfaces + * as a single install-time warning rather than a first-use runtime error. It + * MUST NEVER throw or exit non-zero — it must never break `gitnexus` install. + */ +const fs = require('fs'); +const path = require('path'); + +// No GITNEXUS_SKIP_OPTIONAL_GRAMMARS gate: tree-sitter-c is REQUIRED and always +// materialized (it is not a user-opt-out grammar), so we always verify it. +const cDir = path.join(__dirname, '..', 'node_modules', 'tree-sitter-c'); + +try { + if (!fs.existsSync(path.join(cDir, 'bindings', 'node', 'index.js'))) { + process.exit(0); + } + + const nodeGypBuild = require('node-gyp-build'); + nodeGypBuild(cDir); +} catch (err) { + console.warn('[tree-sitter-c] Prebuild probe failed:', err.message); + console.warn( + '[tree-sitter-c] C parsing will be unavailable (no prebuild matches this platform-arch). Other languages are unaffected.', + ); + process.exit(0); +} diff --git a/gitnexus/scripts/materialize-vendor-grammars.cjs b/gitnexus/scripts/materialize-vendor-grammars.cjs index 8d077d850..b94df815d 100644 --- a/gitnexus/scripts/materialize-vendor-grammars.cjs +++ b/gitnexus/scripts/materialize-vendor-grammars.cjs @@ -13,19 +13,28 @@ const fs = require('fs'); const path = require('path'); const ROOT = path.join(__dirname, '..'); -const VENDORED_GRAMMARS = [ +// tree-sitter-c is a REQUIRED grammar that we vendor prebuild-only purely to +// close upstream's ARM prebuild gap (#2116) — it needs no toolchain and is not a +// language the user opts out of, so it is always materialized, even under +// GITNEXUS_SKIP_OPTIONAL_GRAMMARS. The rest are optional (user-skippable, and +// Dart/Proto compile from source) and honor the skip flag. +const REQUIRED_VENDORED = ['tree-sitter-c']; +const OPTIONAL_VENDORED = [ 'tree-sitter-dart', 'tree-sitter-proto', 'tree-sitter-swift', 'tree-sitter-kotlin', ]; -if (process.env.GITNEXUS_SKIP_OPTIONAL_GRAMMARS === '1') { +const skipOptional = process.env.GITNEXUS_SKIP_OPTIONAL_GRAMMARS === '1'; +if (skipOptional) { console.warn( - '[gitnexus] Skipping vendored grammar materialize (GITNEXUS_SKIP_OPTIONAL_GRAMMARS=1). Dart/Proto/Swift/Kotlin parsing will be unavailable.', + '[gitnexus] GITNEXUS_SKIP_OPTIONAL_GRAMMARS=1: skipping optional Dart/Proto/Swift/Kotlin materialize (required C is still materialized).', ); - process.exit(0); } +const VENDORED_GRAMMARS = skipOptional + ? REQUIRED_VENDORED + : [...REQUIRED_VENDORED, ...OPTIONAL_VENDORED]; for (const name of VENDORED_GRAMMARS) { const src = path.join(ROOT, 'vendor', name); diff --git a/gitnexus/src/core/tree-sitter/parser-loader.ts b/gitnexus/src/core/tree-sitter/parser-loader.ts index 391a7d1d6..3e891a169 100644 --- a/gitnexus/src/core/tree-sitter/parser-loader.ts +++ b/gitnexus/src/core/tree-sitter/parser-loader.ts @@ -121,25 +121,26 @@ const SOURCES: Record = { 'Vue parsing piggybacks on `tree-sitter-typescript`. Check the install and native binding.', }, - // tree-sitter-c is a required dependency, but its native binding has - // historically been ABI-incompatible with the bundled tree-sitter@0.21.1 - // runtime on some platforms (#1242, #858). Loading it through the - // optional machinery turns a would-be segfault into a clean degradation - // while preserving every other language's analysis. Severity is pinned - // to `error` because the package is in `dependencies`: a failure here - // is always an install/platform problem the user needs to see, never an - // expected "user opted out" condition like Swift/Dart/Kotlin. + // tree-sitter-c is a core grammar, vendored prebuild-only (under + // gitnexus/vendor/tree-sitter-c) with GitNexus-built prebuilds for every + // supported platform-arch — upstream ships only 4/6 (#2116) and C is a + // required grammar whose source build hard-fails install on a toolchain-less + // ARM host. Loading through the optional machinery turns a would-be ABI + // segfault (#1242, #858) into a clean degradation while preserving every + // other language's analysis. Severity stays `error` because C is not a + // user-opt-out grammar like Swift/Dart/Kotlin: a failure here is always an + // install/platform problem the user needs to see. [SupportedLanguages.C]: { load: () => _require('tree-sitter-c'), optional: true, severity: 'error', unavailableNote: - 'C parsing disabled: `tree-sitter-c` could not be loaded. ' + - 'This package is in `dependencies` and prebuilds ship for all supported ' + - 'platforms (win32/darwin/linux x64+arm64, Node 18/20/22), so this ' + - 'usually indicates a corrupted install, an unsupported Node version, ' + - 'or a native ABI mismatch with the bundled tree-sitter runtime. ' + - 'Try `npm rebuild tree-sitter-c` or reinstalling, then re-run analyze. ' + + 'C parsing disabled: vendored `tree-sitter-c` (under ' + + '`gitnexus/vendor/tree-sitter-c`) could not be loaded. GitNexus ships ' + + 'prebuilt binaries for all supported platforms (win32/darwin/linux ' + + 'x64+arm64, N-API), so this usually indicates a corrupted install or a ' + + 'native ABI mismatch with the bundled tree-sitter@0.21.1 runtime. ' + + 'Try reinstalling, then re-run analyze. ' + `If the failure persists, file details at ${ISSUES_URL}/1242.`, }, diff --git a/gitnexus/test/unit/cli-commands.test.ts b/gitnexus/test/unit/cli-commands.test.ts index 88a4a419b..cd4e9fa2e 100644 --- a/gitnexus/test/unit/cli-commands.test.ts +++ b/gitnexus/test/unit/cli-commands.test.ts @@ -117,6 +117,21 @@ describe('CLI commands', () => { expect(kotlinPkg.default.dependencies).toBeUndefined(); expect(kotlinPkg.default.peerDependencies['tree-sitter']).toContain('^0.21'); }); + + it('vendors tree-sitter-c prebuild-only at the 0.21.4 ABI pin instead of an npm dependency (#2116/#1242)', async () => { + const pkg = await import('../../package.json', { with: { type: 'json' } }); + const cPkg = await import('../../vendor/tree-sitter-c/package.json', { + with: { type: 'json' }, + }); + // c is a REQUIRED grammar that hard-fails install on toolchain-less ARM + // (upstream ships 4/6). Vendored with GitNexus-built prebuilds for all 6, + // held at 0.21.4 for ABI safety (#1242) — so it is NOT an npm dependency. + expect(pkg.default.dependencies['tree-sitter-c']).toBeUndefined(); + expect(pkg.default.scripts.postinstall).toContain('build-tree-sitter-c.cjs'); + expect(cPkg.default.version).toBe('0.21.4'); + expect(cPkg.default.scripts?.install).toBeUndefined(); + expect(cPkg.default.dependencies).toBeUndefined(); + }); }); describe('analyzeCommand', () => { diff --git a/gitnexus/test/unit/prebuild-coverage.test.ts b/gitnexus/test/unit/prebuild-coverage.test.ts index a4f36e53c..104fad046 100644 --- a/gitnexus/test/unit/prebuild-coverage.test.ts +++ b/gitnexus/test/unit/prebuild-coverage.test.ts @@ -46,12 +46,11 @@ const NODE_MODULES = path.join(GITNEXUS_ROOT, 'node_modules'); * grammar drops MORE than its allow-listed gap (a new silent regression) OR if * an allow-listed gap is closed upstream (prompting allow-list removal). * - * tree-sitter-c@0.21.4 ships only 4/6 (no linux-arm64 / win32-arm64); pinned to - * the 0.21.x line pending the tree-sitter 0.21->0.23 runtime upgrade. See #2116. + * (tree-sitter-c@0.21.4 ships only 4/6 — no linux-arm64/win32-arm64, #2116 — but + * it is now VENDORED with GitNexus-built prebuilds for all 6, so it falls under + * the vendored cohort below, not here.) */ -const KNOWN_NPM_GAPS: Record = { - 'tree-sitter-c': ['linux-arm64', 'win32-arm64'], -}; +const KNOWN_NPM_GAPS: Record = {}; function isNapiBinary(file: string): boolean { return readFileSync(file).includes(NAPI_SYMBOL); diff --git a/gitnexus/vendor/tree-sitter-c/LICENSE b/gitnexus/vendor/tree-sitter-c/LICENSE new file mode 100644 index 000000000..4b52d191c --- /dev/null +++ b/gitnexus/vendor/tree-sitter-c/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 Max Brunsfeld + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/gitnexus/vendor/tree-sitter-c/README.md b/gitnexus/vendor/tree-sitter-c/README.md new file mode 100644 index 000000000..29a86b579 --- /dev/null +++ b/gitnexus/vendor/tree-sitter-c/README.md @@ -0,0 +1,39 @@ +## GitNexus vendor notice + +This directory is a GitNexus-managed minimal **runtime** package derived from +`tree-sitter-c@0.21.4` (tree-sitter/tree-sitter-c). It carries only the runtime +files (`bindings/node/`, `src/node-types.json`, `LICENSE`) plus the native +`prebuilds/`. The C source (`parser.c`, `binding.gyp`) is not vendored — the +prebuilds are produced from the published npm package. + +### Why this is vendored (unlike the other npm grammars) + +`tree-sitter-c` is the one grammar dependency upstream ships **incomplete** +prebuilds for: only 4 of 6 platform-archs (no `linux-arm64` / `win32-arm64`, +[#2116](https://github.com/abhigyanpatwari/GitNexus/issues/2116)). And unlike +the optional grammars, `tree-sitter-c` is a **required** grammar whose own +`install` script (`node-gyp-build`) compiles from source when no prebuild +matches — which **hard-fails `npm install`** on a toolchain-less ARM host +(`node-gyp rebuild` exits non-zero for a required dependency). To make C parsing +toolchain-free on every platform, GitNexus builds all six prebuilds itself (via +the `build-tree-sitter-prebuilds` workflow) and vendors them; `node-gyp-build` +selects the right `.node` at require time. + +### Held at 0.21.4 (do not bump here) + +The version is pinned to **0.21.4** for ABI compatibility with the bundled +`tree-sitter@0.21.1` runtime — `tree-sitter-c@0.23.x` prebuilds segfault under +0.21.1 on Windows ([#1242](https://github.com/abhigyanpatwari/GitNexus/issues/1242), +[#858](https://github.com/abhigyanpatwari/GitNexus/issues/858)). Vendoring 0.21.4 +*preserves* that pin while closing the ARM prebuild gap. Bump only as part of the +deliberate tree-sitter 0.21→0.23 runtime upgrade. + +### Updating this vendor package + +1. (Runtime upgrade only) bump `version` in `package.json` + refresh + `bindings/node/*` and `src/node-types.json` from the new `tree-sitter-c` + release, and refresh `_vendoredBy`. +2. Regenerate the six prebuilds by running the **`build-tree-sitter-prebuilds`** + workflow. +3. Verify the packed tarball can `require('tree-sitter-c')` and parse C on each + target platform-arch (the workflow's validate step does this in CI). diff --git a/gitnexus/vendor/tree-sitter-c/bindings/node/index.d.ts b/gitnexus/vendor/tree-sitter-c/bindings/node/index.d.ts new file mode 100644 index 000000000..efe259eed --- /dev/null +++ b/gitnexus/vendor/tree-sitter-c/bindings/node/index.d.ts @@ -0,0 +1,28 @@ +type BaseNode = { + type: string; + named: boolean; +}; + +type ChildNode = { + multiple: boolean; + required: boolean; + types: BaseNode[]; +}; + +type NodeInfo = + | (BaseNode & { + subtypes: BaseNode[]; + }) + | (BaseNode & { + fields: { [name: string]: ChildNode }; + children: ChildNode[]; + }); + +type Language = { + name: string; + language: unknown; + nodeTypeInfo: NodeInfo[]; +}; + +declare const language: Language; +export = language; diff --git a/gitnexus/vendor/tree-sitter-c/bindings/node/index.js b/gitnexus/vendor/tree-sitter-c/bindings/node/index.js new file mode 100644 index 000000000..6657bcf42 --- /dev/null +++ b/gitnexus/vendor/tree-sitter-c/bindings/node/index.js @@ -0,0 +1,7 @@ +const root = require("path").join(__dirname, "..", ".."); + +module.exports = require("node-gyp-build")(root); + +try { + module.exports.nodeTypeInfo = require("../../src/node-types.json"); +} catch (_) {} diff --git a/gitnexus/vendor/tree-sitter-c/package.json b/gitnexus/vendor/tree-sitter-c/package.json new file mode 100644 index 000000000..be9036fbd --- /dev/null +++ b/gitnexus/vendor/tree-sitter-c/package.json @@ -0,0 +1,18 @@ +{ + "name": "tree-sitter-c", + "version": "0.21.4", + "description": "C grammar for tree-sitter", + "repository": "https://github.com/tree-sitter/tree-sitter-c", + "license": "MIT", + "main": "bindings/node/index.js", + "types": "bindings/node/index.d.ts", + "_vendoredBy": "gitnexus - minimal runtime package derived from tree-sitter-c@0.21.4 (tree-sitter/tree-sitter-c). HELD at 0.21.4 for ABI compatibility with the bundled tree-sitter@0.21.1 runtime (#1242/#858) — do not bump without the runtime upgrade. Vendored prebuild-only because upstream ships native prebuilds for only 4 of 6 platforms (no linux-arm64/win32-arm64, #2116), and tree-sitter-c is a REQUIRED grammar whose source build hard-fails `npm install` on a toolchain-less ARM host; GitNexus cross-builds all six via .github/workflows/build-tree-sitter-prebuilds.yml. Copied to node_modules/ by materialize-vendor-grammars.cjs; prebuild activation via build-tree-sitter-c.cjs (no scripts.install here — #836/#1728).", + "peerDependencies": { + "tree-sitter": "^0.21.0" + }, + "peerDependenciesMeta": { + "tree-sitter": { + "optional": true + } + } +} diff --git a/gitnexus/vendor/tree-sitter-c/prebuilds/.gitkeep b/gitnexus/vendor/tree-sitter-c/prebuilds/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/gitnexus/vendor/tree-sitter-c/src/node-types.json b/gitnexus/vendor/tree-sitter-c/src/node-types.json new file mode 100644 index 000000000..fc27d765f --- /dev/null +++ b/gitnexus/vendor/tree-sitter-c/src/node-types.json @@ -0,0 +1,4556 @@ +[ + { + "type": "_abstract_declarator", + "named": true, + "subtypes": [ + { + "type": "abstract_array_declarator", + "named": true + }, + { + "type": "abstract_function_declarator", + "named": true + }, + { + "type": "abstract_parenthesized_declarator", + "named": true + }, + { + "type": "abstract_pointer_declarator", + "named": true + } + ] + }, + { + "type": "_declarator", + "named": true, + "subtypes": [ + { + "type": "array_declarator", + "named": true + }, + { + "type": "attributed_declarator", + "named": true + }, + { + "type": "function_declarator", + "named": true + }, + { + "type": "identifier", + "named": true + }, + { + "type": "parenthesized_declarator", + "named": true + }, + { + "type": "pointer_declarator", + "named": true + } + ] + }, + { + "type": "_field_declarator", + "named": true, + "subtypes": [ + { + "type": "array_declarator", + "named": true + }, + { + "type": "attributed_declarator", + "named": true + }, + { + "type": "field_identifier", + "named": true + }, + { + "type": "function_declarator", + "named": true + }, + { + "type": "parenthesized_declarator", + "named": true + }, + { + "type": "pointer_declarator", + "named": true + } + ] + }, + { + "type": "_type_declarator", + "named": true, + "subtypes": [ + { + "type": "array_declarator", + "named": true + }, + { + "type": "attributed_declarator", + "named": true + }, + { + "type": "function_declarator", + "named": true + }, + { + "type": "parenthesized_declarator", + "named": true + }, + { + "type": "pointer_declarator", + "named": true + }, + { + "type": "primitive_type", + "named": true + }, + { + "type": "type_identifier", + "named": true + } + ] + }, + { + "type": "expression", + "named": true, + "subtypes": [ + { + "type": "alignof_expression", + "named": true + }, + { + "type": "assignment_expression", + "named": true + }, + { + "type": "binary_expression", + "named": true + }, + { + "type": "call_expression", + "named": true + }, + { + "type": "cast_expression", + "named": true + }, + { + "type": "char_literal", + "named": true + }, + { + "type": "compound_literal_expression", + "named": true + }, + { + "type": "concatenated_string", + "named": true + }, + { + "type": "conditional_expression", + "named": true + }, + { + "type": "false", + "named": true + }, + { + "type": "field_expression", + "named": true + }, + { + "type": "generic_expression", + "named": true + }, + { + "type": "gnu_asm_expression", + "named": true + }, + { + "type": "identifier", + "named": true + }, + { + "type": "null", + "named": true + }, + { + "type": "number_literal", + "named": true + }, + { + "type": "offsetof_expression", + "named": true + }, + { + "type": "parenthesized_expression", + "named": true + }, + { + "type": "pointer_expression", + "named": true + }, + { + "type": "sizeof_expression", + "named": true + }, + { + "type": "string_literal", + "named": true + }, + { + "type": "subscript_expression", + "named": true + }, + { + "type": "true", + "named": true + }, + { + "type": "unary_expression", + "named": true + }, + { + "type": "update_expression", + "named": true + } + ] + }, + { + "type": "statement", + "named": true, + "subtypes": [ + { + "type": "attributed_statement", + "named": true + }, + { + "type": "break_statement", + "named": true + }, + { + "type": "case_statement", + "named": true + }, + { + "type": "compound_statement", + "named": true + }, + { + "type": "continue_statement", + "named": true + }, + { + "type": "do_statement", + "named": true + }, + { + "type": "expression_statement", + "named": true + }, + { + "type": "for_statement", + "named": true + }, + { + "type": "goto_statement", + "named": true + }, + { + "type": "if_statement", + "named": true + }, + { + "type": "labeled_statement", + "named": true + }, + { + "type": "return_statement", + "named": true + }, + { + "type": "seh_leave_statement", + "named": true + }, + { + "type": "seh_try_statement", + "named": true + }, + { + "type": "switch_statement", + "named": true + }, + { + "type": "while_statement", + "named": true + } + ] + }, + { + "type": "type_specifier", + "named": true, + "subtypes": [ + { + "type": "enum_specifier", + "named": true + }, + { + "type": "macro_type_specifier", + "named": true + }, + { + "type": "primitive_type", + "named": true + }, + { + "type": "sized_type_specifier", + "named": true + }, + { + "type": "struct_specifier", + "named": true + }, + { + "type": "type_identifier", + "named": true + }, + { + "type": "union_specifier", + "named": true + } + ] + }, + { + "type": "abstract_array_declarator", + "named": true, + "fields": { + "declarator": { + "multiple": false, + "required": false, + "types": [ + { + "type": "_abstract_declarator", + "named": true + } + ] + }, + "size": { + "multiple": false, + "required": false, + "types": [ + { + "type": "*", + "named": false + }, + { + "type": "expression", + "named": true + } + ] + } + }, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "type_qualifier", + "named": true + } + ] + } + }, + { + "type": "abstract_function_declarator", + "named": true, + "fields": { + "declarator": { + "multiple": false, + "required": false, + "types": [ + { + "type": "_abstract_declarator", + "named": true + } + ] + }, + "parameters": { + "multiple": false, + "required": true, + "types": [ + { + "type": "parameter_list", + "named": true + } + ] + } + } + }, + { + "type": "abstract_parenthesized_declarator", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "_abstract_declarator", + "named": true + }, + { + "type": "ms_call_modifier", + "named": true + } + ] + } + }, + { + "type": "abstract_pointer_declarator", + "named": true, + "fields": { + "declarator": { + "multiple": false, + "required": false, + "types": [ + { + "type": "_abstract_declarator", + "named": true + } + ] + } + }, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "ms_pointer_modifier", + "named": true + }, + { + "type": "type_qualifier", + "named": true + } + ] + } + }, + { + "type": "alignas_qualifier", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "type_descriptor", + "named": true + } + ] + } + }, + { + "type": "alignof_expression", + "named": true, + "fields": { + "type": { + "multiple": false, + "required": true, + "types": [ + { + "type": "type_descriptor", + "named": true + } + ] + } + } + }, + { + "type": "argument_list", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "compound_statement", + "named": true + }, + { + "type": "expression", + "named": true + }, + { + "type": "preproc_defined", + "named": true + } + ] + } + }, + { + "type": "array_declarator", + "named": true, + "fields": { + "declarator": { + "multiple": false, + "required": true, + "types": [ + { + "type": "_declarator", + "named": true + }, + { + "type": "_field_declarator", + "named": true + }, + { + "type": "_type_declarator", + "named": true + } + ] + }, + "size": { + "multiple": false, + "required": false, + "types": [ + { + "type": "*", + "named": false + }, + { + "type": "expression", + "named": true + } + ] + } + }, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "type_qualifier", + "named": true + } + ] + } + }, + { + "type": "assignment_expression", + "named": true, + "fields": { + "left": { + "multiple": false, + "required": true, + "types": [ + { + "type": "call_expression", + "named": true + }, + { + "type": "field_expression", + "named": true + }, + { + "type": "identifier", + "named": true + }, + { + "type": "parenthesized_expression", + "named": true + }, + { + "type": "pointer_expression", + "named": true + }, + { + "type": "subscript_expression", + "named": true + } + ] + }, + "operator": { + "multiple": false, + "required": true, + "types": [ + { + "type": "%=", + "named": false + }, + { + "type": "&=", + "named": false + }, + { + "type": "*=", + "named": false + }, + { + "type": "+=", + "named": false + }, + { + "type": "-=", + "named": false + }, + { + "type": "/=", + "named": false + }, + { + "type": "<<=", + "named": false + }, + { + "type": "=", + "named": false + }, + { + "type": ">>=", + "named": false + }, + { + "type": "^=", + "named": false + }, + { + "type": "|=", + "named": false + } + ] + }, + "right": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + } + }, + { + "type": "attribute", + "named": true, + "fields": { + "name": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + }, + "prefix": { + "multiple": false, + "required": false, + "types": [ + { + "type": "identifier", + "named": true + } + ] + } + }, + "children": { + "multiple": false, + "required": false, + "types": [ + { + "type": "argument_list", + "named": true + } + ] + } + }, + { + "type": "attribute_declaration", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "attribute", + "named": true + } + ] + } + }, + { + "type": "attribute_specifier", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "argument_list", + "named": true + } + ] + } + }, + { + "type": "attributed_declarator", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "_declarator", + "named": true + }, + { + "type": "_field_declarator", + "named": true + }, + { + "type": "_type_declarator", + "named": true + }, + { + "type": "attribute_declaration", + "named": true + } + ] + } + }, + { + "type": "attributed_statement", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "attribute_declaration", + "named": true + }, + { + "type": "statement", + "named": true + } + ] + } + }, + { + "type": "binary_expression", + "named": true, + "fields": { + "left": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "preproc_defined", + "named": true + } + ] + }, + "operator": { + "multiple": false, + "required": true, + "types": [ + { + "type": "!=", + "named": false + }, + { + "type": "%", + "named": false + }, + { + "type": "&", + "named": false + }, + { + "type": "&&", + "named": false + }, + { + "type": "*", + "named": false + }, + { + "type": "+", + "named": false + }, + { + "type": "-", + "named": false + }, + { + "type": "/", + "named": false + }, + { + "type": "<", + "named": false + }, + { + "type": "<<", + "named": false + }, + { + "type": "<=", + "named": false + }, + { + "type": "==", + "named": false + }, + { + "type": ">", + "named": false + }, + { + "type": ">=", + "named": false + }, + { + "type": ">>", + "named": false + }, + { + "type": "^", + "named": false + }, + { + "type": "|", + "named": false + }, + { + "type": "||", + "named": false + } + ] + }, + "right": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "preproc_defined", + "named": true + } + ] + } + } + }, + { + "type": "bitfield_clause", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + }, + { + "type": "break_statement", + "named": true, + "fields": {} + }, + { + "type": "call_expression", + "named": true, + "fields": { + "arguments": { + "multiple": false, + "required": true, + "types": [ + { + "type": "argument_list", + "named": true + } + ] + }, + "function": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + } + }, + { + "type": "case_statement", + "named": true, + "fields": { + "value": { + "multiple": false, + "required": false, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + }, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "attributed_statement", + "named": true + }, + { + "type": "break_statement", + "named": true + }, + { + "type": "compound_statement", + "named": true + }, + { + "type": "continue_statement", + "named": true + }, + { + "type": "declaration", + "named": true + }, + { + "type": "do_statement", + "named": true + }, + { + "type": "expression_statement", + "named": true + }, + { + "type": "for_statement", + "named": true + }, + { + "type": "goto_statement", + "named": true + }, + { + "type": "if_statement", + "named": true + }, + { + "type": "labeled_statement", + "named": true + }, + { + "type": "return_statement", + "named": true + }, + { + "type": "seh_leave_statement", + "named": true + }, + { + "type": "seh_try_statement", + "named": true + }, + { + "type": "switch_statement", + "named": true + }, + { + "type": "type_definition", + "named": true + }, + { + "type": "while_statement", + "named": true + } + ] + } + }, + { + "type": "cast_expression", + "named": true, + "fields": { + "type": { + "multiple": false, + "required": true, + "types": [ + { + "type": "type_descriptor", + "named": true + } + ] + }, + "value": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + } + }, + { + "type": "char_literal", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "character", + "named": true + }, + { + "type": "escape_sequence", + "named": true + } + ] + } + }, + { + "type": "comma_expression", + "named": true, + "fields": { + "left": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + }, + "right": { + "multiple": false, + "required": true, + "types": [ + { + "type": "comma_expression", + "named": true + }, + { + "type": "expression", + "named": true + } + ] + } + } + }, + { + "type": "compound_literal_expression", + "named": true, + "fields": { + "type": { + "multiple": false, + "required": true, + "types": [ + { + "type": "type_descriptor", + "named": true + } + ] + }, + "value": { + "multiple": false, + "required": true, + "types": [ + { + "type": "initializer_list", + "named": true + } + ] + } + } + }, + { + "type": "compound_statement", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "declaration", + "named": true + }, + { + "type": "function_definition", + "named": true + }, + { + "type": "linkage_specification", + "named": true + }, + { + "type": "preproc_call", + "named": true + }, + { + "type": "preproc_def", + "named": true + }, + { + "type": "preproc_function_def", + "named": true + }, + { + "type": "preproc_if", + "named": true + }, + { + "type": "preproc_ifdef", + "named": true + }, + { + "type": "preproc_include", + "named": true + }, + { + "type": "statement", + "named": true + }, + { + "type": "type_definition", + "named": true + }, + { + "type": "type_specifier", + "named": true + } + ] + } + }, + { + "type": "concatenated_string", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + }, + { + "type": "string_literal", + "named": true + } + ] + } + }, + { + "type": "conditional_expression", + "named": true, + "fields": { + "alternative": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + }, + "condition": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + }, + "consequence": { + "multiple": false, + "required": false, + "types": [ + { + "type": "comma_expression", + "named": true + }, + { + "type": "expression", + "named": true + } + ] + } + } + }, + { + "type": "continue_statement", + "named": true, + "fields": {} + }, + { + "type": "declaration", + "named": true, + "fields": { + "declarator": { + "multiple": true, + "required": true, + "types": [ + { + "type": "array_declarator", + "named": true + }, + { + "type": "attributed_declarator", + "named": true + }, + { + "type": "function_declarator", + "named": true + }, + { + "type": "gnu_asm_expression", + "named": true + }, + { + "type": "identifier", + "named": true + }, + { + "type": "init_declarator", + "named": true + }, + { + "type": "ms_call_modifier", + "named": true + }, + { + "type": "parenthesized_declarator", + "named": true + }, + { + "type": "pointer_declarator", + "named": true + } + ] + }, + "type": { + "multiple": false, + "required": true, + "types": [ + { + "type": "type_specifier", + "named": true + } + ] + } + }, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "attribute_declaration", + "named": true + }, + { + "type": "attribute_specifier", + "named": true + }, + { + "type": "ms_declspec_modifier", + "named": true + }, + { + "type": "storage_class_specifier", + "named": true + }, + { + "type": "type_qualifier", + "named": true + } + ] + } + }, + { + "type": "declaration_list", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "declaration", + "named": true + }, + { + "type": "function_definition", + "named": true + }, + { + "type": "linkage_specification", + "named": true + }, + { + "type": "preproc_call", + "named": true + }, + { + "type": "preproc_def", + "named": true + }, + { + "type": "preproc_function_def", + "named": true + }, + { + "type": "preproc_if", + "named": true + }, + { + "type": "preproc_ifdef", + "named": true + }, + { + "type": "preproc_include", + "named": true + }, + { + "type": "statement", + "named": true + }, + { + "type": "type_definition", + "named": true + }, + { + "type": "type_specifier", + "named": true + } + ] + } + }, + { + "type": "do_statement", + "named": true, + "fields": { + "body": { + "multiple": false, + "required": true, + "types": [ + { + "type": "statement", + "named": true + } + ] + }, + "condition": { + "multiple": false, + "required": true, + "types": [ + { + "type": "parenthesized_expression", + "named": true + } + ] + } + } + }, + { + "type": "else_clause", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "statement", + "named": true + } + ] + } + }, + { + "type": "enum_specifier", + "named": true, + "fields": { + "body": { + "multiple": false, + "required": false, + "types": [ + { + "type": "enumerator_list", + "named": true + } + ] + }, + "name": { + "multiple": false, + "required": false, + "types": [ + { + "type": "type_identifier", + "named": true + } + ] + }, + "underlying_type": { + "multiple": false, + "required": false, + "types": [ + { + "type": "primitive_type", + "named": true + } + ] + } + }, + "children": { + "multiple": false, + "required": false, + "types": [ + { + "type": "attribute_specifier", + "named": true + } + ] + } + }, + { + "type": "enumerator", + "named": true, + "fields": { + "name": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + }, + "value": { + "multiple": false, + "required": false, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + } + }, + { + "type": "enumerator_list", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "enumerator", + "named": true + }, + { + "type": "preproc_call", + "named": true + }, + { + "type": "preproc_if", + "named": true + }, + { + "type": "preproc_ifdef", + "named": true + } + ] + } + }, + { + "type": "expression_statement", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": false, + "types": [ + { + "type": "comma_expression", + "named": true + }, + { + "type": "expression", + "named": true + } + ] + } + }, + { + "type": "field_declaration", + "named": true, + "fields": { + "declarator": { + "multiple": true, + "required": false, + "types": [ + { + "type": "_field_declarator", + "named": true + } + ] + }, + "type": { + "multiple": false, + "required": true, + "types": [ + { + "type": "type_specifier", + "named": true + } + ] + } + }, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "attribute_declaration", + "named": true + }, + { + "type": "attribute_specifier", + "named": true + }, + { + "type": "bitfield_clause", + "named": true + }, + { + "type": "ms_declspec_modifier", + "named": true + }, + { + "type": "storage_class_specifier", + "named": true + }, + { + "type": "type_qualifier", + "named": true + } + ] + } + }, + { + "type": "field_declaration_list", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "field_declaration", + "named": true + }, + { + "type": "preproc_call", + "named": true + }, + { + "type": "preproc_def", + "named": true + }, + { + "type": "preproc_function_def", + "named": true + }, + { + "type": "preproc_if", + "named": true + }, + { + "type": "preproc_ifdef", + "named": true + } + ] + } + }, + { + "type": "field_designator", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "field_identifier", + "named": true + } + ] + } + }, + { + "type": "field_expression", + "named": true, + "fields": { + "argument": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + }, + "field": { + "multiple": false, + "required": true, + "types": [ + { + "type": "field_identifier", + "named": true + } + ] + }, + "operator": { + "multiple": false, + "required": true, + "types": [ + { + "type": "->", + "named": false + }, + { + "type": ".", + "named": false + } + ] + } + } + }, + { + "type": "for_statement", + "named": true, + "fields": { + "body": { + "multiple": false, + "required": true, + "types": [ + { + "type": "statement", + "named": true + } + ] + }, + "condition": { + "multiple": false, + "required": false, + "types": [ + { + "type": "comma_expression", + "named": true + }, + { + "type": "expression", + "named": true + } + ] + }, + "initializer": { + "multiple": false, + "required": false, + "types": [ + { + "type": "comma_expression", + "named": true + }, + { + "type": "declaration", + "named": true + }, + { + "type": "expression", + "named": true + } + ] + }, + "update": { + "multiple": false, + "required": false, + "types": [ + { + "type": "comma_expression", + "named": true + }, + { + "type": "expression", + "named": true + } + ] + } + } + }, + { + "type": "function_declarator", + "named": true, + "fields": { + "declarator": { + "multiple": false, + "required": true, + "types": [ + { + "type": "_declarator", + "named": true + }, + { + "type": "_field_declarator", + "named": true + }, + { + "type": "_type_declarator", + "named": true + } + ] + }, + "parameters": { + "multiple": false, + "required": true, + "types": [ + { + "type": "parameter_list", + "named": true + } + ] + } + }, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "attribute_specifier", + "named": true + }, + { + "type": "call_expression", + "named": true + }, + { + "type": "gnu_asm_expression", + "named": true + }, + { + "type": "identifier", + "named": true + } + ] + } + }, + { + "type": "function_definition", + "named": true, + "fields": { + "body": { + "multiple": false, + "required": true, + "types": [ + { + "type": "compound_statement", + "named": true + } + ] + }, + "declarator": { + "multiple": false, + "required": true, + "types": [ + { + "type": "_declarator", + "named": true + } + ] + }, + "type": { + "multiple": false, + "required": true, + "types": [ + { + "type": "type_specifier", + "named": true + } + ] + } + }, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "attribute_declaration", + "named": true + }, + { + "type": "attribute_specifier", + "named": true + }, + { + "type": "declaration", + "named": true + }, + { + "type": "ms_call_modifier", + "named": true + }, + { + "type": "ms_declspec_modifier", + "named": true + }, + { + "type": "storage_class_specifier", + "named": true + }, + { + "type": "type_qualifier", + "named": true + } + ] + } + }, + { + "type": "generic_expression", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "type_descriptor", + "named": true + } + ] + } + }, + { + "type": "gnu_asm_clobber_list", + "named": true, + "fields": { + "register": { + "multiple": true, + "required": false, + "types": [ + { + "type": "concatenated_string", + "named": true + }, + { + "type": "string_literal", + "named": true + } + ] + } + } + }, + { + "type": "gnu_asm_expression", + "named": true, + "fields": { + "assembly_code": { + "multiple": false, + "required": true, + "types": [ + { + "type": "concatenated_string", + "named": true + }, + { + "type": "string_literal", + "named": true + } + ] + }, + "clobbers": { + "multiple": false, + "required": false, + "types": [ + { + "type": "gnu_asm_clobber_list", + "named": true + } + ] + }, + "goto_labels": { + "multiple": false, + "required": false, + "types": [ + { + "type": "gnu_asm_goto_list", + "named": true + } + ] + }, + "input_operands": { + "multiple": false, + "required": false, + "types": [ + { + "type": "gnu_asm_input_operand_list", + "named": true + } + ] + }, + "output_operands": { + "multiple": false, + "required": false, + "types": [ + { + "type": "gnu_asm_output_operand_list", + "named": true + } + ] + } + }, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "gnu_asm_qualifier", + "named": true + } + ] + } + }, + { + "type": "gnu_asm_goto_list", + "named": true, + "fields": { + "label": { + "multiple": true, + "required": false, + "types": [ + { + "type": "identifier", + "named": true + } + ] + } + } + }, + { + "type": "gnu_asm_input_operand", + "named": true, + "fields": { + "constraint": { + "multiple": false, + "required": true, + "types": [ + { + "type": "string_literal", + "named": true + } + ] + }, + "symbol": { + "multiple": false, + "required": false, + "types": [ + { + "type": "identifier", + "named": true + } + ] + }, + "value": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + } + }, + { + "type": "gnu_asm_input_operand_list", + "named": true, + "fields": { + "operand": { + "multiple": true, + "required": false, + "types": [ + { + "type": "gnu_asm_input_operand", + "named": true + } + ] + } + } + }, + { + "type": "gnu_asm_output_operand", + "named": true, + "fields": { + "constraint": { + "multiple": false, + "required": true, + "types": [ + { + "type": "string_literal", + "named": true + } + ] + }, + "symbol": { + "multiple": false, + "required": false, + "types": [ + { + "type": "identifier", + "named": true + } + ] + }, + "value": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + } + } + }, + { + "type": "gnu_asm_output_operand_list", + "named": true, + "fields": { + "operand": { + "multiple": true, + "required": false, + "types": [ + { + "type": "gnu_asm_output_operand", + "named": true + } + ] + } + } + }, + { + "type": "gnu_asm_qualifier", + "named": true, + "fields": {} + }, + { + "type": "goto_statement", + "named": true, + "fields": { + "label": { + "multiple": false, + "required": true, + "types": [ + { + "type": "statement_identifier", + "named": true + } + ] + } + } + }, + { + "type": "if_statement", + "named": true, + "fields": { + "alternative": { + "multiple": false, + "required": false, + "types": [ + { + "type": "else_clause", + "named": true + } + ] + }, + "condition": { + "multiple": false, + "required": true, + "types": [ + { + "type": "parenthesized_expression", + "named": true + } + ] + }, + "consequence": { + "multiple": false, + "required": true, + "types": [ + { + "type": "statement", + "named": true + } + ] + } + } + }, + { + "type": "init_declarator", + "named": true, + "fields": { + "declarator": { + "multiple": false, + "required": true, + "types": [ + { + "type": "_declarator", + "named": true + } + ] + }, + "value": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "initializer_list", + "named": true + } + ] + } + } + }, + { + "type": "initializer_list", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "initializer_list", + "named": true + }, + { + "type": "initializer_pair", + "named": true + } + ] + } + }, + { + "type": "initializer_pair", + "named": true, + "fields": { + "designator": { + "multiple": true, + "required": true, + "types": [ + { + "type": "field_designator", + "named": true + }, + { + "type": "field_identifier", + "named": true + }, + { + "type": "subscript_designator", + "named": true + }, + { + "type": "subscript_range_designator", + "named": true + } + ] + }, + "value": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "initializer_list", + "named": true + } + ] + } + } + }, + { + "type": "labeled_statement", + "named": true, + "fields": { + "label": { + "multiple": false, + "required": true, + "types": [ + { + "type": "statement_identifier", + "named": true + } + ] + } + }, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "statement", + "named": true + } + ] + } + }, + { + "type": "linkage_specification", + "named": true, + "fields": { + "body": { + "multiple": false, + "required": true, + "types": [ + { + "type": "declaration", + "named": true + }, + { + "type": "declaration_list", + "named": true + }, + { + "type": "function_definition", + "named": true + } + ] + }, + "value": { + "multiple": false, + "required": true, + "types": [ + { + "type": "string_literal", + "named": true + } + ] + } + } + }, + { + "type": "macro_type_specifier", + "named": true, + "fields": { + "name": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + }, + "type": { + "multiple": false, + "required": true, + "types": [ + { + "type": "type_descriptor", + "named": true + } + ] + } + } + }, + { + "type": "ms_based_modifier", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "argument_list", + "named": true + } + ] + } + }, + { + "type": "ms_call_modifier", + "named": true, + "fields": {} + }, + { + "type": "ms_declspec_modifier", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + } + }, + { + "type": "ms_pointer_modifier", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "ms_restrict_modifier", + "named": true + }, + { + "type": "ms_signed_ptr_modifier", + "named": true + }, + { + "type": "ms_unaligned_ptr_modifier", + "named": true + }, + { + "type": "ms_unsigned_ptr_modifier", + "named": true + } + ] + } + }, + { + "type": "ms_unaligned_ptr_modifier", + "named": true, + "fields": {} + }, + { + "type": "null", + "named": true, + "fields": {} + }, + { + "type": "offsetof_expression", + "named": true, + "fields": { + "member": { + "multiple": false, + "required": true, + "types": [ + { + "type": "field_identifier", + "named": true + } + ] + }, + "type": { + "multiple": false, + "required": true, + "types": [ + { + "type": "type_descriptor", + "named": true + } + ] + } + } + }, + { + "type": "parameter_declaration", + "named": true, + "fields": { + "declarator": { + "multiple": false, + "required": false, + "types": [ + { + "type": "_abstract_declarator", + "named": true + }, + { + "type": "_declarator", + "named": true + } + ] + }, + "type": { + "multiple": false, + "required": true, + "types": [ + { + "type": "type_specifier", + "named": true + } + ] + } + }, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "attribute_declaration", + "named": true + }, + { + "type": "attribute_specifier", + "named": true + }, + { + "type": "ms_declspec_modifier", + "named": true + }, + { + "type": "storage_class_specifier", + "named": true + }, + { + "type": "type_qualifier", + "named": true + } + ] + } + }, + { + "type": "parameter_list", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "identifier", + "named": true + }, + { + "type": "parameter_declaration", + "named": true + }, + { + "type": "variadic_parameter", + "named": true + } + ] + } + }, + { + "type": "parenthesized_declarator", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "_declarator", + "named": true + }, + { + "type": "_field_declarator", + "named": true + }, + { + "type": "_type_declarator", + "named": true + }, + { + "type": "ms_call_modifier", + "named": true + } + ] + } + }, + { + "type": "parenthesized_expression", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "comma_expression", + "named": true + }, + { + "type": "expression", + "named": true + }, + { + "type": "preproc_defined", + "named": true + } + ] + } + }, + { + "type": "pointer_declarator", + "named": true, + "fields": { + "declarator": { + "multiple": false, + "required": true, + "types": [ + { + "type": "_declarator", + "named": true + }, + { + "type": "_field_declarator", + "named": true + }, + { + "type": "_type_declarator", + "named": true + } + ] + } + }, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "ms_based_modifier", + "named": true + }, + { + "type": "ms_pointer_modifier", + "named": true + }, + { + "type": "type_qualifier", + "named": true + } + ] + } + }, + { + "type": "pointer_expression", + "named": true, + "fields": { + "argument": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + }, + "operator": { + "multiple": false, + "required": true, + "types": [ + { + "type": "&", + "named": false + }, + { + "type": "*", + "named": false + } + ] + } + } + }, + { + "type": "preproc_call", + "named": true, + "fields": { + "argument": { + "multiple": false, + "required": false, + "types": [ + { + "type": "preproc_arg", + "named": true + } + ] + }, + "directive": { + "multiple": false, + "required": true, + "types": [ + { + "type": "preproc_directive", + "named": true + } + ] + } + } + }, + { + "type": "preproc_def", + "named": true, + "fields": { + "name": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + }, + "value": { + "multiple": false, + "required": false, + "types": [ + { + "type": "preproc_arg", + "named": true + } + ] + } + } + }, + { + "type": "preproc_defined", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + } + }, + { + "type": "preproc_elif", + "named": true, + "fields": { + "alternative": { + "multiple": false, + "required": false, + "types": [ + { + "type": "preproc_elif", + "named": true + }, + { + "type": "preproc_elifdef", + "named": true + }, + { + "type": "preproc_else", + "named": true + } + ] + }, + "condition": { + "multiple": false, + "required": true, + "types": [ + { + "type": "binary_expression", + "named": true + }, + { + "type": "call_expression", + "named": true + }, + { + "type": "char_literal", + "named": true + }, + { + "type": "identifier", + "named": true + }, + { + "type": "number_literal", + "named": true + }, + { + "type": "parenthesized_expression", + "named": true + }, + { + "type": "preproc_defined", + "named": true + }, + { + "type": "unary_expression", + "named": true + } + ] + } + }, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "declaration", + "named": true + }, + { + "type": "enumerator", + "named": true + }, + { + "type": "field_declaration", + "named": true + }, + { + "type": "function_definition", + "named": true + }, + { + "type": "linkage_specification", + "named": true + }, + { + "type": "preproc_call", + "named": true + }, + { + "type": "preproc_def", + "named": true + }, + { + "type": "preproc_function_def", + "named": true + }, + { + "type": "preproc_if", + "named": true + }, + { + "type": "preproc_ifdef", + "named": true + }, + { + "type": "preproc_include", + "named": true + }, + { + "type": "statement", + "named": true + }, + { + "type": "type_definition", + "named": true + }, + { + "type": "type_specifier", + "named": true + } + ] + } + }, + { + "type": "preproc_elifdef", + "named": true, + "fields": { + "alternative": { + "multiple": false, + "required": false, + "types": [ + { + "type": "preproc_elif", + "named": true + }, + { + "type": "preproc_elifdef", + "named": true + }, + { + "type": "preproc_else", + "named": true + } + ] + }, + "name": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + } + }, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "declaration", + "named": true + }, + { + "type": "enumerator", + "named": true + }, + { + "type": "field_declaration", + "named": true + }, + { + "type": "function_definition", + "named": true + }, + { + "type": "linkage_specification", + "named": true + }, + { + "type": "preproc_call", + "named": true + }, + { + "type": "preproc_def", + "named": true + }, + { + "type": "preproc_function_def", + "named": true + }, + { + "type": "preproc_if", + "named": true + }, + { + "type": "preproc_ifdef", + "named": true + }, + { + "type": "preproc_include", + "named": true + }, + { + "type": "statement", + "named": true + }, + { + "type": "type_definition", + "named": true + }, + { + "type": "type_specifier", + "named": true + } + ] + } + }, + { + "type": "preproc_else", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "declaration", + "named": true + }, + { + "type": "enumerator", + "named": true + }, + { + "type": "field_declaration", + "named": true + }, + { + "type": "function_definition", + "named": true + }, + { + "type": "linkage_specification", + "named": true + }, + { + "type": "preproc_call", + "named": true + }, + { + "type": "preproc_def", + "named": true + }, + { + "type": "preproc_function_def", + "named": true + }, + { + "type": "preproc_if", + "named": true + }, + { + "type": "preproc_ifdef", + "named": true + }, + { + "type": "preproc_include", + "named": true + }, + { + "type": "statement", + "named": true + }, + { + "type": "type_definition", + "named": true + }, + { + "type": "type_specifier", + "named": true + } + ] + } + }, + { + "type": "preproc_function_def", + "named": true, + "fields": { + "name": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + }, + "parameters": { + "multiple": false, + "required": true, + "types": [ + { + "type": "preproc_params", + "named": true + } + ] + }, + "value": { + "multiple": false, + "required": false, + "types": [ + { + "type": "preproc_arg", + "named": true + } + ] + } + } + }, + { + "type": "preproc_if", + "named": true, + "fields": { + "alternative": { + "multiple": false, + "required": false, + "types": [ + { + "type": "preproc_elif", + "named": true + }, + { + "type": "preproc_elifdef", + "named": true + }, + { + "type": "preproc_else", + "named": true + } + ] + }, + "condition": { + "multiple": false, + "required": true, + "types": [ + { + "type": "binary_expression", + "named": true + }, + { + "type": "call_expression", + "named": true + }, + { + "type": "char_literal", + "named": true + }, + { + "type": "identifier", + "named": true + }, + { + "type": "number_literal", + "named": true + }, + { + "type": "parenthesized_expression", + "named": true + }, + { + "type": "preproc_defined", + "named": true + }, + { + "type": "unary_expression", + "named": true + } + ] + } + }, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "declaration", + "named": true + }, + { + "type": "enumerator", + "named": true + }, + { + "type": "field_declaration", + "named": true + }, + { + "type": "function_definition", + "named": true + }, + { + "type": "linkage_specification", + "named": true + }, + { + "type": "preproc_call", + "named": true + }, + { + "type": "preproc_def", + "named": true + }, + { + "type": "preproc_function_def", + "named": true + }, + { + "type": "preproc_if", + "named": true + }, + { + "type": "preproc_ifdef", + "named": true + }, + { + "type": "preproc_include", + "named": true + }, + { + "type": "statement", + "named": true + }, + { + "type": "type_definition", + "named": true + }, + { + "type": "type_specifier", + "named": true + } + ] + } + }, + { + "type": "preproc_ifdef", + "named": true, + "fields": { + "alternative": { + "multiple": false, + "required": false, + "types": [ + { + "type": "preproc_elif", + "named": true + }, + { + "type": "preproc_elifdef", + "named": true + }, + { + "type": "preproc_else", + "named": true + } + ] + }, + "name": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + } + }, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "declaration", + "named": true + }, + { + "type": "enumerator", + "named": true + }, + { + "type": "field_declaration", + "named": true + }, + { + "type": "function_definition", + "named": true + }, + { + "type": "linkage_specification", + "named": true + }, + { + "type": "preproc_call", + "named": true + }, + { + "type": "preproc_def", + "named": true + }, + { + "type": "preproc_function_def", + "named": true + }, + { + "type": "preproc_if", + "named": true + }, + { + "type": "preproc_ifdef", + "named": true + }, + { + "type": "preproc_include", + "named": true + }, + { + "type": "statement", + "named": true + }, + { + "type": "type_definition", + "named": true + }, + { + "type": "type_specifier", + "named": true + } + ] + } + }, + { + "type": "preproc_include", + "named": true, + "fields": { + "path": { + "multiple": false, + "required": true, + "types": [ + { + "type": "call_expression", + "named": true + }, + { + "type": "identifier", + "named": true + }, + { + "type": "string_literal", + "named": true + }, + { + "type": "system_lib_string", + "named": true + } + ] + } + } + }, + { + "type": "preproc_params", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "identifier", + "named": true + } + ] + } + }, + { + "type": "return_statement", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": false, + "types": [ + { + "type": "comma_expression", + "named": true + }, + { + "type": "expression", + "named": true + } + ] + } + }, + { + "type": "seh_except_clause", + "named": true, + "fields": { + "body": { + "multiple": false, + "required": true, + "types": [ + { + "type": "compound_statement", + "named": true + } + ] + }, + "filter": { + "multiple": false, + "required": true, + "types": [ + { + "type": "parenthesized_expression", + "named": true + } + ] + } + } + }, + { + "type": "seh_finally_clause", + "named": true, + "fields": { + "body": { + "multiple": false, + "required": true, + "types": [ + { + "type": "compound_statement", + "named": true + } + ] + } + } + }, + { + "type": "seh_leave_statement", + "named": true, + "fields": {} + }, + { + "type": "seh_try_statement", + "named": true, + "fields": { + "body": { + "multiple": false, + "required": true, + "types": [ + { + "type": "compound_statement", + "named": true + } + ] + } + }, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "seh_except_clause", + "named": true + }, + { + "type": "seh_finally_clause", + "named": true + } + ] + } + }, + { + "type": "sized_type_specifier", + "named": true, + "fields": { + "type": { + "multiple": false, + "required": false, + "types": [ + { + "type": "primitive_type", + "named": true + }, + { + "type": "type_identifier", + "named": true + } + ] + } + } + }, + { + "type": "sizeof_expression", + "named": true, + "fields": { + "type": { + "multiple": false, + "required": false, + "types": [ + { + "type": "type_descriptor", + "named": true + } + ] + }, + "value": { + "multiple": false, + "required": false, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + } + }, + { + "type": "storage_class_specifier", + "named": true, + "fields": {} + }, + { + "type": "string_literal", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "escape_sequence", + "named": true + }, + { + "type": "string_content", + "named": true + } + ] + } + }, + { + "type": "struct_specifier", + "named": true, + "fields": { + "body": { + "multiple": false, + "required": false, + "types": [ + { + "type": "field_declaration_list", + "named": true + } + ] + }, + "name": { + "multiple": false, + "required": false, + "types": [ + { + "type": "type_identifier", + "named": true + } + ] + } + }, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "attribute_specifier", + "named": true + }, + { + "type": "ms_declspec_modifier", + "named": true + } + ] + } + }, + { + "type": "subscript_designator", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + }, + { + "type": "subscript_expression", + "named": true, + "fields": { + "argument": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + }, + "index": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + } + }, + { + "type": "subscript_range_designator", + "named": true, + "fields": { + "end": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + }, + "start": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + } + }, + { + "type": "switch_statement", + "named": true, + "fields": { + "body": { + "multiple": false, + "required": true, + "types": [ + { + "type": "compound_statement", + "named": true + } + ] + }, + "condition": { + "multiple": false, + "required": true, + "types": [ + { + "type": "parenthesized_expression", + "named": true + } + ] + } + } + }, + { + "type": "translation_unit", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "attributed_statement", + "named": true + }, + { + "type": "break_statement", + "named": true + }, + { + "type": "case_statement", + "named": true + }, + { + "type": "compound_statement", + "named": true + }, + { + "type": "continue_statement", + "named": true + }, + { + "type": "declaration", + "named": true + }, + { + "type": "do_statement", + "named": true + }, + { + "type": "expression_statement", + "named": true + }, + { + "type": "for_statement", + "named": true + }, + { + "type": "function_definition", + "named": true + }, + { + "type": "goto_statement", + "named": true + }, + { + "type": "if_statement", + "named": true + }, + { + "type": "labeled_statement", + "named": true + }, + { + "type": "linkage_specification", + "named": true + }, + { + "type": "preproc_call", + "named": true + }, + { + "type": "preproc_def", + "named": true + }, + { + "type": "preproc_function_def", + "named": true + }, + { + "type": "preproc_if", + "named": true + }, + { + "type": "preproc_ifdef", + "named": true + }, + { + "type": "preproc_include", + "named": true + }, + { + "type": "return_statement", + "named": true + }, + { + "type": "switch_statement", + "named": true + }, + { + "type": "type_definition", + "named": true + }, + { + "type": "type_specifier", + "named": true + }, + { + "type": "while_statement", + "named": true + } + ] + } + }, + { + "type": "type_definition", + "named": true, + "fields": { + "declarator": { + "multiple": true, + "required": true, + "types": [ + { + "type": "_type_declarator", + "named": true + } + ] + }, + "type": { + "multiple": false, + "required": true, + "types": [ + { + "type": "type_specifier", + "named": true + } + ] + } + }, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "attribute_specifier", + "named": true + }, + { + "type": "type_qualifier", + "named": true + } + ] + } + }, + { + "type": "type_descriptor", + "named": true, + "fields": { + "declarator": { + "multiple": false, + "required": false, + "types": [ + { + "type": "_abstract_declarator", + "named": true + } + ] + }, + "type": { + "multiple": false, + "required": true, + "types": [ + { + "type": "type_specifier", + "named": true + } + ] + } + }, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "type_qualifier", + "named": true + } + ] + } + }, + { + "type": "type_qualifier", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": false, + "types": [ + { + "type": "alignas_qualifier", + "named": true + } + ] + } + }, + { + "type": "unary_expression", + "named": true, + "fields": { + "argument": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "preproc_defined", + "named": true + } + ] + }, + "operator": { + "multiple": false, + "required": true, + "types": [ + { + "type": "!", + "named": false + }, + { + "type": "+", + "named": false + }, + { + "type": "-", + "named": false + }, + { + "type": "~", + "named": false + } + ] + } + } + }, + { + "type": "union_specifier", + "named": true, + "fields": { + "body": { + "multiple": false, + "required": false, + "types": [ + { + "type": "field_declaration_list", + "named": true + } + ] + }, + "name": { + "multiple": false, + "required": false, + "types": [ + { + "type": "type_identifier", + "named": true + } + ] + } + }, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "attribute_specifier", + "named": true + }, + { + "type": "ms_declspec_modifier", + "named": true + } + ] + } + }, + { + "type": "update_expression", + "named": true, + "fields": { + "argument": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + }, + "operator": { + "multiple": false, + "required": true, + "types": [ + { + "type": "++", + "named": false + }, + { + "type": "--", + "named": false + } + ] + } + } + }, + { + "type": "variadic_parameter", + "named": true, + "fields": {} + }, + { + "type": "while_statement", + "named": true, + "fields": { + "body": { + "multiple": false, + "required": true, + "types": [ + { + "type": "statement", + "named": true + } + ] + }, + "condition": { + "multiple": false, + "required": true, + "types": [ + { + "type": "parenthesized_expression", + "named": true + } + ] + } + } + }, + { + "type": "\n", + "named": false + }, + { + "type": "!", + "named": false + }, + { + "type": "!=", + "named": false + }, + { + "type": "\"", + "named": false + }, + { + "type": "#define", + "named": false + }, + { + "type": "#elif", + "named": false + }, + { + "type": "#elifdef", + "named": false + }, + { + "type": "#elifndef", + "named": false + }, + { + "type": "#else", + "named": false + }, + { + "type": "#endif", + "named": false + }, + { + "type": "#if", + "named": false + }, + { + "type": "#ifdef", + "named": false + }, + { + "type": "#ifndef", + "named": false + }, + { + "type": "#include", + "named": false + }, + { + "type": "%", + "named": false + }, + { + "type": "%=", + "named": false + }, + { + "type": "&", + "named": false + }, + { + "type": "&&", + "named": false + }, + { + "type": "&=", + "named": false + }, + { + "type": "'", + "named": false + }, + { + "type": "(", + "named": false + }, + { + "type": ")", + "named": false + }, + { + "type": "*", + "named": false + }, + { + "type": "*=", + "named": false + }, + { + "type": "+", + "named": false + }, + { + "type": "++", + "named": false + }, + { + "type": "+=", + "named": false + }, + { + "type": ",", + "named": false + }, + { + "type": "-", + "named": false + }, + { + "type": "--", + "named": false + }, + { + "type": "-=", + "named": false + }, + { + "type": "->", + "named": false + }, + { + "type": ".", + "named": false + }, + { + "type": "...", + "named": false + }, + { + "type": "/", + "named": false + }, + { + "type": "/=", + "named": false + }, + { + "type": ":", + "named": false + }, + { + "type": "::", + "named": false + }, + { + "type": ";", + "named": false + }, + { + "type": "<", + "named": false + }, + { + "type": "<<", + "named": false + }, + { + "type": "<<=", + "named": false + }, + { + "type": "<=", + "named": false + }, + { + "type": "=", + "named": false + }, + { + "type": "==", + "named": false + }, + { + "type": ">", + "named": false + }, + { + "type": ">=", + "named": false + }, + { + "type": ">>", + "named": false + }, + { + "type": ">>=", + "named": false + }, + { + "type": "?", + "named": false + }, + { + "type": "L\"", + "named": false + }, + { + "type": "L'", + "named": false + }, + { + "type": "NULL", + "named": false + }, + { + "type": "U\"", + "named": false + }, + { + "type": "U'", + "named": false + }, + { + "type": "[", + "named": false + }, + { + "type": "[[", + "named": false + }, + { + "type": "]", + "named": false + }, + { + "type": "]]", + "named": false + }, + { + "type": "^", + "named": false + }, + { + "type": "^=", + "named": false + }, + { + "type": "_Alignas", + "named": false + }, + { + "type": "_Alignof", + "named": false + }, + { + "type": "_Atomic", + "named": false + }, + { + "type": "_Generic", + "named": false + }, + { + "type": "_Noreturn", + "named": false + }, + { + "type": "__alignof", + "named": false + }, + { + "type": "__alignof__", + "named": false + }, + { + "type": "__asm__", + "named": false + }, + { + "type": "__attribute__", + "named": false + }, + { + "type": "__based", + "named": false + }, + { + "type": "__cdecl", + "named": false + }, + { + "type": "__clrcall", + "named": false + }, + { + "type": "__declspec", + "named": false + }, + { + "type": "__except", + "named": false + }, + { + "type": "__extension__", + "named": false + }, + { + "type": "__fastcall", + "named": false + }, + { + "type": "__finally", + "named": false + }, + { + "type": "__forceinline", + "named": false + }, + { + "type": "__inline", + "named": false + }, + { + "type": "__inline__", + "named": false + }, + { + "type": "__leave", + "named": false + }, + { + "type": "__restrict__", + "named": false + }, + { + "type": "__stdcall", + "named": false + }, + { + "type": "__thiscall", + "named": false + }, + { + "type": "__thread", + "named": false + }, + { + "type": "__try", + "named": false + }, + { + "type": "__unaligned", + "named": false + }, + { + "type": "__vectorcall", + "named": false + }, + { + "type": "_alignof", + "named": false + }, + { + "type": "_unaligned", + "named": false + }, + { + "type": "alignas", + "named": false + }, + { + "type": "alignof", + "named": false + }, + { + "type": "asm", + "named": false + }, + { + "type": "auto", + "named": false + }, + { + "type": "break", + "named": false + }, + { + "type": "case", + "named": false + }, + { + "type": "character", + "named": true + }, + { + "type": "comment", + "named": true + }, + { + "type": "const", + "named": false + }, + { + "type": "constexpr", + "named": false + }, + { + "type": "continue", + "named": false + }, + { + "type": "default", + "named": false + }, + { + "type": "defined", + "named": false + }, + { + "type": "do", + "named": false + }, + { + "type": "else", + "named": false + }, + { + "type": "enum", + "named": false + }, + { + "type": "escape_sequence", + "named": true + }, + { + "type": "extern", + "named": false + }, + { + "type": "false", + "named": true + }, + { + "type": "field_identifier", + "named": true + }, + { + "type": "for", + "named": false + }, + { + "type": "goto", + "named": false + }, + { + "type": "identifier", + "named": true + }, + { + "type": "if", + "named": false + }, + { + "type": "inline", + "named": false + }, + { + "type": "long", + "named": false + }, + { + "type": "ms_restrict_modifier", + "named": true + }, + { + "type": "ms_signed_ptr_modifier", + "named": true + }, + { + "type": "ms_unsigned_ptr_modifier", + "named": true + }, + { + "type": "noreturn", + "named": false + }, + { + "type": "nullptr", + "named": false + }, + { + "type": "number_literal", + "named": true + }, + { + "type": "offsetof", + "named": false + }, + { + "type": "preproc_arg", + "named": true + }, + { + "type": "preproc_directive", + "named": true + }, + { + "type": "primitive_type", + "named": true + }, + { + "type": "register", + "named": false + }, + { + "type": "restrict", + "named": false + }, + { + "type": "return", + "named": false + }, + { + "type": "short", + "named": false + }, + { + "type": "signed", + "named": false + }, + { + "type": "sizeof", + "named": false + }, + { + "type": "statement_identifier", + "named": true + }, + { + "type": "static", + "named": false + }, + { + "type": "string_content", + "named": true + }, + { + "type": "struct", + "named": false + }, + { + "type": "switch", + "named": false + }, + { + "type": "system_lib_string", + "named": true + }, + { + "type": "thread_local", + "named": false + }, + { + "type": "true", + "named": true + }, + { + "type": "type_identifier", + "named": true + }, + { + "type": "typedef", + "named": false + }, + { + "type": "u\"", + "named": false + }, + { + "type": "u'", + "named": false + }, + { + "type": "u8\"", + "named": false + }, + { + "type": "u8'", + "named": false + }, + { + "type": "union", + "named": false + }, + { + "type": "unsigned", + "named": false + }, + { + "type": "volatile", + "named": false + }, + { + "type": "while", + "named": false + }, + { + "type": "{", + "named": false + }, + { + "type": "|", + "named": false + }, + { + "type": "|=", + "named": false + }, + { + "type": "||", + "named": false + }, + { + "type": "}", + "named": false + }, + { + "type": "~", + "named": false + } +] \ No newline at end of file