@intend-it/parser 1.1.1 → 1.1.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/dist/index.js +23 -2
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -9167,6 +9167,7 @@ var Is = createToken({ name: "Is", pattern: /is/ });
|
|
|
9167
9167
|
var Defined = createToken({ name: "Defined", pattern: /defined/ });
|
|
9168
9168
|
var Entry = createToken({ name: "Entry", pattern: /entry/ });
|
|
9169
9169
|
var Let = createToken({ name: "Let", pattern: /let/ });
|
|
9170
|
+
var Return = createToken({ name: "Return", pattern: /return/ });
|
|
9170
9171
|
var LCurly = createToken({ name: "LCurly", pattern: /{/ });
|
|
9171
9172
|
var RCurly = createToken({ name: "RCurly", pattern: /}/ });
|
|
9172
9173
|
var LParen = createToken({ name: "LParen", pattern: /\(/ });
|
|
@@ -9207,6 +9208,7 @@ var allTokens = [
|
|
|
9207
9208
|
Defined,
|
|
9208
9209
|
Entry,
|
|
9209
9210
|
Let,
|
|
9211
|
+
Return,
|
|
9210
9212
|
Arrow,
|
|
9211
9213
|
FatArrow,
|
|
9212
9214
|
GreaterThanEquals,
|
|
@@ -9311,7 +9313,8 @@ class IntendParser extends CstParser {
|
|
|
9311
9313
|
this.OR([
|
|
9312
9314
|
{ ALT: () => this.SUBRULE(this.invariantStatement) },
|
|
9313
9315
|
{ ALT: () => this.SUBRULE(this.stepStatement) },
|
|
9314
|
-
{ ALT: () => this.SUBRULE(this.ensureStatement) }
|
|
9316
|
+
{ ALT: () => this.SUBRULE(this.ensureStatement) },
|
|
9317
|
+
{ ALT: () => this.SUBRULE(this.returnStatement) }
|
|
9315
9318
|
]);
|
|
9316
9319
|
});
|
|
9317
9320
|
invariantStatement = this.RULE("invariantStatement", () => {
|
|
@@ -9347,6 +9350,13 @@ class IntendParser extends CstParser {
|
|
|
9347
9350
|
]);
|
|
9348
9351
|
});
|
|
9349
9352
|
});
|
|
9353
|
+
returnStatement = this.RULE("returnStatement", () => {
|
|
9354
|
+
this.CONSUME(Return);
|
|
9355
|
+
this.CONSUME(Identifier);
|
|
9356
|
+
this.OPTION(() => {
|
|
9357
|
+
this.CONSUME(Semicolon);
|
|
9358
|
+
});
|
|
9359
|
+
});
|
|
9350
9360
|
}
|
|
9351
9361
|
|
|
9352
9362
|
// src/ast/visitor.ts
|
|
@@ -9410,6 +9420,7 @@ class IntendASTVisitor extends BaseIntendVisitor {
|
|
|
9410
9420
|
const invariants = [];
|
|
9411
9421
|
const steps = [];
|
|
9412
9422
|
const ensures = [];
|
|
9423
|
+
let returnStmt;
|
|
9413
9424
|
if (ctx.statement) {
|
|
9414
9425
|
ctx.statement.forEach((stmt) => {
|
|
9415
9426
|
const result = this.visit(stmt);
|
|
@@ -9419,10 +9430,12 @@ class IntendASTVisitor extends BaseIntendVisitor {
|
|
|
9419
9430
|
steps.push(result);
|
|
9420
9431
|
} else if (result.type === "Ensure") {
|
|
9421
9432
|
ensures.push(result);
|
|
9433
|
+
} else if (result.type === "Return") {
|
|
9434
|
+
returnStmt = result;
|
|
9422
9435
|
}
|
|
9423
9436
|
});
|
|
9424
9437
|
}
|
|
9425
|
-
return { invariants, steps, ensures };
|
|
9438
|
+
return { invariants, steps, ensures, returnStmt };
|
|
9426
9439
|
}
|
|
9427
9440
|
statement(ctx) {
|
|
9428
9441
|
if (ctx.invariantStatement) {
|
|
@@ -9431,6 +9444,8 @@ class IntendASTVisitor extends BaseIntendVisitor {
|
|
|
9431
9444
|
return this.visit(ctx.stepStatement);
|
|
9432
9445
|
} else if (ctx.ensureStatement) {
|
|
9433
9446
|
return this.visit(ctx.ensureStatement);
|
|
9447
|
+
} else if (ctx.returnStatement) {
|
|
9448
|
+
return this.visit(ctx.returnStatement);
|
|
9434
9449
|
}
|
|
9435
9450
|
throw new Error("Unknown statement type");
|
|
9436
9451
|
}
|
|
@@ -9454,6 +9469,12 @@ class IntendASTVisitor extends BaseIntendVisitor {
|
|
|
9454
9469
|
variableKind
|
|
9455
9470
|
};
|
|
9456
9471
|
}
|
|
9472
|
+
returnStatement(ctx) {
|
|
9473
|
+
return {
|
|
9474
|
+
type: "Return",
|
|
9475
|
+
identifier: ctx.Identifier[0].image
|
|
9476
|
+
};
|
|
9477
|
+
}
|
|
9457
9478
|
ensureStatement(ctx) {
|
|
9458
9479
|
const tokens = [
|
|
9459
9480
|
...ctx.Identifier || [],
|