@bscotch/gml-parser 1.14.2
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/LICENSE.md +29 -0
- package/README.md +151 -0
- package/assets/GmlSpec.xml +11419 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/jsdoc.d.ts +79 -0
- package/dist/jsdoc.d.ts.map +1 -0
- package/dist/jsdoc.feather.d.ts +23 -0
- package/dist/jsdoc.feather.d.ts.map +1 -0
- package/dist/jsdoc.feather.js +143 -0
- package/dist/jsdoc.feather.js.map +1 -0
- package/dist/jsdoc.js +468 -0
- package/dist/jsdoc.js.map +1 -0
- package/dist/jsdoc.test.d.ts +2 -0
- package/dist/jsdoc.test.d.ts.map +1 -0
- package/dist/jsdoc.test.js +185 -0
- package/dist/jsdoc.test.js.map +1 -0
- package/dist/lexer.d.ts +3 -0
- package/dist/lexer.d.ts.map +1 -0
- package/dist/lexer.js +14 -0
- package/dist/lexer.js.map +1 -0
- package/dist/lexer.test.d.ts +2 -0
- package/dist/lexer.test.d.ts.map +1 -0
- package/dist/lexer.test.js +78 -0
- package/dist/lexer.test.js.map +1 -0
- package/dist/lib.objects.d.ts +190 -0
- package/dist/lib.objects.d.ts.map +1 -0
- package/dist/lib.objects.js +242 -0
- package/dist/lib.objects.js.map +1 -0
- package/dist/logger.d.ts +13 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +14 -0
- package/dist/logger.js.map +1 -0
- package/dist/modules.d.ts +19 -0
- package/dist/modules.d.ts.map +1 -0
- package/dist/modules.js +320 -0
- package/dist/modules.js.map +1 -0
- package/dist/modules.test.d.ts +2 -0
- package/dist/modules.test.d.ts.map +1 -0
- package/dist/modules.test.js +57 -0
- package/dist/modules.test.js.map +1 -0
- package/dist/modules.types.d.ts +78 -0
- package/dist/modules.types.d.ts.map +1 -0
- package/dist/modules.types.js +2 -0
- package/dist/modules.types.js.map +1 -0
- package/dist/modules.util.d.ts +5 -0
- package/dist/modules.util.d.ts.map +1 -0
- package/dist/modules.util.js +13 -0
- package/dist/modules.util.js.map +1 -0
- package/dist/parser.d.ts +121 -0
- package/dist/parser.d.ts.map +1 -0
- package/dist/parser.js +571 -0
- package/dist/parser.js.map +1 -0
- package/dist/parser.test.d.ts +2 -0
- package/dist/parser.test.d.ts.map +1 -0
- package/dist/parser.test.js +143 -0
- package/dist/parser.test.js.map +1 -0
- package/dist/parser.utility.d.ts +29 -0
- package/dist/parser.utility.d.ts.map +1 -0
- package/dist/parser.utility.js +125 -0
- package/dist/parser.utility.js.map +1 -0
- package/dist/project.asset.d.ts +115 -0
- package/dist/project.asset.d.ts.map +1 -0
- package/dist/project.asset.js +802 -0
- package/dist/project.asset.js.map +1 -0
- package/dist/project.code.d.ts +130 -0
- package/dist/project.code.d.ts.map +1 -0
- package/dist/project.code.js +570 -0
- package/dist/project.code.js.map +1 -0
- package/dist/project.d.ts +533 -0
- package/dist/project.d.ts.map +1 -0
- package/dist/project.diagnostics.d.ts +32 -0
- package/dist/project.diagnostics.d.ts.map +1 -0
- package/dist/project.diagnostics.js +23 -0
- package/dist/project.diagnostics.js.map +1 -0
- package/dist/project.js +1216 -0
- package/dist/project.js.map +1 -0
- package/dist/project.location.d.ts +133 -0
- package/dist/project.location.d.ts.map +1 -0
- package/dist/project.location.js +219 -0
- package/dist/project.location.js.map +1 -0
- package/dist/project.native.d.ts +26 -0
- package/dist/project.native.d.ts.map +1 -0
- package/dist/project.native.js +321 -0
- package/dist/project.native.js.map +1 -0
- package/dist/project.spec.d.ts +1298 -0
- package/dist/project.spec.d.ts.map +1 -0
- package/dist/project.spec.js +263 -0
- package/dist/project.spec.js.map +1 -0
- package/dist/project.test.d.ts +2 -0
- package/dist/project.test.d.ts.map +1 -0
- package/dist/project.test.js +633 -0
- package/dist/project.test.js.map +1 -0
- package/dist/shaderDefaults.d.ts +3 -0
- package/dist/shaderDefaults.d.ts.map +1 -0
- package/dist/shaderDefaults.js +32 -0
- package/dist/shaderDefaults.js.map +1 -0
- package/dist/signifiers.d.ts +54 -0
- package/dist/signifiers.d.ts.map +1 -0
- package/dist/signifiers.flags.d.ts +38 -0
- package/dist/signifiers.flags.d.ts.map +1 -0
- package/dist/signifiers.flags.js +131 -0
- package/dist/signifiers.flags.js.map +1 -0
- package/dist/signifiers.js +117 -0
- package/dist/signifiers.js.map +1 -0
- package/dist/spine.d.ts +28 -0
- package/dist/spine.d.ts.map +1 -0
- package/dist/spine.js +64 -0
- package/dist/spine.js.map +1 -0
- package/dist/spine.test.d.ts +2 -0
- package/dist/spine.test.d.ts.map +1 -0
- package/dist/spine.test.js +420 -0
- package/dist/spine.test.js.map +1 -0
- package/dist/spine.types.d.ts +89 -0
- package/dist/spine.types.d.ts.map +1 -0
- package/dist/spine.types.js +2 -0
- package/dist/spine.types.js.map +1 -0
- package/dist/test.lib.d.ts +3 -0
- package/dist/test.lib.d.ts.map +1 -0
- package/dist/test.lib.js +16 -0
- package/dist/test.lib.js.map +1 -0
- package/dist/tokens.categories.d.ts +22 -0
- package/dist/tokens.categories.d.ts.map +1 -0
- package/dist/tokens.categories.js +78 -0
- package/dist/tokens.categories.js.map +1 -0
- package/dist/tokens.code.d.ts +2 -0
- package/dist/tokens.code.d.ts.map +1 -0
- package/dist/tokens.code.js +523 -0
- package/dist/tokens.code.js.map +1 -0
- package/dist/tokens.d.ts +130 -0
- package/dist/tokens.d.ts.map +1 -0
- package/dist/tokens.js +13 -0
- package/dist/tokens.js.map +1 -0
- package/dist/tokens.lib.d.ts +15 -0
- package/dist/tokens.lib.d.ts.map +1 -0
- package/dist/tokens.lib.js +12 -0
- package/dist/tokens.lib.js.map +1 -0
- package/dist/tokens.shared.d.ts +4 -0
- package/dist/tokens.shared.d.ts.map +1 -0
- package/dist/tokens.shared.js +35 -0
- package/dist/tokens.shared.js.map +1 -0
- package/dist/tokens.strings.d.ts +5 -0
- package/dist/tokens.strings.d.ts.map +1 -0
- package/dist/tokens.strings.js +111 -0
- package/dist/tokens.strings.js.map +1 -0
- package/dist/types.checks.d.ts +50 -0
- package/dist/types.checks.d.ts.map +1 -0
- package/dist/types.checks.js +246 -0
- package/dist/types.checks.js.map +1 -0
- package/dist/types.d.ts +152 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.feather.d.ts +21 -0
- package/dist/types.feather.d.ts.map +1 -0
- package/dist/types.feather.js +156 -0
- package/dist/types.feather.js.map +1 -0
- package/dist/types.hover.d.ts +4 -0
- package/dist/types.hover.d.ts.map +1 -0
- package/dist/types.hover.js +99 -0
- package/dist/types.hover.js.map +1 -0
- package/dist/types.js +457 -0
- package/dist/types.js.map +1 -0
- package/dist/types.primitives.d.ts +10 -0
- package/dist/types.primitives.d.ts.map +1 -0
- package/dist/types.primitives.js +88 -0
- package/dist/types.primitives.js.map +1 -0
- package/dist/types.sprites.d.ts +8 -0
- package/dist/types.sprites.d.ts.map +1 -0
- package/dist/types.sprites.js +417 -0
- package/dist/types.sprites.js.map +1 -0
- package/dist/types.test.d.ts +2 -0
- package/dist/types.test.d.ts.map +1 -0
- package/dist/types.test.js +62 -0
- package/dist/types.test.js.map +1 -0
- package/dist/util.d.ts +50 -0
- package/dist/util.d.ts.map +1 -0
- package/dist/util.js +168 -0
- package/dist/util.js.map +1 -0
- package/dist/util.test.d.ts +3 -0
- package/dist/util.test.d.ts.map +1 -0
- package/dist/util.test.js +63 -0
- package/dist/util.test.js.map +1 -0
- package/dist/visitor.assign.d.ts +24 -0
- package/dist/visitor.assign.d.ts.map +1 -0
- package/dist/visitor.assign.js +112 -0
- package/dist/visitor.assign.js.map +1 -0
- package/dist/visitor.d.ts +89 -0
- package/dist/visitor.d.ts.map +1 -0
- package/dist/visitor.functionExpression.d.ts +7 -0
- package/dist/visitor.functionExpression.d.ts.map +1 -0
- package/dist/visitor.functionExpression.js +216 -0
- package/dist/visitor.functionExpression.js.map +1 -0
- package/dist/visitor.globals.d.ts +59 -0
- package/dist/visitor.globals.d.ts.map +1 -0
- package/dist/visitor.globals.js +271 -0
- package/dist/visitor.globals.js.map +1 -0
- package/dist/visitor.identifierAccessor.d.ts +6 -0
- package/dist/visitor.identifierAccessor.d.ts.map +1 -0
- package/dist/visitor.identifierAccessor.js +381 -0
- package/dist/visitor.identifierAccessor.js.map +1 -0
- package/dist/visitor.js +605 -0
- package/dist/visitor.js.map +1 -0
- package/dist/visitor.processor.d.ts +66 -0
- package/dist/visitor.processor.d.ts.map +1 -0
- package/dist/visitor.processor.js +147 -0
- package/dist/visitor.processor.js.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
import { withCtxKind } from './parser.js';
|
|
2
|
+
import { Range, fixITokenLocation } from './project.location.js';
|
|
3
|
+
import { Signifier } from './signifiers.js';
|
|
4
|
+
import { getTypeOfKind } from './types.checks.js';
|
|
5
|
+
import { typeFromFeatherString } from './types.feather.js';
|
|
6
|
+
import { Type, TypeStore } from './types.js';
|
|
7
|
+
import { withableTypes } from './types.primitives.js';
|
|
8
|
+
import { assert } from './util.js';
|
|
9
|
+
/** Visit a function's CST and update any signifiers and types */
|
|
10
|
+
export function visitFunctionExpression(children, ctx) {
|
|
11
|
+
const functionName = children.Identifier?.[0]?.image;
|
|
12
|
+
const docs = ctx.docs || this.PROCESSOR.consumeJsdoc();
|
|
13
|
+
ctx.docs = undefined;
|
|
14
|
+
const assignedTo = ctx.signifier;
|
|
15
|
+
ctx.signifier = undefined;
|
|
16
|
+
if (!children.blockStatement) {
|
|
17
|
+
// Then we're in a recovery situation and should just move along
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
// Reset the list of return values
|
|
21
|
+
ctx = {
|
|
22
|
+
...ctx,
|
|
23
|
+
returns: [],
|
|
24
|
+
};
|
|
25
|
+
// Compute useful properties of this function to help figure out
|
|
26
|
+
// how to define its symbol, type, scope, etc.
|
|
27
|
+
const nameLocation = functionName
|
|
28
|
+
? this.PROCESSOR.range(children.Identifier[0])
|
|
29
|
+
: undefined;
|
|
30
|
+
const isConstructor = !!children.constructorSuffix;
|
|
31
|
+
const bodyLocation = children.blockStatement[0].location;
|
|
32
|
+
const isFunctionStatement = ctx.ctxKindStack.at(-1) === 'functionStatement';
|
|
33
|
+
const isMixin = !!docs?.jsdoc.mixin;
|
|
34
|
+
/** If this function has a corresponding signifier, either
|
|
35
|
+
* because it is a function declaration or because it is a
|
|
36
|
+
* function expression assigned to a variable, then that's
|
|
37
|
+
* what this is.
|
|
38
|
+
*
|
|
39
|
+
* @remarks Function expressions need not be assigned to anything, necessarily, so they may not have a signifier.
|
|
40
|
+
*/
|
|
41
|
+
let signifier;
|
|
42
|
+
if (assignedTo) {
|
|
43
|
+
signifier = assignedTo;
|
|
44
|
+
}
|
|
45
|
+
else if (isFunctionStatement && functionName) {
|
|
46
|
+
// Then this function is being created by declaration,
|
|
47
|
+
// without being assigned to a variable. Find or create
|
|
48
|
+
// the signifier and update its definedAt & refs.
|
|
49
|
+
const matching = this.FIND_ITEM(children, { excludeParents: true });
|
|
50
|
+
if (matching?.item.$tag === 'Sym') {
|
|
51
|
+
signifier = matching.item;
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
signifier = new Signifier(this.PROCESSOR.currentSelf, functionName);
|
|
55
|
+
// This function is overriding any parent function of the same name
|
|
56
|
+
signifier.override = true;
|
|
57
|
+
this.PROCESSOR.currentSelf.addMember(signifier);
|
|
58
|
+
}
|
|
59
|
+
if (nameLocation && signifier && !signifier.def) {
|
|
60
|
+
signifier?.definedAt(nameLocation);
|
|
61
|
+
signifier?.addRef(nameLocation, true);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// Get or create the function type. Use the existing type if there is one.
|
|
65
|
+
signifier?.describe(docs?.jsdoc.description);
|
|
66
|
+
const functionType = signifier?.getTypeByKind('Function') ||
|
|
67
|
+
getTypeOfKind(ctx.type, 'Function')?.derive() ||
|
|
68
|
+
new Type('Function').named(functionName);
|
|
69
|
+
signifier?.setType(functionType);
|
|
70
|
+
if (signifier && docs?.jsdoc.deprecated) {
|
|
71
|
+
signifier.deprecated = true;
|
|
72
|
+
}
|
|
73
|
+
if (signifier && docs?.jsdoc.mixin) {
|
|
74
|
+
signifier.mixin = true;
|
|
75
|
+
}
|
|
76
|
+
functionType.isConstructor = isConstructor;
|
|
77
|
+
functionType.self = isConstructor
|
|
78
|
+
? functionType.self || this.PROCESSOR.createStruct(bodyLocation)
|
|
79
|
+
: undefined;
|
|
80
|
+
if (isConstructor) {
|
|
81
|
+
functionType.self?.named(functionName);
|
|
82
|
+
}
|
|
83
|
+
functionType.returns ||= new TypeStore();
|
|
84
|
+
// Determine the function context.
|
|
85
|
+
let docContextRaw = docs?.jsdoc.kind === 'self'
|
|
86
|
+
? docs.type[0]
|
|
87
|
+
: docs?.jsdoc.kind === 'function'
|
|
88
|
+
? docs.type[0]?.self
|
|
89
|
+
: undefined;
|
|
90
|
+
if (docContextRaw && docContextRaw.kind === 'Function') {
|
|
91
|
+
// Then we use the function's construct if it is a constructor, else its context.
|
|
92
|
+
docContextRaw = docContextRaw.self;
|
|
93
|
+
}
|
|
94
|
+
const docContext = getTypeOfKind(docContextRaw, withableTypes);
|
|
95
|
+
let context;
|
|
96
|
+
if (isConstructor) {
|
|
97
|
+
context = functionType.self;
|
|
98
|
+
}
|
|
99
|
+
else if (docContext) {
|
|
100
|
+
context = docContext;
|
|
101
|
+
}
|
|
102
|
+
else if (ctx.self) {
|
|
103
|
+
// Then we're inside of a method() call, and the self
|
|
104
|
+
// is from the prior argument, and we aren't overriding
|
|
105
|
+
// using jsdoc.
|
|
106
|
+
context = ctx.self;
|
|
107
|
+
}
|
|
108
|
+
else if (isMixin) {
|
|
109
|
+
// Then we want to use a new struct type as the context,
|
|
110
|
+
// allowing calls to this function to add those variables to themselves.
|
|
111
|
+
// Try to keep the old context if possible.
|
|
112
|
+
context =
|
|
113
|
+
functionType.self && functionType.self !== this.PROCESSOR.currentSelf
|
|
114
|
+
? functionType.self
|
|
115
|
+
: this.PROCESSOR.createStruct(bodyLocation);
|
|
116
|
+
}
|
|
117
|
+
ctx.self = undefined; // Just to make sure nothing downstream uses it
|
|
118
|
+
context ||= this.PROCESSOR.currentSelf;
|
|
119
|
+
functionType.self = context;
|
|
120
|
+
// Ensure local context
|
|
121
|
+
const currentLocalContext = this.PROCESSOR.currentLocalScope;
|
|
122
|
+
functionType.local ||= Type.Struct;
|
|
123
|
+
assert(functionType.local !== currentLocalContext, 'Function local context incorrectly set to prior local context.');
|
|
124
|
+
// Functions have their own localscope as well as their self scope,
|
|
125
|
+
// so we need to push both.
|
|
126
|
+
const startParen = fixITokenLocation(children.functionParameters[0].children.StartParen[0]);
|
|
127
|
+
this.PROCESSOR.scope.setEnd(startParen);
|
|
128
|
+
this.PROCESSOR.pushScope(startParen, functionType.self, functionType.local, true);
|
|
129
|
+
// Handle definitiveScope -- if this is a constructor or mixin,
|
|
130
|
+
// we want to push a new definitiveScope.
|
|
131
|
+
this.PROCESSOR.pushDefinitiveSelf(isConstructor || isMixin ? functionType.self : undefined);
|
|
132
|
+
// Add function signature components. Must take into account that we may
|
|
133
|
+
// be updating after an edit.
|
|
134
|
+
const cstParams = children.functionParameters?.[0]?.children.functionParameter || [];
|
|
135
|
+
let totalParams = 0;
|
|
136
|
+
for (let i = 0; i < cstParams.length; i++) {
|
|
137
|
+
const paramCtx = withCtxKind(ctx, 'functionParam');
|
|
138
|
+
const paramToken = cstParams[i].children.Identifier[0];
|
|
139
|
+
const name = paramToken.image;
|
|
140
|
+
const range = this.PROCESSOR.range(paramToken);
|
|
141
|
+
// Use JSDocs to determine the type, description, etc of the parameter
|
|
142
|
+
let fromJsdoc = docs?.type?.[0]?.local?.getMember(name);
|
|
143
|
+
if (fromJsdoc && paramToken.image !== fromJsdoc.name) {
|
|
144
|
+
this.PROCESSOR.addDiagnostic('JSDOC_MISMATCH', paramToken, `Parameter name mismatch`);
|
|
145
|
+
// Unset it so we don't accidentally use it!
|
|
146
|
+
fromJsdoc = undefined;
|
|
147
|
+
}
|
|
148
|
+
const paramDoc = fromJsdoc
|
|
149
|
+
? docs?.jsdoc.params?.find((p) => p.name?.content === name)
|
|
150
|
+
: undefined;
|
|
151
|
+
// Params are just local variables
|
|
152
|
+
let param = functionType.local.getMember(name);
|
|
153
|
+
param = functionType
|
|
154
|
+
.addParameter(i, param || name, {
|
|
155
|
+
optional: fromJsdoc?.optional || !!cstParams[i].children.Assign,
|
|
156
|
+
})
|
|
157
|
+
.definedAt(range);
|
|
158
|
+
param.describe(fromJsdoc?.description);
|
|
159
|
+
param.addRef(range, true);
|
|
160
|
+
let inferredType;
|
|
161
|
+
if (cstParams[i].children.assignmentRightHandSide) {
|
|
162
|
+
inferredType = this.assignmentRightHandSide(cstParams[i].children.assignmentRightHandSide[0].children, paramCtx);
|
|
163
|
+
}
|
|
164
|
+
const paramType = fromJsdoc?.type.type || inferredType || this.ANY;
|
|
165
|
+
param.setType(paramType);
|
|
166
|
+
// Add a reference to the jsdoc name
|
|
167
|
+
if (paramDoc?.name) {
|
|
168
|
+
param.addRef(Range.from(this.PROCESSOR.file, paramDoc.name));
|
|
169
|
+
}
|
|
170
|
+
totalParams++;
|
|
171
|
+
}
|
|
172
|
+
// If we have more args defined in JSDocs, add them as *undeclared* params
|
|
173
|
+
const docsParams = docs?.jsdoc.params;
|
|
174
|
+
if ((docsParams?.length || 0) > cstParams.length) {
|
|
175
|
+
const extraParams = docsParams.slice(cstParams.length);
|
|
176
|
+
assert(extraParams, 'Expected extra params');
|
|
177
|
+
for (let i = 0; i < extraParams.length; i++) {
|
|
178
|
+
const idx = cstParams.length + i;
|
|
179
|
+
const paramDoc = extraParams[i];
|
|
180
|
+
assert(paramDoc, 'Expected extra param');
|
|
181
|
+
const type = docs.type[0]?.local?.getMember(paramDoc.name.content)
|
|
182
|
+
?.type;
|
|
183
|
+
functionType
|
|
184
|
+
.addParameter(idx, paramDoc.name.content, {
|
|
185
|
+
optional: paramDoc.optional,
|
|
186
|
+
type: type?.type ||
|
|
187
|
+
typeFromFeatherString(paramDoc.type?.content || 'Any', this.PROCESSOR.project.types, false),
|
|
188
|
+
})
|
|
189
|
+
.describe(paramDoc.description);
|
|
190
|
+
totalParams++;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
// Remove any excess parameters, e.g. if we're updating a
|
|
194
|
+
// prior definition. This is tricky since we may need to do something
|
|
195
|
+
// about references to legacy params.
|
|
196
|
+
functionType.truncateParameters(totalParams);
|
|
197
|
+
// Process the function body
|
|
198
|
+
this.visit(children.blockStatement, withCtxKind(ctx, 'functionBody'));
|
|
199
|
+
// Pop the definitiveScope
|
|
200
|
+
this.PROCESSOR.popDefinitiveSelf();
|
|
201
|
+
// Update the RETURN type based on the return statements found in the body
|
|
202
|
+
if (docs?.type[0]?.returns) {
|
|
203
|
+
functionType.setReturnType(docs.type[0].returns.type);
|
|
204
|
+
// TODO: Check against the inferred return types
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
functionType.setReturnType(ctx.returns?.length ? ctx.returns : this.UNDEFINED);
|
|
208
|
+
}
|
|
209
|
+
// End the scope
|
|
210
|
+
const endBrace = fixITokenLocation(children.blockStatement[0].children.EndBrace[0]);
|
|
211
|
+
this.PROCESSOR.scope.setEnd(endBrace);
|
|
212
|
+
this.PROCESSOR.popScope(endBrace, true);
|
|
213
|
+
assert(functionType.local !== this.PROCESSOR.currentLocalScope, 'Local scope not popped correctly');
|
|
214
|
+
return functionType;
|
|
215
|
+
}
|
|
216
|
+
//# sourceMappingURL=visitor.functionExpression.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visitor.functionExpression.js","sourceRoot":"","sources":["../src/visitor.functionExpression.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,SAAS,EAAiC,MAAM,YAAY,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAGnC,iEAAiE;AACjE,MAAM,UAAU,uBAAuB,CAErC,QAAuC,EACvC,GAAmB;IAEnB,MAAM,YAAY,GAAuB,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;IACzE,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;IACvD,GAAG,CAAC,IAAI,GAAG,SAAS,CAAC;IACrB,MAAM,UAAU,GAAG,GAAG,CAAC,SAAS,CAAC;IACjC,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC;IAE1B,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;QAC7B,gEAAgE;QAChE,OAAO;IACT,CAAC;IAED,kCAAkC;IAClC,GAAG,GAAG;QACJ,GAAG,GAAG;QACN,OAAO,EAAE,EAAE;KACZ,CAAC;IAEF,gEAAgE;IAChE,8CAA8C;IAC9C,MAAM,YAAY,GAAG,YAAY;QAC/B,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAW,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,aAAa,GAAG,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IACnD,MAAM,YAAY,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,QAAS,CAAC;IAC1D,MAAM,mBAAmB,GAAG,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,mBAAmB,CAAC;IAC5E,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC;IAEpC;;;;;;OAMG;IACH,IAAI,SAAgC,CAAC;IACrC,IAAI,UAAU,EAAE,CAAC;QACf,SAAS,GAAG,UAAU,CAAC;IACzB,CAAC;SAAM,IAAI,mBAAmB,IAAI,YAAY,EAAE,CAAC;QAC/C,sDAAsD;QACtD,uDAAuD;QACvD,iDAAiD;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;QACpE,IAAI,QAAQ,EAAE,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAClC,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,SAAS,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;YACpE,mEAAmE;YACnE,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAClD,CAAC;QACD,IAAI,YAAY,IAAI,SAAS,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;YAChD,SAAS,EAAE,SAAS,CAAC,YAAY,CAAC,CAAC;YACnC,SAAS,EAAE,MAAM,CAAC,YAAa,EAAE,IAAI,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,0EAA0E;IAC1E,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;IAC7C,MAAM,YAAY,GAChB,SAAS,EAAE,aAAa,CAAC,UAAU,CAAC;QACpC,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE;QAC7C,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC3C,SAAS,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IACjC,IAAI,SAAS,IAAI,IAAI,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC;QACxC,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC;IAC9B,CAAC;IACD,IAAI,SAAS,IAAI,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;QACnC,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC;IACzB,CAAC;IACD,YAAY,CAAC,aAAa,GAAG,aAAa,CAAC;IAC3C,YAAY,CAAC,IAAI,GAAG,aAAa;QAC/B,CAAC,CAAC,YAAY,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC;QAChE,CAAC,CAAC,SAAS,CAAC;IACd,IAAI,aAAa,EAAE,CAAC;QAClB,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IACzC,CAAC;IACD,YAAY,CAAC,OAAO,KAAK,IAAI,SAAS,EAAE,CAAC;IAEzC,kCAAkC;IAClC,IAAI,aAAa,GACf,IAAI,EAAE,KAAK,CAAC,IAAI,KAAK,MAAM;QACzB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACd,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,KAAK,UAAU;YACjC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI;YACpB,CAAC,CAAC,SAAS,CAAC;IAChB,IAAI,aAAa,IAAI,aAAa,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QACvD,iFAAiF;QACjF,aAAa,GAAG,aAAa,CAAC,IAAI,CAAC;IACrC,CAAC;IAED,MAAM,UAAU,GAAG,aAAa,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;IAC/D,IAAI,OAAiC,CAAC;IAEtC,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,GAAG,YAAY,CAAC,IAAK,CAAC;IAC/B,CAAC;SAAM,IAAI,UAAU,EAAE,CAAC;QACtB,OAAO,GAAG,UAAU,CAAC;IACvB,CAAC;SAAM,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;QACpB,qDAAqD;QACrD,uDAAuD;QACvD,eAAe;QACf,OAAO,GAAG,GAAG,CAAC,IAAkB,CAAC;IACnC,CAAC;SAAM,IAAI,OAAO,EAAE,CAAC;QACnB,wDAAwD;QACxD,wEAAwE;QACxE,2CAA2C;QAC3C,OAAO;YACL,YAAY,CAAC,IAAI,IAAI,YAAY,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,WAAW;gBACnE,CAAC,CAAC,YAAY,CAAC,IAAI;gBACnB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;IAClD,CAAC;IACD,GAAG,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC,+CAA+C;IAErE,OAAO,KAAK,IAAI,CAAC,SAAS,CAAC,WAAyB,CAAC;IACrD,YAAY,CAAC,IAAI,GAAG,OAAO,CAAC;IAE5B,uBAAuB;IACvB,MAAM,mBAAmB,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC;IAC7D,YAAY,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC;IACnC,MAAM,CACJ,YAAY,CAAC,KAAK,KAAK,mBAAmB,EAC1C,gEAAgE,CACjE,CAAC;IAEF,mEAAmE;IACnE,2BAA2B;IAC3B,MAAM,UAAU,GAAG,iBAAiB,CAClC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CACtD,CAAC;IACF,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACxC,IAAI,CAAC,SAAS,CAAC,SAAS,CACtB,UAAU,EACV,YAAY,CAAC,IAAI,EACjB,YAAY,CAAC,KAAK,EAClB,IAAI,CACL,CAAC;IAEF,+DAA+D;IAC/D,yCAAyC;IACzC,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAC/B,aAAa,IAAI,OAAO,CAAC,CAAC,CAAE,YAAY,CAAC,IAAmB,CAAC,CAAC,CAAC,SAAS,CACzE,CAAC;IAEF,wEAAwE;IACxE,6BAA6B;IAC7B,MAAM,SAAS,GACb,QAAQ,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,iBAAiB,IAAI,EAAE,CAAC;IACrE,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;QACnD,MAAM,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACvD,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAE/C,sEAAsE;QACtE,IAAI,SAAS,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;QACxD,IAAI,SAAS,IAAI,UAAU,CAAC,KAAK,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;YACrD,IAAI,CAAC,SAAS,CAAC,aAAa,CAC1B,gBAAgB,EAChB,UAAU,EACV,yBAAyB,CAC1B,CAAC;YACF,4CAA4C;YAC5C,SAAS,GAAG,SAAS,CAAC;QACxB,CAAC;QACD,MAAM,QAAQ,GAAG,SAAS;YACxB,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;YAC3D,CAAC,CAAC,SAAS,CAAC;QAEd,kCAAkC;QAClC,IAAI,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC/C,KAAK,GAAG,YAAY;aACjB,YAAY,CAAC,CAAC,EAAE,KAAK,IAAI,IAAI,EAAE;YAC9B,QAAQ,EAAE,SAAS,EAAE,QAAQ,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM;SAChE,CAAC;aACD,SAAS,CAAC,KAAK,CAAC,CAAC;QACpB,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACvC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAE1B,IAAI,YAA8C,CAAC;QACnD,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uBAAuB,EAAE,CAAC;YAClD,YAAY,GAAG,IAAI,CAAC,uBAAuB,CACzC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uBAAwB,CAAC,CAAC,CAAC,CAAC,QAAQ,EAC1D,QAAQ,CACT,CAAC;QACJ,CAAC;QACD,MAAM,SAAS,GAAG,SAAS,EAAE,IAAI,CAAC,IAAI,IAAI,YAAY,IAAI,IAAI,CAAC,GAAG,CAAC;QACnE,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAEzB,oCAAoC;QACpC,IAAI,QAAQ,EAAE,IAAI,EAAE,CAAC;YACnB,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/D,CAAC;QACD,WAAW,EAAE,CAAC;IAChB,CAAC;IAED,0EAA0E;IAC1E,MAAM,UAAU,GAAG,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;IACtC,IAAI,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;QACjD,MAAM,WAAW,GAAG,UAAW,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACxD,MAAM,CAAC,WAAW,EAAE,uBAAuB,CAAC,CAAC;QAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;YACjC,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;YAChC,MAAM,CAAC,QAAQ,EAAE,sBAAsB,CAAC,CAAC;YACzC,MAAM,IAAI,GAAG,IAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,QAAQ,CAAC,IAAK,CAAC,OAAO,CAAC;gBAClE,EAAE,IAAI,CAAC;YACT,YAAY;iBACT,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAK,CAAC,OAAO,EAAE;gBACzC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,IAAI,EACF,IAAI,EAAE,IAAI;oBACV,qBAAqB,CACnB,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,KAAK,EAC/B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAC5B,KAAK,CACN;aACJ,CAAC;iBACD,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;YAClC,WAAW,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IAED,yDAAyD;IACzD,qEAAqE;IACrE,qCAAqC;IACrC,YAAY,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAE7C,4BAA4B;IAC5B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC;IAEtE,0BAA0B;IAC1B,IAAI,CAAC,SAAS,CAAC,iBAAiB,EAAE,CAAC;IAEnC,0EAA0E;IAC1E,IAAI,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;QAC3B,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACtD,gDAAgD;IAClD,CAAC;SAAM,CAAC;QACN,YAAY,CAAC,aAAa,CACxB,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CACnD,CAAC;IACJ,CAAC;IAED,gBAAgB;IAChB,MAAM,QAAQ,GAAG,iBAAiB,CAChC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAChD,CAAC;IACF,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACxC,MAAM,CACJ,YAAY,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS,CAAC,iBAAiB,EACvD,kCAAkC,CACnC,CAAC;IACF,OAAO,YAAY,CAAC;AACtB,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { CstNode, CstNodeLocation, IToken } from 'chevrotain';
|
|
2
|
+
import { EnumStatementCstChildren, FunctionExpressionCstChildren, GlobalVarDeclarationCstChildren, IdentifierAccessorCstChildren, JsdocGmlCstChildren, JsdocJsCstChildren, MacroStatementCstChildren } from '../gml-cst.js';
|
|
3
|
+
import { JsdocSummary } from './jsdoc.js';
|
|
4
|
+
import { GmlVisitorBase } from './parser.js';
|
|
5
|
+
import type { Code } from './project.code.js';
|
|
6
|
+
import { Position, Range } from './project.location.js';
|
|
7
|
+
import { Signifier } from './signifiers.js';
|
|
8
|
+
import { StructType } from './types.js';
|
|
9
|
+
export declare function registerGlobals(file: Code): void;
|
|
10
|
+
declare class GlobalDeclarationsProcessor {
|
|
11
|
+
readonly file: Code;
|
|
12
|
+
protected readonly localScopeStack: StructType[];
|
|
13
|
+
readonly start: Position;
|
|
14
|
+
constructor(file: Code);
|
|
15
|
+
range(loc: CstNodeLocation): Range;
|
|
16
|
+
get currentLocalScope(): StructType;
|
|
17
|
+
pushLocalScope(): void;
|
|
18
|
+
popLocalScope(): void;
|
|
19
|
+
get asset(): import("./project.asset.js").Asset<"animcurves" | "extensions" | "fonts" | "notes" | "objects" | "particles" | "paths" | "rooms" | "scripts" | "sequences" | "shaders" | "sounds" | "sprites" | "tilesets" | "timelines">;
|
|
20
|
+
get project(): import("./project.js").Project;
|
|
21
|
+
get globalSelf(): StructType;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Visits the CST and creates symbols for global signifiers.
|
|
25
|
+
*/
|
|
26
|
+
export declare class GmlGlobalDeclarationsVisitor extends GmlVisitorBase {
|
|
27
|
+
readonly PROCESSOR: GlobalDeclarationsProcessor;
|
|
28
|
+
static validated: boolean;
|
|
29
|
+
EXTRACT_GLOBAL_DECLARATIONS(input: CstNode): GlobalDeclarationsProcessor;
|
|
30
|
+
/**
|
|
31
|
+
* Register a global identifier from its declaration. Note that
|
|
32
|
+
* global identifiers are not deleted when their definitions are,
|
|
33
|
+
* so we need to either create *or update* the corresponding symbol/typeMember.
|
|
34
|
+
*/
|
|
35
|
+
REGISTER_GLOBAL(children: {
|
|
36
|
+
Identifier?: IToken[];
|
|
37
|
+
}): Signifier | undefined;
|
|
38
|
+
REGISTER_GLOBAL_BY_NAME(name: string, range: Range, isNotDef?: boolean): Signifier;
|
|
39
|
+
REGISTER_JSDOC_GLOBAL(jsdoc: JsdocSummary): void;
|
|
40
|
+
jsdocJs(children: JsdocJsCstChildren): void;
|
|
41
|
+
jsdocGml(children: JsdocGmlCstChildren): void;
|
|
42
|
+
/**
|
|
43
|
+
* Collect the enum symbol *and* its members, since all of those
|
|
44
|
+
* are globally visible.
|
|
45
|
+
*/
|
|
46
|
+
enumStatement(children: EnumStatementCstChildren): void;
|
|
47
|
+
/**
|
|
48
|
+
* Identify global function declarations and store them as
|
|
49
|
+
* symbols or `global.` types. For constructors, add the
|
|
50
|
+
* corresponding types.
|
|
51
|
+
*/
|
|
52
|
+
functionExpression(children: FunctionExpressionCstChildren): void;
|
|
53
|
+
globalVarDeclaration(children: GlobalVarDeclarationCstChildren): void;
|
|
54
|
+
macroStatement(children: MacroStatementCstChildren): void;
|
|
55
|
+
identifierAccessor(children: IdentifierAccessorCstChildren): void;
|
|
56
|
+
constructor(PROCESSOR: GlobalDeclarationsProcessor);
|
|
57
|
+
}
|
|
58
|
+
export {};
|
|
59
|
+
//# sourceMappingURL=visitor.globals.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visitor.globals.d.ts","sourceRoot":"","sources":["../src/visitor.globals.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EACL,wBAAwB,EACxB,6BAA6B,EAC7B,+BAA+B,EAC/B,6BAA6B,EAC7B,mBAAmB,EACnB,kBAAkB,EAClB,yBAAyB,EAC1B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAc,MAAM,YAAY,CAAC;AAEtD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAE9C,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAgB,UAAU,EAAQ,MAAM,YAAY,CAAC;AAG5D,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,QAUzC;AAED,cAAM,2BAA2B;IAInB,QAAQ,CAAC,IAAI,EAAE,IAAI;IAH/B,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,UAAU,EAAE,CAAM;IACtD,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;gBAEJ,IAAI,EAAE,IAAI;IAM/B,KAAK,CAAC,GAAG,EAAE,eAAe;IAI1B,IAAI,iBAAiB,eAEpB;IAED,cAAc;IAKd,aAAa;IAIb,IAAI,KAAK,8NAER;IAED,IAAI,OAAO,mCAEV;IAED,IAAI,UAAU,eAEb;CACF;AAED;;GAEG;AACH,qBAAa,4BAA6B,SAAQ,cAAc;IAsPlD,QAAQ,CAAC,SAAS,EAAE,2BAA2B;IArP3D,MAAM,CAAC,SAAS,UAAS;IAEzB,2BAA2B,CAAC,KAAK,EAAE,OAAO;IAQ1C;;;;OAIG;IACH,eAAe,CAAC,QAAQ,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,SAAS,GAAG,SAAS;IAO3E,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,UAAQ;IA4BpE,qBAAqB,CAAC,KAAK,EAAE,YAAY;IAehC,OAAO,CAAC,QAAQ,EAAE,kBAAkB;IAIpC,QAAQ,CAAC,QAAQ,EAAE,mBAAmB;IAM/C;;;OAGG;IACM,aAAa,CAAC,QAAQ,EAAE,wBAAwB;IAiCzD;;;;OAIG;IACM,kBAAkB,CAAC,QAAQ,EAAE,6BAA6B;IA6F1D,oBAAoB,CAAC,QAAQ,EAAE,+BAA+B;IAI9D,cAAc,CAAC,QAAQ,EAAE,yBAAyB;IAKlD,kBAAkB,CAAC,QAAQ,EAAE,6BAA6B;gBA0B9C,SAAS,EAAE,2BAA2B;CAS5D"}
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
import { parseJsdoc } from './jsdoc.js';
|
|
2
|
+
import { logger } from './logger.js';
|
|
3
|
+
import { GmlVisitorBase } from './parser.js';
|
|
4
|
+
import { identifierFrom } from './parser.utility.js';
|
|
5
|
+
import { Diagnostic } from './project.diagnostics.js';
|
|
6
|
+
import { Range } from './project.location.js';
|
|
7
|
+
import { Signifier } from './signifiers.js';
|
|
8
|
+
import { typeFromParsedJsdocs } from './types.feather.js';
|
|
9
|
+
import { Type } from './types.js';
|
|
10
|
+
import { StitchParserError, assert } from './util.js';
|
|
11
|
+
export function registerGlobals(file) {
|
|
12
|
+
try {
|
|
13
|
+
const processor = new GlobalDeclarationsProcessor(file);
|
|
14
|
+
const visitor = new GmlGlobalDeclarationsVisitor(processor);
|
|
15
|
+
visitor.EXTRACT_GLOBAL_DECLARATIONS(file.cst);
|
|
16
|
+
}
|
|
17
|
+
catch (parseError) {
|
|
18
|
+
const err = new StitchParserError(`Error parsing globals in ${file.path}`);
|
|
19
|
+
err.cause = parseError;
|
|
20
|
+
logger.error(err);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
class GlobalDeclarationsProcessor {
|
|
24
|
+
file;
|
|
25
|
+
localScopeStack = [];
|
|
26
|
+
start;
|
|
27
|
+
constructor(file) {
|
|
28
|
+
this.file = file;
|
|
29
|
+
this.localScopeStack.push(file.scopes[0].local);
|
|
30
|
+
assert(file.scopes[0], 'File must have a global scope');
|
|
31
|
+
this.start = file.scopes[0].start;
|
|
32
|
+
}
|
|
33
|
+
range(loc) {
|
|
34
|
+
return Range.fromCst(this.start.file, loc);
|
|
35
|
+
}
|
|
36
|
+
get currentLocalScope() {
|
|
37
|
+
return this.localScopeStack.at(-1);
|
|
38
|
+
}
|
|
39
|
+
pushLocalScope() {
|
|
40
|
+
const localScope = new Type('Struct');
|
|
41
|
+
this.localScopeStack.push(localScope);
|
|
42
|
+
}
|
|
43
|
+
popLocalScope() {
|
|
44
|
+
this.localScopeStack.pop();
|
|
45
|
+
}
|
|
46
|
+
get asset() {
|
|
47
|
+
return this.file.asset;
|
|
48
|
+
}
|
|
49
|
+
get project() {
|
|
50
|
+
return this.asset.project;
|
|
51
|
+
}
|
|
52
|
+
get globalSelf() {
|
|
53
|
+
return this.project.self;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Visits the CST and creates symbols for global signifiers.
|
|
58
|
+
*/
|
|
59
|
+
export class GmlGlobalDeclarationsVisitor extends GmlVisitorBase {
|
|
60
|
+
PROCESSOR;
|
|
61
|
+
static validated = false;
|
|
62
|
+
EXTRACT_GLOBAL_DECLARATIONS(input) {
|
|
63
|
+
this.PROCESSOR.file.callsSuper = false;
|
|
64
|
+
// If we are reprocessing, we want the list of globals that used
|
|
65
|
+
// to be declared here in case any have gone missing.
|
|
66
|
+
this.visit(input);
|
|
67
|
+
return this.PROCESSOR;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Register a global identifier from its declaration. Note that
|
|
71
|
+
* global identifiers are not deleted when their definitions are,
|
|
72
|
+
* so we need to either create *or update* the corresponding symbol/typeMember.
|
|
73
|
+
*/
|
|
74
|
+
REGISTER_GLOBAL(children) {
|
|
75
|
+
const name = children.Identifier?.[0];
|
|
76
|
+
if (!name)
|
|
77
|
+
return;
|
|
78
|
+
const range = this.PROCESSOR.range(name);
|
|
79
|
+
return this.REGISTER_GLOBAL_BY_NAME(name.image, range);
|
|
80
|
+
}
|
|
81
|
+
REGISTER_GLOBAL_BY_NAME(name, range, isNotDef = false) {
|
|
82
|
+
// Create it if it doesn't already exist.
|
|
83
|
+
let symbol = this.PROCESSOR.globalSelf.getMember(name);
|
|
84
|
+
if (!symbol) {
|
|
85
|
+
symbol = new Signifier(this.PROCESSOR.project.self, name);
|
|
86
|
+
// Add the symbol and type to the project.
|
|
87
|
+
this.PROCESSOR.globalSelf.addMember(symbol);
|
|
88
|
+
}
|
|
89
|
+
// Ensure it's defined here.
|
|
90
|
+
if (!isNotDef && !symbol.native) {
|
|
91
|
+
symbol.definedAt(range);
|
|
92
|
+
}
|
|
93
|
+
else if (!isNotDef) {
|
|
94
|
+
this.PROCESSOR.file.addDiagnostic('INVALID_OPERATION', new Diagnostic(`"${name}" already exists as a built-in symbol.`, range, 'warning'));
|
|
95
|
+
}
|
|
96
|
+
symbol.addRef(range, !isNotDef && !symbol.native);
|
|
97
|
+
symbol.global = true;
|
|
98
|
+
symbol.macro = false; // Reset macro status
|
|
99
|
+
symbol.enum = false; // Reset enum status
|
|
100
|
+
return symbol;
|
|
101
|
+
}
|
|
102
|
+
REGISTER_JSDOC_GLOBAL(jsdoc) {
|
|
103
|
+
if (jsdoc.kind !== 'globalvar') {
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
const symbol = this.REGISTER_GLOBAL_BY_NAME(jsdoc.name.content, Range.from(this.PROCESSOR.file, jsdoc.name));
|
|
107
|
+
symbol.setType(typeFromParsedJsdocs(jsdoc, this.PROCESSOR.project.types, false));
|
|
108
|
+
symbol.describe(jsdoc.description);
|
|
109
|
+
// NOTE: references to types are added during local processing so they are not needed here
|
|
110
|
+
}
|
|
111
|
+
jsdocJs(children) {
|
|
112
|
+
this.REGISTER_JSDOC_GLOBAL(parseJsdoc(children.JsdocJs[0]));
|
|
113
|
+
}
|
|
114
|
+
jsdocGml(children) {
|
|
115
|
+
for (const line of children.JsdocGmlLine) {
|
|
116
|
+
this.REGISTER_JSDOC_GLOBAL(parseJsdoc(line));
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Collect the enum symbol *and* its members, since all of those
|
|
121
|
+
* are globally visible.
|
|
122
|
+
*/
|
|
123
|
+
enumStatement(children) {
|
|
124
|
+
const symbol = this.REGISTER_GLOBAL(children);
|
|
125
|
+
assert(symbol, 'Enum symbol should exist');
|
|
126
|
+
symbol.enum = true;
|
|
127
|
+
let type = symbol.getTypeByKind('Enum');
|
|
128
|
+
if (!type) {
|
|
129
|
+
symbol.setType(new Type('Enum'));
|
|
130
|
+
type = symbol.getTypeByKind('Enum');
|
|
131
|
+
}
|
|
132
|
+
if (symbol.type.type.length > 1) {
|
|
133
|
+
symbol.setType(type);
|
|
134
|
+
}
|
|
135
|
+
type.named(symbol.name);
|
|
136
|
+
type.signifier = symbol;
|
|
137
|
+
this.PROCESSOR.project.types.set(`Enum.${symbol.name}`, type);
|
|
138
|
+
// Upsert the enum members
|
|
139
|
+
for (let i = 0; i < children.enumMember.length; i++) {
|
|
140
|
+
const name = children.enumMember[i].children.Identifier[0];
|
|
141
|
+
const range = this.PROCESSOR.range(name);
|
|
142
|
+
// Does member already exist?
|
|
143
|
+
const member = type.getMember(name.image) || type.addMember(name.image);
|
|
144
|
+
const memberType = member.type.type[0] || new Type('EnumMember').named(name.image);
|
|
145
|
+
member.setType(memberType);
|
|
146
|
+
memberType.signifier = member;
|
|
147
|
+
member.enumMember = true;
|
|
148
|
+
member.idx = i;
|
|
149
|
+
member.definedAt(range);
|
|
150
|
+
member.addRef(range, true);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Identify global function declarations and store them as
|
|
155
|
+
* symbols or `global.` types. For constructors, add the
|
|
156
|
+
* corresponding types.
|
|
157
|
+
*/
|
|
158
|
+
functionExpression(children) {
|
|
159
|
+
const isGlobal = this.PROCESSOR.currentLocalScope ===
|
|
160
|
+
this.PROCESSOR.file.scopes[0].local &&
|
|
161
|
+
this.PROCESSOR.asset.assetKind === 'scripts';
|
|
162
|
+
// Functions create a new localscope. Keeping track of that is important
|
|
163
|
+
// for making sure that we're looking at a global function declaration.
|
|
164
|
+
this.PROCESSOR.pushLocalScope();
|
|
165
|
+
const name = children.Identifier?.[0];
|
|
166
|
+
if (name && isGlobal) {
|
|
167
|
+
// Add the function to a table of functions
|
|
168
|
+
const constructorNode = children.constructorSuffix?.[0];
|
|
169
|
+
let parentConstructs;
|
|
170
|
+
if (constructorNode?.children.Identifier) {
|
|
171
|
+
// Ensure that the parent type exists
|
|
172
|
+
const parentName = constructorNode.children.Identifier[0]?.image;
|
|
173
|
+
if (parentName) {
|
|
174
|
+
const parentNameRange = this.PROCESSOR.range(constructorNode.children.Identifier[0]);
|
|
175
|
+
const parentSignifier = this.REGISTER_GLOBAL_BY_NAME(parentName, parentNameRange, true);
|
|
176
|
+
let parentType = parentSignifier.type.type[0];
|
|
177
|
+
if (!parentType) {
|
|
178
|
+
parentType = new Type('Function').named(parentName);
|
|
179
|
+
parentSignifier.setType(parentType);
|
|
180
|
+
}
|
|
181
|
+
// Ensure it has a constructs type
|
|
182
|
+
parentType.isConstructor = true;
|
|
183
|
+
parentConstructs =
|
|
184
|
+
parentType.self ||
|
|
185
|
+
new Type('Struct').named(parentName);
|
|
186
|
+
parentType.self = parentConstructs;
|
|
187
|
+
parentConstructs.signifier = parentSignifier;
|
|
188
|
+
this.PROCESSOR.project.types.set(`Struct.${parentName}`, parentConstructs);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
const signifier = this.REGISTER_GLOBAL(children);
|
|
192
|
+
// Make sure that the types all exist
|
|
193
|
+
let type = signifier.getTypeByKind('Function');
|
|
194
|
+
if (!type) {
|
|
195
|
+
// Create the type if needed, but if there's already an existing
|
|
196
|
+
// type with this name grab that instead (helps reduce reference
|
|
197
|
+
// problems during editing)
|
|
198
|
+
const typeName = `Function.${name.image}`;
|
|
199
|
+
type = (this.PROCESSOR.project.types.get(typeName) ||
|
|
200
|
+
new Type('Function').named(name.image));
|
|
201
|
+
signifier.setType(type);
|
|
202
|
+
type = signifier.getTypeByKind('Function');
|
|
203
|
+
this.PROCESSOR.project.types.set(typeName, type);
|
|
204
|
+
}
|
|
205
|
+
// Global functions can only have one type!
|
|
206
|
+
if (signifier.type.type.length > 1) {
|
|
207
|
+
signifier.setType(type);
|
|
208
|
+
}
|
|
209
|
+
// Reset the self context to account for the user changing a function
|
|
210
|
+
// from a constructor to a regular function and vice versa
|
|
211
|
+
type.self = undefined;
|
|
212
|
+
// Ensure that the type links back to the signifier
|
|
213
|
+
type.signifier = signifier;
|
|
214
|
+
// If it's a constructor, ensure the type exists
|
|
215
|
+
if (constructorNode) {
|
|
216
|
+
type.self = (this.PROCESSOR.project.types.get(`Struct.${name.image}`) ||
|
|
217
|
+
new Type('Struct').named(name.image));
|
|
218
|
+
type.self.signifier = signifier;
|
|
219
|
+
this.PROCESSOR.project.types.set(`Struct.${name.image}`, type.self);
|
|
220
|
+
}
|
|
221
|
+
if (parentConstructs && type.self) {
|
|
222
|
+
type.self.extends = parentConstructs;
|
|
223
|
+
}
|
|
224
|
+
// Initialize the local scope
|
|
225
|
+
type.local ||= Type.Struct;
|
|
226
|
+
}
|
|
227
|
+
this.visit(children.blockStatement);
|
|
228
|
+
// End the scope
|
|
229
|
+
this.PROCESSOR.popLocalScope();
|
|
230
|
+
}
|
|
231
|
+
globalVarDeclaration(children) {
|
|
232
|
+
this.REGISTER_GLOBAL(children);
|
|
233
|
+
}
|
|
234
|
+
macroStatement(children) {
|
|
235
|
+
const symbol = this.REGISTER_GLOBAL(children);
|
|
236
|
+
symbol.macro = true;
|
|
237
|
+
}
|
|
238
|
+
identifierAccessor(children) {
|
|
239
|
+
// Add global.whatever symbols
|
|
240
|
+
const identifier = identifierFrom(children);
|
|
241
|
+
if (identifier?.type === 'Global') {
|
|
242
|
+
const globalIdentifier = children.accessorSuffixes?.[0].children.dotAccessSuffix?.[0].children
|
|
243
|
+
.identifier[0].children;
|
|
244
|
+
if (globalIdentifier?.Identifier) {
|
|
245
|
+
this.REGISTER_GLOBAL(globalIdentifier);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
else if (identifier?.type === 'Identifier' &&
|
|
249
|
+
children.accessorSuffixes?.[0].children.functionArguments) {
|
|
250
|
+
// See if this is a function call for `event_inherited()`
|
|
251
|
+
if (identifier.name === 'event_inherited') {
|
|
252
|
+
this.PROCESSOR.file.callsSuper = true;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
// Still visit the rest
|
|
256
|
+
if (children.accessorSuffixes) {
|
|
257
|
+
this.visit(children.accessorSuffixes);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
constructor(PROCESSOR) {
|
|
261
|
+
super();
|
|
262
|
+
this.PROCESSOR = PROCESSOR;
|
|
263
|
+
if (!GmlGlobalDeclarationsVisitor.validated) {
|
|
264
|
+
// Validator logic only needs to run once, since
|
|
265
|
+
// new instances will be the same.
|
|
266
|
+
this.validateVisitor();
|
|
267
|
+
GmlGlobalDeclarationsVisitor.validated = true;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
//# sourceMappingURL=visitor.globals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visitor.globals.js","sourceRoot":"","sources":["../src/visitor.globals.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { IdentifierAccessorCstChildren } from '../gml-cst.js';
|
|
2
|
+
import { type VisitorContext } from './parser.js';
|
|
3
|
+
import { Type, TypeStore } from './types.js';
|
|
4
|
+
import type { GmlSignifierVisitor } from './visitor.js';
|
|
5
|
+
export declare function visitIdentifierAccessor(this: GmlSignifierVisitor, children: IdentifierAccessorCstChildren, ctx: VisitorContext): Type[] | TypeStore[];
|
|
6
|
+
//# sourceMappingURL=visitor.identifierAccessor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visitor.identifierAccessor.d.ts","sourceRoot":"","sources":["../src/visitor.identifierAccessor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAKV,6BAA6B,EAC9B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAyBrE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAgB,MAAM,YAAY,CAAC;AAI3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAuBxD,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,mBAAmB,EACzB,QAAQ,EAAE,6BAA6B,EACvC,GAAG,EAAE,cAAc,GAClB,IAAI,EAAE,GAAG,SAAS,EAAE,CAyFtB"}
|