@shapeshift-labs/frontier-lang-parser 0.3.71 → 0.3.72

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/metadata.js CHANGED
@@ -264,6 +264,11 @@ function mergeResourceGraphBlocks(blocks) {
264
264
  lifetimeRelationIds: blocks.flatMap((block) => ids(block.graph?.lifetimeRelations)),
265
265
  borrowScopeIds: blocks.flatMap((block) => ids(block.graph?.borrowScopes)),
266
266
  unsafeBoundaryIds: blocks.flatMap((block) => ids(block.graph?.unsafeBoundaries)),
267
+ memoryRegionIds: blocks.flatMap((block) => ids(block.graph?.memoryRegions)),
268
+ dataLayoutIds: blocks.flatMap((block) => ids(block.graph?.dataLayouts)),
269
+ pointerEdgeIds: blocks.flatMap((block) => ids(block.graph?.pointerEdges)),
270
+ memoryAccessIds: blocks.flatMap((block) => ids(block.graph?.memoryAccesses)),
271
+ abiBoundaryIds: blocks.flatMap((block) => ids(block.graph?.abiBoundaries)),
267
272
  conflictIds: blocks.flatMap((block) => ids(block.graph?.conflicts)),
268
273
  proofObligationIds: blocks.flatMap((block) => ids(block.graph?.proofObligations)),
269
274
  summary: {
@@ -280,6 +285,11 @@ function mergeResourceGraphBlocks(blocks) {
280
285
  lifetimeRelationCount: sum(blocks, 'lifetimeRelations'),
281
286
  borrowScopeCount: sum(blocks, 'borrowScopes'),
282
287
  unsafeBoundaryCount: sum(blocks, 'unsafeBoundaries'),
288
+ memoryRegionCount: sum(blocks, 'memoryRegions'),
289
+ dataLayoutCount: sum(blocks, 'dataLayouts'),
290
+ pointerEdgeCount: sum(blocks, 'pointerEdges'),
291
+ memoryAccessCount: sum(blocks, 'memoryAccesses'),
292
+ abiBoundaryCount: sum(blocks, 'abiBoundaries'),
283
293
  conflictCount: sum(blocks, 'conflicts'),
284
294
  proofObligationCount: sum(blocks, 'proofObligations'),
285
295
  unsafeBoundariesWithoutProof: sum(blocks, 'unsafeBoundariesWithoutProof')
@@ -12,6 +12,11 @@ const GROUPS = {
12
12
  lifetimeRelation: 'lifetimeRelations',
13
13
  borrowScope: 'borrowScopes',
14
14
  unsafeBoundary: 'unsafeBoundaries',
15
+ memoryRegion: 'memoryRegions',
16
+ dataLayout: 'dataLayouts',
17
+ pointerEdge: 'pointerEdges',
18
+ memoryAccess: 'memoryAccesses',
19
+ abiBoundary: 'abiBoundaries',
15
20
  conflict: 'conflicts',
16
21
  proofObligation: 'proofObligations'
17
22
  };
@@ -41,6 +46,11 @@ export function parseResourceGraphBlock(block) {
41
46
  borrowScopes: [],
42
47
  borrowScopeRegions: [],
43
48
  unsafeBoundaries: [],
49
+ memoryRegions: [],
50
+ dataLayouts: [],
51
+ pointerEdges: [],
52
+ memoryAccesses: [],
53
+ abiBoundaries: [],
44
54
  conflicts: [],
45
55
  proofObligations: [],
46
56
  parser: { status: 'authored', errors: rowIdentity.errors },
@@ -54,14 +64,14 @@ export function parseResourceGraphBlock(block) {
54
64
  metadata: { name }
55
65
  };
56
66
 
57
- for (const rawLine of block.body.split('\n')) {
58
- const line = rawLine.trim();
67
+ for (const authoredLine of readAuthoredLines(block)) {
68
+ const line = authoredLine.text;
59
69
  if (!line || line.startsWith('#') || isGraphPropertyLine(line)) continue;
60
70
  const match = /^([A-Za-z_$][\w$-]*)\s+([A-Za-z_$][\w$-]*)(.*)$/.exec(line);
61
71
  if (!match) continue;
62
72
  const [, rowKind, rowName, rest] = match;
63
73
  const normalized = normalizeRowKind(rowKind);
64
- const record = parseResourceRecord(normalized, rowName, rest, graph);
74
+ const record = parseResourceRecord(normalized, rowName, rest, graph, authoredLine);
65
75
  const group = GROUPS[normalized];
66
76
  if (record && group) rowIdentity.push(graph[group], record, { rowKind, normalizedRowKind: normalized, name: rowName });
67
77
  }
@@ -73,6 +83,7 @@ export function parseResourceGraphBlock(block) {
73
83
  resourceIds: ids(graph.resources),
74
84
  ownerIds: ids(graph.owners),
75
85
  lifetimeRegionIds: ids(graph.lifetimeRegions),
86
+ lowLevelPrimitiveIds: ids([...graph.memoryRegions, ...graph.dataLayouts, ...graph.pointerEdges, ...graph.memoryAccesses, ...graph.abiBoundaries]),
76
87
  sourcePaths: unique(allRecords(graph).map((record) => record.sourcePath)),
77
88
  evidenceIds: unique([...graph.evidenceIds, ...allRecords(graph).flatMap((record) => record.evidenceIds ?? [])]),
78
89
  blockerReasonCodes: unique(graph.conflicts.map((record) => record.reasonCode))
@@ -90,8 +101,8 @@ export function parseResourceGraphBlock(block) {
90
101
  };
91
102
  }
92
103
 
93
- function parseResourceRecord(kind, name, text, graph) {
94
- const common = commonRecord(kind, name, text, graph);
104
+ function parseResourceRecord(kind, name, text, graph, authoredLine = {}) {
105
+ const common = commonRecord(kind, name, text, graph, authoredLine);
95
106
  if (kind === 'resource') return cleanRecord({ ...common, resourceKind: readInlineWord('resourceKind', text) ?? readInlineWord('kind', text) ?? name, ownerId: readInlineWord('owner', text) ?? readInlineWord('ownerId', text), ownerName: readInlineWord('ownerName', text) });
96
107
  if (kind === 'owner') return cleanRecord({ ...common, ownerKind: readInlineWord('ownerKind', text) ?? readInlineWord('kind', text) ?? 'owner' });
97
108
  if (kind === 'loan') return cleanRecord({ ...common, resourceId: readInlineWord('resource', text) ?? readInlineWord('resourceId', text), ownerId: readInlineWord('owner', text) ?? readInlineWord('ownerId', text), lifetimeRegionId: readInlineWord('lifetime', text) ?? readInlineWord('lifetimeRegion', text) ?? readInlineWord('lifetimeRegionId', text), mode: readInlineWord('mode', text) ?? 'unknown', access: readInlineWord('access', text) });
@@ -103,18 +114,31 @@ function parseResourceRecord(kind, name, text, graph) {
103
114
  if (kind === 'lifetimeRelation') return cleanRecord({ ...common, relationKind: readInlineWord('relationKind', text) ?? readInlineWord('kind', text) ?? 'outlives', fromLifetimeId: readInlineWord('fromLifetime', text) ?? readInlineWord('fromLifetimeId', text) ?? readInlineWord('from', text), toLifetimeId: readInlineWord('toLifetime', text) ?? readInlineWord('toLifetimeId', text) ?? readInlineWord('to', text), from: readInlineWord('from', text), to: readInlineWord('to', text) });
104
115
  if (kind === 'borrowScope') return cleanRecord({ ...common, scopeKind: readInlineWord('scopeKind', text) ?? readInlineWord('kind', text) ?? 'borrow-scope', constraintKind: readInlineWord('constraintKind', text), constraintKinds: readInlineList(text, 'constraint', 'constraints', 'constraintKind', 'constraintKinds') ?? [], ownershipKind: readInlineWord('ownershipKind', text), lifetimeKind: readInlineWord('lifetimeKind', text), controlFlowKind: readInlineWord('controlFlowKind', text), sourceControlFlowId: readInlineWord('sourceControlFlow', text) ?? readInlineWord('sourceControlFlowId', text), lifetimeRegionId: readInlineWord('lifetime', text) ?? readInlineWord('lifetimeRegion', text) ?? readInlineWord('lifetimeRegionId', text), resourceId: readInlineWord('resource', text) ?? readInlineWord('resourceId', text) });
105
116
  if (kind === 'unsafeBoundary') return cleanRecord({ ...common, resourceId: readInlineWord('resource', text) ?? readInlineWord('resourceId', text), unsafeBoundary: true, proofStatus: readInlineWord('proofStatus', text) ?? readInlineWord('status', text) ?? 'missing', kind: readInlineWord('kind', text) });
117
+ if (kind === 'memoryRegion') return cleanRecord({ ...common, resourceId: readInlineWord('resource', text) ?? readInlineWord('resourceId', text), memoryKind: readInlineWord('memoryKind', text) ?? readInlineWord('kind', text) ?? name, regionKind: readInlineWord('regionKind', text), addressSpace: readInlineWord('addressSpace', text) ?? readInlineWord('space', text), address: readInlineWord('address', text) ?? readInlineWord('baseAddress', text), sizeBytes: readInlineNumber('sizeBytes', text) ?? readInlineNumber('size', text), alignmentBytes: readInlineNumber('alignmentBytes', text) ?? readInlineNumber('alignment', text), pointerWidth: readInlineNumber('pointerWidth', text), endian: readInlineWord('endian', text) ?? readInlineWord('endianness', text), volatile: readInlineFlag('volatile', text), atomic: readInlineFlag('atomic', text), shared: readInlineFlag('shared', text) });
118
+ if (kind === 'dataLayout') return cleanRecord({ ...common, resourceId: readInlineWord('resource', text) ?? readInlineWord('resourceId', text), typeId: readInlineWord('type', text) ?? readInlineWord('typeId', text), structId: readInlineWord('struct', text) ?? readInlineWord('structId', text), fieldId: readInlineWord('field', text) ?? readInlineWord('fieldId', text), bitfieldId: readInlineWord('bitfield', text) ?? readInlineWord('bitfieldId', text), layoutKind: readInlineWord('layoutKind', text) ?? readInlineWord('kind', text), repr: readInlineWord('repr', text), abi: readInlineWord('abi', text), endian: readInlineWord('endian', text) ?? readInlineWord('endianness', text), sizeBytes: readInlineNumber('sizeBytes', text) ?? readInlineNumber('size', text), alignmentBytes: readInlineNumber('alignmentBytes', text) ?? readInlineNumber('alignment', text), offsetBytes: readInlineNumber('offsetBytes', text) ?? readInlineNumber('offset', text), bitWidth: readInlineNumber('bitWidth', text) ?? readInlineNumber('width', text), fieldOrder: readInlineList(text, 'fieldOrder', 'fields'), constraintKinds: readInlineList(text, 'constraint', 'constraints', 'constraintKind', 'constraintKinds') });
119
+ if (kind === 'pointerEdge') return cleanRecord({ ...common, resourceId: readInlineWord('resource', text) ?? readInlineWord('resourceId', text), targetResourceId: readInlineWord('targetResource', text) ?? readInlineWord('targetResourceId', text) ?? readInlineWord('target', text), ownerId: readInlineWord('owner', text) ?? readInlineWord('ownerId', text), lifetimeRegionId: readInlineWord('lifetime', text) ?? readInlineWord('lifetimeRegion', text) ?? readInlineWord('lifetimeRegionId', text), pointerKind: readInlineWord('pointerKind', text) ?? readInlineWord('kind', text) ?? 'pointer', addressSpace: readInlineWord('addressSpace', text) ?? readInlineWord('space', text), pointerWidth: readInlineNumber('pointerWidth', text), aliasKind: readInlineWord('aliasKind', text), mode: readInlineWord('mode', text), provenance: readInlineWord('provenance', text), nullable: readInlineFlag('nullable', text), mutable: readInlineFlag('mutable', text) });
120
+ if (kind === 'memoryAccess') return cleanRecord({ ...common, resourceId: readInlineWord('resource', text) ?? readInlineWord('resourceId', text), accessKind: readInlineWord('accessKind', text) ?? readInlineWord('kind', text) ?? name, operationKind: readInlineWord('operation', text) ?? readInlineWord('operationKind', text), memoryOrder: readInlineWord('memoryOrder', text) ?? readInlineWord('ordering', text), lockId: readInlineWord('lock', text) ?? readInlineWord('lockId', text), synchronizationKey: readInlineWord('sync', text) ?? readInlineWord('synchronizationKey', text), reads: readInlineList(text, 'read', 'reads'), writes: readInlineList(text, 'write', 'writes'), volatile: readInlineFlag('volatile', text), atomic: readInlineFlag('atomic', text), proofStatus: readInlineWord('proofStatus', text) ?? readInlineWord('status', text) ?? 'missing' });
121
+ if (kind === 'abiBoundary') return cleanRecord({ ...common, resourceId: readInlineWord('resource', text) ?? readInlineWord('resourceId', text), callableId: readInlineWord('callable', text) ?? readInlineWord('callableId', text), functionId: readInlineWord('function', text) ?? readInlineWord('functionId', text), boundaryKind: readInlineWord('boundaryKind', text) ?? readInlineWord('kind', text) ?? 'abi-boundary', abi: readInlineWord('abi', text), abiKind: readInlineWord('abiKind', text), callingConvention: readInlineWord('callingConvention', text) ?? readInlineWord('convention', text), pointerWidth: readInlineNumber('pointerWidth', text), endian: readInlineWord('endian', text) ?? readInlineWord('endianness', text), ffiBoundary: readInlineWord('ffiBoundary', text), proofStatus: readInlineWord('proofStatus', text) ?? readInlineWord('status', text) ?? 'missing' });
106
122
  if (kind === 'conflict') return cleanRecord({ ...common, resourceId: readInlineWord('resource', text) ?? readInlineWord('resourceId', text), ownerId: readInlineWord('owner', text) ?? readInlineWord('ownerId', text), loanId: readInlineWord('loan', text) ?? readInlineWord('loanId', text), aliasId: readInlineWord('alias', text) ?? readInlineWord('aliasId', text), unsafeBoundaryId: readInlineWord('unsafeBoundary', text) ?? readInlineWord('unsafeBoundaryId', text), reasonCode: readInlineWord('reasonCode', text), message: readInlineQuoted('message', text), status: readInlineWord('status', text) ?? 'open', severity: readInlineWord('severity', text) ?? 'error' });
107
123
  if (kind === 'proofObligation') return cleanRecord({ ...common, resourceId: readInlineWord('resource', text) ?? readInlineWord('resourceId', text), conflictId: readInlineWord('conflict', text) ?? readInlineWord('conflictId', text), kind: readInlineWord('kind', text), status: readInlineWord('status', text) ?? 'open', statement: readInlineQuoted('statement', text) });
108
124
  return undefined;
109
125
  }
110
126
 
111
- function commonRecord(kind, name, text, graph) {
127
+ function commonRecord(kind, name, text, graph, authoredLine = {}) {
112
128
  return cleanRecord({
113
129
  recordKind: recordKind(kind),
114
130
  id: idFrom(text, `${recordPrefix(kind)}_${name}`),
115
131
  name,
116
132
  sourcePath: readInlineWord('sourcePath', text) ?? readInlineWord('path', text) ?? graph.sourcePath,
117
133
  sourceHash: readInlineWord('sourceHash', text) ?? graph.sourceHash,
134
+ sourceSpan: authoredLine.sourceSpan,
135
+ authoredSourceSpan: authoredLine.sourceSpan,
136
+ sourceMapIds: readInlineList(text, 'sourceMap', 'sourceMaps', 'sourceMapId', 'sourceMapIds'),
137
+ sourceMapMappingIds: readInlineList(text, 'sourceMapMapping', 'sourceMapMappings', 'sourceMapMappingId', 'sourceMapMappingIds'),
138
+ proofEvidenceIds: readInlineList(text, 'proofEvidence', 'proofEvidenceId', 'proofEvidenceIds'),
139
+ proofObligationIds: readInlineList(text, 'proofObligation', 'proofObligations', 'proofObligationId', 'proofObligationIds', 'obligation', 'obligations'),
140
+ missingEvidence: readInlineList(text, 'missingEvidence'),
141
+ failClosed: readInlineFlag('failClosed', text),
118
142
  evidenceIds: readInlineList(text, 'evidence', 'evidenceIds') ?? graph.evidenceIds,
119
143
  metadata: { authoredName: name }
120
144
  });
@@ -134,6 +158,11 @@ function summarize(graph) {
134
158
  lifetimeRelations: graph.lifetimeRelations.length,
135
159
  borrowScopes: graph.borrowScopes.length,
136
160
  unsafeBoundaries: graph.unsafeBoundaries.length,
161
+ memoryRegions: graph.memoryRegions.length,
162
+ dataLayouts: graph.dataLayouts.length,
163
+ pointerEdges: graph.pointerEdges.length,
164
+ memoryAccesses: graph.memoryAccesses.length,
165
+ abiBoundaries: graph.abiBoundaries.length,
137
166
  conflicts: graph.conflicts.length,
138
167
  proofObligations: graph.proofObligations.length,
139
168
  unsafeBoundariesWithoutProof: graph.unsafeBoundaries.filter((record) => record.proofStatus !== 'passed').length,
@@ -155,6 +184,11 @@ function allRecords(graph) {
155
184
  ...graph.lifetimeRelations,
156
185
  ...graph.borrowScopes,
157
186
  ...graph.unsafeBoundaries,
187
+ ...graph.memoryRegions,
188
+ ...graph.dataLayouts,
189
+ ...graph.pointerEdges,
190
+ ...graph.memoryAccesses,
191
+ ...graph.abiBoundaries,
158
192
  ...graph.conflicts,
159
193
  ...graph.proofObligations
160
194
  ];
@@ -165,6 +199,11 @@ function normalizeRowKind(kind) {
165
199
  if (kind === 'outlives' || kind === 'lifetimeRelation' || kind === 'lifeRelation') return 'lifetimeRelation';
166
200
  if (kind === 'borrow' || kind === 'borrowScope' || kind === 'borrowRegion') return 'borrowScope';
167
201
  if (kind === 'unsafe' || kind === 'unsafeBoundary') return 'unsafeBoundary';
202
+ if (kind === 'memory' || kind === 'memoryRegion' || kind === 'region') return 'memoryRegion';
203
+ if (kind === 'layout' || kind === 'dataLayout') return 'dataLayout';
204
+ if (kind === 'pointer' || kind === 'ptr' || kind === 'address') return 'pointerEdge';
205
+ if (kind === 'access' || kind === 'memoryAccess' || kind === 'atomic' || kind === 'volatile') return 'memoryAccess';
206
+ if (kind === 'abi' || kind === 'abiBoundary' || kind === 'callBoundary') return 'abiBoundary';
168
207
  if (kind === 'proof' || kind === 'obligation' || kind === 'proofObligation') return 'proofObligation';
169
208
  return kind;
170
209
  }
@@ -174,6 +213,11 @@ function recordKind(kind) {
174
213
  if (kind === 'lifetimeRelation') return 'lifetime-relation';
175
214
  if (kind === 'borrowScope') return 'borrow-scope';
176
215
  if (kind === 'unsafeBoundary') return 'unsafe-boundary';
216
+ if (kind === 'memoryRegion') return 'memory-region';
217
+ if (kind === 'dataLayout') return 'data-layout';
218
+ if (kind === 'pointerEdge') return 'pointer-edge';
219
+ if (kind === 'memoryAccess') return 'memory-access';
220
+ if (kind === 'abiBoundary') return 'abi-boundary';
177
221
  if (kind === 'proofObligation') return 'proof-obligation';
178
222
  return kind;
179
223
  }
@@ -195,6 +239,7 @@ function readListLine(label, body) {
195
239
  }
196
240
  function readInlineWord(label, text) { return new RegExp('(?:^|\\s)' + label + '\\s+([^\\s,]+)').exec(text)?.[1]?.trim(); }
197
241
  function readInlineQuoted(label, text) { return new RegExp("(?:^|\\s)" + label + "\\s+[\"']([^\"']+)[\"']").exec(text)?.[1]?.trim(); }
242
+ function readInlineFlag(label, text) { return new RegExp('(?:^|\\s)' + label + '(?:\\s|$)').test(text) || undefined; }
198
243
  function readInlineNumber(label, text) {
199
244
  const value = readInlineWord(label, text);
200
245
  return value === undefined ? undefined : Number(value);
@@ -208,6 +253,21 @@ function readInlineList(text, ...labels) {
208
253
  }
209
254
  function ids(records = []) { return records.map((record) => record?.id).filter(Boolean); }
210
255
  function unique(values = []) { return [...new Set(values.filter(Boolean))]; }
256
+ function readAuthoredLines(block) {
257
+ const lines = block.body.split('\n');
258
+ const records = [];
259
+ let lineStart = block.syntax?.bodyStartOffset ?? 0;
260
+ for (const rawLine of lines) {
261
+ const rawEnd = lineStart + rawLine.length;
262
+ const leading = /^\s*/.exec(rawLine)?.[0].length ?? 0;
263
+ const trailing = /\s*$/.exec(rawLine)?.[0].length ?? 0;
264
+ const startOffset = lineStart + leading;
265
+ const endOffset = Math.max(startOffset, rawEnd - trailing);
266
+ records.push({ text: rawLine.trim(), sourceSpan: typeof block.sourceSpan === 'function' ? block.sourceSpan(startOffset, endOffset) : undefined });
267
+ lineStart = rawEnd + 1;
268
+ }
269
+ return records;
270
+ }
211
271
  function cleanRecord(record) {
212
272
  return Object.fromEntries(Object.entries(record).filter(([, value]) => value !== undefined && (!Array.isArray(value) || value.length > 0)));
213
273
  }
@@ -16,8 +16,8 @@ export const ROW_SYNTAX_CONFIG = Object.freeze({
16
16
  runtimeCapabilities: rowConfig('runtimeCapabilityRow', 'runtime_capability_row', runtimeRows, normalizeRuntimeCapabilityRow),
17
17
  runtimeCapabilityMatrix: rowConfig('runtimeCapabilityRow', 'runtime_capability_row', runtimeRows, normalizeRuntimeCapabilityRow),
18
18
  runtimeHosts: rowConfig('runtimeCapabilityRow', 'runtime_capability_row', runtimeRows, normalizeRuntimeCapabilityRow),
19
- resourceGraph: rowConfig('resourceGraphRow', 'resource_graph_row', words('resource owner loan alias move drop escape lifetime lifetimeRegion life outlives lifetimeRelation lifeRelation borrow borrowScope borrowRegion unsafe unsafeBoundary conflict proof proofObligation obligation'), normalizeResourceGraphRow),
20
- semanticResourceGraph: rowConfig('resourceGraphRow', 'resource_graph_row', words('resource owner loan alias move drop escape lifetime lifetimeRegion life outlives lifetimeRelation lifeRelation borrow borrowScope borrowRegion unsafe unsafeBoundary conflict proof proofObligation obligation'), normalizeResourceGraphRow),
19
+ resourceGraph: rowConfig('resourceGraphRow', 'resource_graph_row', words('resource owner loan alias move drop escape lifetime lifetimeRegion life outlives lifetimeRelation lifeRelation borrow borrowScope borrowRegion unsafe unsafeBoundary memory memoryRegion region layout dataLayout pointer ptr address access memoryAccess atomic volatile abi abiBoundary callBoundary conflict proof proofObligation obligation'), normalizeResourceGraphRow),
20
+ semanticResourceGraph: rowConfig('resourceGraphRow', 'resource_graph_row', words('resource owner loan alias move drop escape lifetime lifetimeRegion life outlives lifetimeRelation lifeRelation borrow borrowScope borrowRegion unsafe unsafeBoundary memory memoryRegion region layout dataLayout pointer ptr address access memoryAccess atomic volatile abi abiBoundary callBoundary conflict proof proofObligation obligation'), normalizeResourceGraphRow),
21
21
  applicationSurface: rowConfig('applicationSurfaceRow', 'application_surface_row', appRows, normalizeApplicationSurfaceRow),
22
22
  appHost: rowConfig('applicationSurfaceRow', 'application_surface_row', appRows, normalizeApplicationSurfaceRow),
23
23
  plugin: rowConfig('applicationSurfaceRow', 'application_surface_row', appRows, normalizeApplicationSurfaceRow),
@@ -79,6 +79,11 @@ function normalizeResourceGraphRow(rowKind) {
79
79
  if (rowKind === 'lifeRelation') return 'lifetimeRelation';
80
80
  if (rowKind === 'borrowRegion') return 'borrowScope';
81
81
  if (rowKind === 'unsafe') return 'unsafeBoundary';
82
+ if (rowKind === 'memory' || rowKind === 'region') return 'memoryRegion';
83
+ if (rowKind === 'layout') return 'dataLayout';
84
+ if (rowKind === 'pointer' || rowKind === 'ptr' || rowKind === 'address') return 'pointerEdge';
85
+ if (rowKind === 'access' || rowKind === 'atomic' || rowKind === 'volatile') return 'memoryAccess';
86
+ if (rowKind === 'abi' || rowKind === 'callBoundary') return 'abiBoundary';
82
87
  if (rowKind === 'proof' || rowKind === 'proofObligation') return 'obligation';
83
88
  return rowKind;
84
89
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shapeshift-labs/frontier-lang-parser",
3
- "version": "0.3.71",
3
+ "version": "0.3.72",
4
4
  "description": "Parser for the first Frontier Lang .frontier syntax slice.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",