From 3c1baf5c2f19ac134e9b2b207ade4f1980c310ca Mon Sep 17 00:00:00 2001 From: verytactical <186486509+verytactical@users.noreply.github.com> Date: Tue, 14 Jan 2025 17:36:11 +0400 Subject: [PATCH] refactor: factor out AST --- CONTRIBUTING.md | 4 +- knip.json | 2 +- src/abi/AbiFunction.ts | 2 +- src/abi/global.ts | 2 +- src/abi/map.ts | 2 +- src/ast/ast.ts | 59 +++++++++---------- src/ast/compare.ts | 2 +- src/ast/rename.ts | 6 +- src/bindings/writeTypescript.ts | 2 +- src/context/store.ts | 6 +- src/error/errors.ts | 2 +- src/generator/createABI.ts | 2 +- src/generator/writeProgram.ts | 2 +- src/generator/writers/id.ts | 2 +- src/generator/writers/resolveFuncType.spec.ts | 4 +- src/generator/writers/writeExpression.spec.ts | 4 +- src/generator/writers/writeExpression.ts | 2 +- src/generator/writers/writeFunction.ts | 2 +- src/generator/writers/writeRouter.ts | 2 +- .../writers/writeSerialization.spec.ts | 4 +- src/grammar/grammar.ts | 2 +- src/grammar/next/grammar.spec.ts | 2 +- src/grammar/next/index.ts | 4 +- src/grammar/prev/grammar.spec.ts | 2 +- src/grammar/prev/grammar.ts | 2 +- src/grammar/test/expr-equality.spec.ts | 2 +- src/grammar/test/expr-is-value.spec.ts | 2 +- src/imports/resolveImports.spec.ts | 2 +- src/index.ts | 8 +-- src/optimizer/algebraic.ts | 2 +- src/optimizer/associative.ts | 2 +- src/optimizer/constEval.ts | 2 +- src/optimizer/interpreter.ts | 2 +- src/optimizer/standardOptimizer.ts | 2 +- src/optimizer/test/partial-eval.spec.ts | 2 +- src/optimizer/types.ts | 2 +- src/optimizer/util.ts | 2 +- src/pipeline/build.ts | 4 +- src/pipeline/precompile.ts | 4 +- src/prettyPrinter.ts | 2 +- src/storage/resolveAllocation.spec.ts | 4 +- src/storage/resolveAllocation.ts | 2 +- src/test/compare.spec.ts | 4 +- src/test/prettyPrinter.spec.ts | 2 +- src/test/rename.spec.ts | 4 +- src/types/resolveABITypeRef.ts | 2 +- src/types/resolveDescriptors.spec.ts | 4 +- src/types/resolveDescriptors.ts | 8 +-- src/types/resolveErrors.ts | 4 +- src/types/resolveExpression.ts | 2 +- src/types/resolveSignatures.ts | 2 +- src/types/resolveStatements.spec.ts | 4 +- src/types/resolveStatements.ts | 2 +- src/types/types.ts | 2 +- 54 files changed, 103 insertions(+), 108 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b3a10ec33..89598e5f0 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -119,7 +119,7 @@ Some CLI tests can be found in [.github/workflows/tact.yml](./.github/workflows/ The [src/grammar/grammar.ohm](./src/grammar/grammar.ohm) file contains the Tact grammar expressed in the PEG-like language of the [Ohm.js](https://ohmjs.org) parser generator. -The helper file [src/grammar/grammar.ts](./src/grammar/grammar.ts) contains the logic that transforms concrete syntax trees produced with the help of the Ohm.js-generated parser into abstract syntax trees (ASTs) defined in [src/grammar/ast.ts](./src/grammar/ast.ts). The grammar.ts file also does a bit of grammar validation, like checking that function or constant attributes are not duplicated or that user identifiers do not start with certain reserved prefixes. +The helper file [src/grammar/grammar.ts](./src/grammar/grammar.ts) contains the logic that transforms concrete syntax trees produced with the help of the Ohm.js-generated parser into abstract syntax trees (ASTs) defined in [src/ast/ast.ts](./src/ast/ast.ts). The grammar.ts file also does a bit of grammar validation, like checking that function or constant attributes are not duplicated or that user identifiers do not start with certain reserved prefixes. The [src/grammar/test](./src/grammar/test) folder contains Tact files that are supposed to be parsed without any issues, and the [src/grammar/test-failed](./src/grammar/test-failed) folder contains grammatically incorrect test files which should result in parser errors. The parser error messages and the locations they point to are fixed in the [src/grammar/**snapshots**/grammar.spec.ts.snap](./src/grammar/__snapshots__/grammar.spec.ts.snap) Jest snapshot file. @@ -177,6 +177,6 @@ Some other codegen tests are as follows: The entry point to the Tact AST pretty-printer is [src/prettyPrinter.ts](./src/prettyPrinter.ts). It is going to be used for the Tact source code formatter once the parser keeps comments and other relevant information. -The AST comparator is defined in [src/grammar/compare.ts](./src/grammar/compare.ts). This is useful, for instance, for static analysis tools which can re-use the Tact TypeScript API. +The AST comparator is defined in [src/ast/compare.ts](./src/ast/compare.ts). This is useful, for instance, for static analysis tools which can re-use the Tact TypeScript API. The corresponding test spec files can be found in [src/test](./src/test/) folder with the test contracts in [src/test/contracts](./src/test/contracts/) folder. diff --git a/knip.json b/knip.json index 34a0b0e6b..75dec0009 100644 --- a/knip.json +++ b/knip.json @@ -9,7 +9,7 @@ ], "project": ["src/**/*.ts", "bin/tact.js", "bin/unboc.js"], "ignore": [ - "src/grammar/ast.ts", + "src/ast/ast.ts", "src/prettyPrinter.ts", "src/error/display-to-json.ts", "src/grammar/src-info.ts", diff --git a/src/abi/AbiFunction.ts b/src/abi/AbiFunction.ts index cedb81ae7..cdb09293f 100644 --- a/src/abi/AbiFunction.ts +++ b/src/abi/AbiFunction.ts @@ -1,4 +1,4 @@ -import { AstExpression } from "../grammar/ast"; +import { AstExpression } from "../ast/ast"; import { CompilerContext } from "../context/context"; import { WriterContext } from "../generator/Writer"; import { TypeRef } from "../types/types"; diff --git a/src/abi/global.ts b/src/abi/global.ts index 130e894e5..1f4e1c9dc 100644 --- a/src/abi/global.ts +++ b/src/abi/global.ts @@ -19,7 +19,7 @@ import { ensureString, interpretEscapeSequences, } from "../optimizer/interpreter"; -import { isLiteral } from "../grammar/ast"; +import { isLiteral } from "../ast/ast"; export const GlobalFunctions: Map = new Map([ [ diff --git a/src/abi/map.ts b/src/abi/map.ts index b952c6ea1..228750f76 100644 --- a/src/abi/map.ts +++ b/src/abi/map.ts @@ -7,7 +7,7 @@ import { writeExpression } from "../generator/writers/writeExpression"; import { throwCompilationError } from "../error/errors"; import { getType } from "../types/resolveDescriptors"; import { AbiFunction } from "./AbiFunction"; -import { AstExpression } from "../grammar/ast"; +import { AstExpression } from "../ast/ast"; // Helper functions to avoid redundancy function checkArgumentsLength( diff --git a/src/ast/ast.ts b/src/ast/ast.ts index 2b3ed020d..34e25472f 100644 --- a/src/ast/ast.ts +++ b/src/ast/ast.ts @@ -1,6 +1,6 @@ import { Address, Cell, Slice } from "@ton/core"; import { throwInternalCompilerError } from "../error/errors"; -import { dummySrcInfo, SrcInfo } from "./src-info"; +import { dummySrcInfo, SrcInfo } from "../grammar/src-info"; export type AstModule = { kind: "module"; @@ -380,25 +380,28 @@ export type AstBouncedMessageType = { // export type AstExpression = - | AstExpressionPrimary | AstOpBinary | AstOpUnary | AstConditional - // AstLiteral could be added in AstExpressionPrimary, - // but AstExpressionPrimary is planned to be removed. See issue #1290 (https://github.com/tact-lang/tact/issues/1290). - | AstLiteral; - -export type AstExpressionPrimary = | AstMethodCall | AstFieldAccess | AstStaticCall | AstStructInstance + | AstId + | AstInitOf + | AstString + | AstLiteral; + +export type AstLiteral = | AstNumber | AstBoolean - | AstId | AstNull - | AstInitOf - | AstString; + | AstSimplifiedString + | AstAddress + | AstCell + | AstSlice + | AstCommentValue + | AstStructValue; export type AstBinaryOperation = | "+" @@ -638,6 +641,20 @@ export type AstBoolean = { loc: SrcInfo; }; +// An AstSimplifiedString is a string in which escaping characters, like '\\' has been simplified, e.g., '\\' simplified to '\'. +// An AstString is not a literal because it may contain escaping characters that have not been simplified, like '\\'. +// AstSimplifiedString is always produced by the interpreter, never directly by the parser. The parser produces AstStrings, which +// then get transformed into AstSimplifiedString by the interpreter. +export type AstSimplifiedString = { + kind: "simplified_string"; + value: string; + id: number; + loc: SrcInfo; +}; + +/** + * @deprecated AstSimplifiedString + */ export type AstString = { kind: "string"; value: string; @@ -654,28 +671,6 @@ export type AstNull = { loc: SrcInfo; }; -export type AstLiteral = - | AstNumber - | AstBoolean - | AstNull - // An AstSimplifiedString is a string in which escaping characters, like '\\' has been simplified, e.g., '\\' simplified to '\'. - // An AstString is not a literal because it may contain escaping characters that have not been simplified, like '\\'. - // AstSimplifiedString is always produced by the interpreter, never directly by the parser. The parser produces AstStrings, which - // then get transformed into AstSimplifiedString by the interpreter. - | AstSimplifiedString - | AstAddress - | AstCell - | AstSlice - | AstCommentValue - | AstStructValue; - -export type AstSimplifiedString = { - kind: "simplified_string"; - value: string; - id: number; - loc: SrcInfo; -}; - export type AstAddress = { kind: "address"; value: Address; diff --git a/src/ast/compare.ts b/src/ast/compare.ts index 3c60f0894..918d3bd95 100644 --- a/src/ast/compare.ts +++ b/src/ast/compare.ts @@ -54,7 +54,7 @@ import { AstAsmInstruction, AstDestructMapping, AstStatementDestruct, -} from "../ast/ast"; +} from "./ast"; import { AstRenamer } from "./rename"; import { throwInternalCompilerError } from "../error/errors"; import JSONbig from "json-bigint"; diff --git a/src/ast/rename.ts b/src/ast/rename.ts index 8feaec0bd..54e9a36f6 100644 --- a/src/ast/rename.ts +++ b/src/ast/rename.ts @@ -16,10 +16,10 @@ import { AstConstantDecl, AstNode, AstFunctionAttribute, -} from "../ast/ast"; +} from "./ast"; import { AstSorter } from "./sort"; -import { AstHasher, AstHash } from "../ast/hash"; -import { dummySrcInfo } from "./src-info"; +import { AstHasher, AstHash } from "./hash"; +import { dummySrcInfo } from "../grammar/src-info"; type GivenName = string; diff --git a/src/bindings/writeTypescript.ts b/src/bindings/writeTypescript.ts index 57d6029e2..27037fe16 100644 --- a/src/bindings/writeTypescript.ts +++ b/src/bindings/writeTypescript.ts @@ -21,7 +21,7 @@ import { getAllocationOperationFromField, } from "../storage/allocator"; import { serializers } from "./typescript/serializers"; -import { eqNames } from "../grammar/ast"; +import { eqNames } from "../ast/ast"; function writeArguments(args: ABIArgument[]) { const res: string[] = []; diff --git a/src/context/store.ts b/src/context/store.ts index 135f11e2b..92014b874 100644 --- a/src/context/store.ts +++ b/src/context/store.ts @@ -7,9 +7,9 @@ import { AstAsmFunctionDef, } from "../ast/ast"; import { throwInternalCompilerError } from "../error/errors"; -import { CompilerContext, createContextStore } from "../context/context"; -import { ItemOrigin } from "./src-info"; -import { Parser } from "./grammar"; +import { CompilerContext, createContextStore } from "./context"; +import { ItemOrigin } from "../grammar/src-info"; +import { Parser } from "../grammar/grammar"; /** * @public diff --git a/src/error/errors.ts b/src/error/errors.ts index f12c0b4c8..4da6a4baa 100644 --- a/src/error/errors.ts +++ b/src/error/errors.ts @@ -1,6 +1,6 @@ import path from "path"; import { cwd } from "process"; -import { AstFuncId, AstId, AstTypeId } from "../grammar/ast"; +import { AstFuncId, AstId, AstTypeId } from "../ast/ast"; import { SrcInfo } from "../grammar"; export class TactError extends Error { diff --git a/src/generator/createABI.ts b/src/generator/createABI.ts index 5bb5f7974..c1856e109 100644 --- a/src/generator/createABI.ts +++ b/src/generator/createABI.ts @@ -1,7 +1,7 @@ import { ABIGetter, ABIReceiver, ABIType, ContractABI } from "@ton/core"; import { contractErrors } from "../abi/errors"; import { CompilerContext } from "../context/context"; -import { idText } from "../grammar/ast"; +import { idText } from "../ast/ast"; import { getSupportedInterfaces } from "../types/getSupportedInterfaces"; import { createABITypeRefFromTypeRef } from "../types/resolveABITypeRef"; import { getAllTypes } from "../types/resolveDescriptors"; diff --git a/src/generator/writeProgram.ts b/src/generator/writeProgram.ts index e15a0f822..e5486d8a6 100644 --- a/src/generator/writeProgram.ts +++ b/src/generator/writeProgram.ts @@ -18,7 +18,7 @@ import { writeAccessors } from "./writers/writeAccessors"; import { ContractABI } from "@ton/core"; import { writeFunction } from "./writers/writeFunction"; import { calculateIPFSlink } from "../utils/calculateIPFSlink"; -import { getRawAST } from "../grammar/store"; +import { getRawAST } from "../context/store"; import { emit } from "./emitter/emit"; import { writeInit, diff --git a/src/generator/writers/id.ts b/src/generator/writers/id.ts index 50c55372d..9b9408fd3 100644 --- a/src/generator/writers/id.ts +++ b/src/generator/writers/id.ts @@ -1,4 +1,4 @@ -import { AstId, idText } from "../../grammar/ast"; +import { AstId, idText } from "../../ast/ast"; export function funcIdOf(ident: AstId | string): string { if (typeof ident === "string") { diff --git a/src/generator/writers/resolveFuncType.spec.ts b/src/generator/writers/resolveFuncType.spec.ts index 534155355..1a3a99f21 100644 --- a/src/generator/writers/resolveFuncType.spec.ts +++ b/src/generator/writers/resolveFuncType.spec.ts @@ -1,8 +1,8 @@ -import { getAstFactory } from "../../grammar/ast"; +import { getAstFactory } from "../../ast/ast"; import { resolveDescriptors } from "../../types/resolveDescriptors"; import { WriterContext } from "../Writer"; import { resolveFuncType } from "./resolveFuncType"; -import { openContext } from "../../grammar/store"; +import { openContext } from "../../context/store"; import { CompilerContext } from "../../context/context"; import { getParser } from "../../grammar"; import { defaultParser } from "../../grammar/grammar"; diff --git a/src/generator/writers/writeExpression.spec.ts b/src/generator/writers/writeExpression.spec.ts index 045244e6b..19213da65 100644 --- a/src/generator/writers/writeExpression.spec.ts +++ b/src/generator/writers/writeExpression.spec.ts @@ -4,11 +4,11 @@ import { } from "../../types/resolveDescriptors"; import { WriterContext } from "../Writer"; import { writeExpression } from "./writeExpression"; -import { openContext } from "../../grammar/store"; +import { openContext } from "../../context/store"; import { resolveStatements } from "../../types/resolveStatements"; import { CompilerContext } from "../../context/context"; import { getParser } from "../../grammar"; -import { getAstFactory } from "../../grammar/ast"; +import { getAstFactory } from "../../ast/ast"; import { defaultParser } from "../../grammar/grammar"; const code = ` diff --git a/src/generator/writers/writeExpression.ts b/src/generator/writers/writeExpression.ts index 2a21d894a..17a416553 100644 --- a/src/generator/writers/writeExpression.ts +++ b/src/generator/writers/writeExpression.ts @@ -6,7 +6,7 @@ import { getAstFactory, idText, tryExtractPath, -} from "../../grammar/ast"; +} from "../../ast/ast"; import { idTextErr, TactConstEvalError, diff --git a/src/generator/writers/writeFunction.ts b/src/generator/writers/writeFunction.ts index 41143612b..e399970a4 100644 --- a/src/generator/writers/writeFunction.ts +++ b/src/generator/writers/writeFunction.ts @@ -8,7 +8,7 @@ import { idText, isWildcard, tryExtractPath, -} from "../../grammar/ast"; +} from "../../ast/ast"; import { getType, resolveTypeRef } from "../../types/resolveDescriptors"; import { getExpType } from "../../types/resolveExpression"; import { FunctionDescription, TypeRef } from "../../types/types"; diff --git a/src/generator/writers/writeRouter.ts b/src/generator/writers/writeRouter.ts index 82f2e3861..4b92b7526 100644 --- a/src/generator/writers/writeRouter.ts +++ b/src/generator/writers/writeRouter.ts @@ -7,7 +7,7 @@ import { ops } from "./ops"; import { resolveFuncType } from "./resolveFuncType"; import { resolveFuncTypeUnpack } from "./resolveFuncTypeUnpack"; import { writeStatement } from "./writeFunction"; -import { AstNumber } from "../../grammar/ast"; +import { AstNumber } from "../../ast/ast"; export function commentPseudoOpcode(comment: string): string { return beginCell() diff --git a/src/generator/writers/writeSerialization.spec.ts b/src/generator/writers/writeSerialization.spec.ts index 41d2d4efe..e77b3a41c 100644 --- a/src/generator/writers/writeSerialization.spec.ts +++ b/src/generator/writers/writeSerialization.spec.ts @@ -11,10 +11,10 @@ import { import { WriterContext } from "../Writer"; import { writeParser, writeSerializer } from "./writeSerialization"; import { writeStdlib } from "./writeStdlib"; -import { openContext } from "../../grammar/store"; +import { openContext } from "../../context/store"; import { writeAccessors } from "./writeAccessors"; import { getParser } from "../../grammar"; -import { getAstFactory } from "../../grammar/ast"; +import { getAstFactory } from "../../ast/ast"; import { defaultParser } from "../../grammar/grammar"; const code = ` diff --git a/src/grammar/grammar.ts b/src/grammar/grammar.ts index 747e7b11b..084a93975 100644 --- a/src/grammar/grammar.ts +++ b/src/grammar/grammar.ts @@ -1,6 +1,6 @@ import { getParser as getParserNext } from "./next"; -import { AstExpression, AstImport, AstModule, FactoryAst } from "./ast"; +import { AstExpression, AstImport, AstModule, FactoryAst } from "../ast/ast"; import { getParser as getParserPrev } from "./prev/grammar"; import { ItemOrigin } from "./src-info"; diff --git a/src/grammar/next/grammar.spec.ts b/src/grammar/next/grammar.spec.ts index 6b6c0b2af..d35027f4d 100644 --- a/src/grammar/next/grammar.spec.ts +++ b/src/grammar/next/grammar.spec.ts @@ -1,4 +1,4 @@ -import { getAstFactory } from "../ast"; +import { getAstFactory } from "../../ast/ast"; import { loadCases } from "../../utils/loadCases"; import { getParser } from "../grammar"; import { SrcInfo, isSrcInfo } from "../src-info"; diff --git a/src/grammar/next/index.ts b/src/grammar/next/index.ts index 5afda6e1d..4967b9d81 100644 --- a/src/grammar/next/index.ts +++ b/src/grammar/next/index.ts @@ -1,5 +1,5 @@ import * as $ from "@tonstudio/parser-runtime"; -import * as A from "../ast"; +import * as A from "../../ast/ast"; import * as G from "./grammar"; import type { $ast } from "./grammar"; import { @@ -7,7 +7,7 @@ import { throwInternalCompilerError, } from "../../error/errors"; import { SyntaxErrors, syntaxErrorSchema } from "../parser-error"; -import { AstSchema, getAstSchema } from "../ast-typed"; +import { AstSchema, getAstSchema } from "../../ast/getAstSchema"; import { getSrcInfo, ItemOrigin } from "../src-info"; import { displayToString } from "../../error/display-to-string"; import { makeMakeVisitor } from "../../utils/tricks"; diff --git a/src/grammar/prev/grammar.spec.ts b/src/grammar/prev/grammar.spec.ts index 02f4e003b..bcac769d9 100644 --- a/src/grammar/prev/grammar.spec.ts +++ b/src/grammar/prev/grammar.spec.ts @@ -1,4 +1,4 @@ -import { getAstFactory } from "../ast"; +import { getAstFactory } from "../../ast/ast"; import { loadCases } from "../../utils/loadCases"; import { getParser } from "../grammar"; import { SrcInfo, isSrcInfo } from "../src-info"; diff --git a/src/grammar/prev/grammar.ts b/src/grammar/prev/grammar.ts index 4951d5c62..73e0d3e02 100644 --- a/src/grammar/prev/grammar.ts +++ b/src/grammar/prev/grammar.ts @@ -17,7 +17,7 @@ import { AstNumberBase, AstId, FactoryAst, -} from "../ast"; +} from "../../ast/ast"; import { ItemOrigin, SrcInfo } from "../src-info"; import { displayToString } from "../../error/display-to-string"; import { ParserErrors, parserErrorSchema } from "./parser-error"; diff --git a/src/grammar/test/expr-equality.spec.ts b/src/grammar/test/expr-equality.spec.ts index c53361f10..5fdad6f2c 100644 --- a/src/grammar/test/expr-equality.spec.ts +++ b/src/grammar/test/expr-equality.spec.ts @@ -1,4 +1,4 @@ -import { eqExpressions, getAstFactory } from "../ast"; +import { eqExpressions, getAstFactory } from "../../ast/ast"; import { getParser } from "../"; import { defaultParser } from "../grammar"; diff --git a/src/grammar/test/expr-is-value.spec.ts b/src/grammar/test/expr-is-value.spec.ts index 5ec49dd7e..7a267d852 100644 --- a/src/grammar/test/expr-is-value.spec.ts +++ b/src/grammar/test/expr-is-value.spec.ts @@ -1,6 +1,6 @@ //type Test = { expr: string; isValue: boolean }; -import { getAstFactory, isLiteral } from "../ast"; +import { getAstFactory, isLiteral } from "../../ast/ast"; import { getParser } from "../"; import { defaultParser } from "../grammar"; diff --git a/src/imports/resolveImports.spec.ts b/src/imports/resolveImports.spec.ts index c67bdaa80..224043ecd 100644 --- a/src/imports/resolveImports.spec.ts +++ b/src/imports/resolveImports.spec.ts @@ -2,7 +2,7 @@ import { resolveImports } from "./resolveImports"; import { createNodeFileSystem } from "../vfs/createNodeFileSystem"; import path from "path"; import { getParser } from "../grammar"; -import { getAstFactory } from "../grammar/ast"; +import { getAstFactory } from "../ast/ast"; import { defaultParser } from "../grammar/grammar"; describe("resolveImports", () => { diff --git a/src/index.ts b/src/index.ts index 4ffc2787f..1cf9a8ed4 100644 --- a/src/index.ts +++ b/src/index.ts @@ -12,7 +12,7 @@ export { projectSchema, configSchema, } from "./config/parseConfig"; -export { AstSorter } from "./grammar/sort"; -export { AstRenamer } from "./grammar/rename"; -export { AstHasher } from "./grammar/hash"; -export { AstComparator } from "./grammar/compare"; +export { AstSorter } from "./ast/sort"; +export { AstRenamer } from "./ast/rename"; +export { AstHasher } from "./ast/hash"; +export { AstComparator } from "./ast/compare"; diff --git a/src/optimizer/algebraic.ts b/src/optimizer/algebraic.ts index 47a15adb5..8f99ac040 100644 --- a/src/optimizer/algebraic.ts +++ b/src/optimizer/algebraic.ts @@ -5,7 +5,7 @@ import { AstOpUnary, eqExpressions, isLiteral, -} from "../grammar/ast"; +} from "../ast/ast"; import { ExpressionTransformer, Rule } from "./types"; import { checkIsBinaryOpNode, diff --git a/src/optimizer/associative.ts b/src/optimizer/associative.ts index 7009a2ca6..7c9755508 100644 --- a/src/optimizer/associative.ts +++ b/src/optimizer/associative.ts @@ -7,7 +7,7 @@ import { AstLiteral, AstOpBinary, isLiteral, -} from "../grammar/ast"; +} from "../ast/ast"; import * as iM from "./interpreter"; import { ExpressionTransformer, Rule } from "./types"; import { diff --git a/src/optimizer/constEval.ts b/src/optimizer/constEval.ts index ab4bf6092..b62a228b2 100644 --- a/src/optimizer/constEval.ts +++ b/src/optimizer/constEval.ts @@ -5,7 +5,7 @@ import { AstUnaryOperation, isLiteral, AstLiteral, -} from "../grammar/ast"; +} from "../ast/ast"; import { TactConstEvalError, throwInternalCompilerError, diff --git a/src/optimizer/interpreter.ts b/src/optimizer/interpreter.ts index b316750d4..c810d331b 100644 --- a/src/optimizer/interpreter.ts +++ b/src/optimizer/interpreter.ts @@ -64,7 +64,7 @@ import { getAstFactory, idText, isSelfId, -} from "../grammar/ast"; +} from "../ast/ast"; import { AstUtil, divFloor, getAstUtil, modFloor } from "./util"; import { getStaticConstant, diff --git a/src/optimizer/standardOptimizer.ts b/src/optimizer/standardOptimizer.ts index 7df2b4ed9..f6bc39ed2 100644 --- a/src/optimizer/standardOptimizer.ts +++ b/src/optimizer/standardOptimizer.ts @@ -1,4 +1,4 @@ -import { AstExpression } from "../grammar/ast"; +import { AstExpression } from "../ast/ast"; import { AddSelf, AddZero, diff --git a/src/optimizer/test/partial-eval.spec.ts b/src/optimizer/test/partial-eval.spec.ts index 0529b9794..94485a14a 100644 --- a/src/optimizer/test/partial-eval.spec.ts +++ b/src/optimizer/test/partial-eval.spec.ts @@ -4,7 +4,7 @@ import { eqExpressions, getAstFactory, isLiteral, -} from "../../grammar/ast"; +} from "../../ast/ast"; import { AstUtil, getAstUtil } from "../util"; import { getOptimizer } from "../constEval"; import { CompilerContext } from "../../context/context"; diff --git a/src/optimizer/types.ts b/src/optimizer/types.ts index d4011c138..89426a355 100644 --- a/src/optimizer/types.ts +++ b/src/optimizer/types.ts @@ -1,4 +1,4 @@ -import { AstExpression } from "../grammar/ast"; +import { AstExpression } from "../ast/ast"; import { AstUtil } from "./util"; export interface ExpressionTransformer { diff --git a/src/optimizer/util.ts b/src/optimizer/util.ts index 4033b1243..775454967 100644 --- a/src/optimizer/util.ts +++ b/src/optimizer/util.ts @@ -17,7 +17,7 @@ import { AstId, AstCommentValue, FactoryAst, -} from "../grammar/ast"; +} from "../ast/ast"; import { dummySrcInfo, SrcInfo } from "../grammar"; export const getAstUtil = ({ createNode }: FactoryAst) => { diff --git a/src/pipeline/build.ts b/src/pipeline/build.ts index b39eec009..f696439a9 100644 --- a/src/pipeline/build.ts +++ b/src/pipeline/build.ts @@ -6,7 +6,7 @@ import { ConfigProject } from "../config/parseConfig"; import { CompilerContext } from "../context/context"; import { funcCompile } from "../func/funcCompile"; import { writeReport } from "../generator/writeReport"; -import { getRawAST } from "../grammar/store"; +import { getRawAST } from "../context/store"; import files from "../imports/stdlib"; import { ILogger, Logger } from "../context/logger"; import { PackageFileFormat } from "../packaging/fileFormat"; @@ -19,7 +19,7 @@ import { VirtualFileSystem } from "../vfs/VirtualFileSystem"; import { compile } from "./compile"; import { precompile } from "./precompile"; import { getCompilerVersion } from "./version"; -import { FactoryAst, getAstFactory, idText } from "../grammar/ast"; +import { FactoryAst, getAstFactory, idText } from "../ast/ast"; import { TactErrorCollection } from "../error/errors"; import { getParser, Parser } from "../grammar"; import { defaultParser } from "../grammar/grammar"; diff --git a/src/pipeline/precompile.ts b/src/pipeline/precompile.ts index 49af55122..36d07f66b 100644 --- a/src/pipeline/precompile.ts +++ b/src/pipeline/precompile.ts @@ -1,13 +1,13 @@ import { CompilerContext } from "../context/context"; import { resolveDescriptors } from "../types/resolveDescriptors"; import { resolveAllocations } from "../storage/resolveAllocation"; -import { openContext } from "../grammar/store"; +import { openContext } from "../context/store"; import { resolveStatements } from "../types/resolveStatements"; import { resolveErrors } from "../types/resolveErrors"; import { resolveSignatures } from "../types/resolveSignatures"; import { resolveImports } from "../imports/resolveImports"; import { VirtualFileSystem } from "../vfs/VirtualFileSystem"; -import { AstModule, FactoryAst } from "../grammar/ast"; +import { AstModule, FactoryAst } from "../ast/ast"; import { Parser } from "../grammar"; export function precompile( diff --git a/src/prettyPrinter.ts b/src/prettyPrinter.ts index 6724fbf76..53e56d22f 100644 --- a/src/prettyPrinter.ts +++ b/src/prettyPrinter.ts @@ -1,4 +1,4 @@ -import * as A from "./grammar/ast"; +import * as A from "./ast/ast"; import { groupBy, intercalate, isUndefined } from "./utils/array"; import { makeVisitor } from "./utils/tricks"; diff --git a/src/storage/resolveAllocation.spec.ts b/src/storage/resolveAllocation.spec.ts index 6be6a8ce6..9de511b1b 100644 --- a/src/storage/resolveAllocation.spec.ts +++ b/src/storage/resolveAllocation.spec.ts @@ -1,13 +1,13 @@ import fs from "fs"; import { resolveDescriptors } from "../types/resolveDescriptors"; import { getAllocations, resolveAllocations } from "./resolveAllocation"; -import { openContext } from "../grammar/store"; +import { openContext } from "../context/store"; import { resolveStatements } from "../types/resolveStatements"; import { CompilerContext } from "../context/context"; import { resolveSignatures } from "../types/resolveSignatures"; import path from "path"; import { getParser } from "../grammar"; -import { getAstFactory } from "../grammar/ast"; +import { getAstFactory } from "../ast/ast"; import { defaultParser } from "../grammar/grammar"; const stdlibPath = path.resolve(__dirname, "../../stdlib/std/primitives.tact"); diff --git a/src/storage/resolveAllocation.ts b/src/storage/resolveAllocation.ts index 20dc8e360..00139f052 100644 --- a/src/storage/resolveAllocation.ts +++ b/src/storage/resolveAllocation.ts @@ -8,7 +8,7 @@ import { allocate, getAllocationOperationFromField } from "./allocator"; import { createABITypeRefFromTypeRef } from "../types/resolveABITypeRef"; import { funcInitIdOf } from "../generator/writers/id"; import { throwInternalCompilerError } from "../error/errors"; -import { idText } from "../grammar/ast"; +import { idText } from "../ast/ast"; const store = createContextStore(); diff --git a/src/test/compare.spec.ts b/src/test/compare.spec.ts index c8e0fcca7..8921d3cf1 100644 --- a/src/test/compare.spec.ts +++ b/src/test/compare.spec.ts @@ -1,10 +1,10 @@ import fs from "fs"; import { getParser } from "../grammar"; import { join } from "path"; -import { AstComparator } from "../grammar/compare"; +import { AstComparator } from "../ast/compare"; import { CONTRACTS_DIR } from "./util"; import * as assert from "assert"; -import { getAstFactory } from "../grammar/ast"; +import { getAstFactory } from "../ast/ast"; import { defaultParser } from "../grammar/grammar"; describe("comparator", () => { diff --git a/src/test/prettyPrinter.spec.ts b/src/test/prettyPrinter.spec.ts index 832dbf455..96e54ad46 100644 --- a/src/test/prettyPrinter.spec.ts +++ b/src/test/prettyPrinter.spec.ts @@ -5,7 +5,7 @@ import { join } from "path"; import { trimTrailingCR, CONTRACTS_DIR } from "./util"; import * as assert from "assert"; import JSONBig from "json-bigint"; -import { getAstFactory } from "../grammar/ast"; +import { getAstFactory } from "../ast/ast"; import { defaultParser } from "../grammar/grammar"; describe("formatter", () => { diff --git a/src/test/rename.spec.ts b/src/test/rename.spec.ts index c49e7b94a..b56537fcf 100644 --- a/src/test/rename.spec.ts +++ b/src/test/rename.spec.ts @@ -1,11 +1,11 @@ import fs from "fs"; import { join } from "path"; -import { AstRenamer } from "../grammar/rename"; +import { AstRenamer } from "../ast/rename"; import { prettyPrint } from "../prettyPrinter"; import { trimTrailingCR, CONTRACTS_DIR } from "./util"; import * as assert from "assert"; import { getParser } from "../grammar"; -import { getAstFactory } from "../grammar/ast"; +import { getAstFactory } from "../ast/ast"; import { defaultParser } from "../grammar/grammar"; const EXPECTED_DIR = join(CONTRACTS_DIR, "renamer-expected"); diff --git a/src/types/resolveABITypeRef.ts b/src/types/resolveABITypeRef.ts index b9ec9975c..c0773821b 100644 --- a/src/types/resolveABITypeRef.ts +++ b/src/types/resolveABITypeRef.ts @@ -12,7 +12,7 @@ import { isSlice, isString, isStringBuilder, -} from "../grammar/ast"; +} from "../ast/ast"; import { idTextErr, throwCompilationError, diff --git a/src/types/resolveDescriptors.spec.ts b/src/types/resolveDescriptors.spec.ts index f7df468db..2efb258b8 100644 --- a/src/types/resolveDescriptors.spec.ts +++ b/src/types/resolveDescriptors.spec.ts @@ -6,10 +6,10 @@ import { } from "./resolveDescriptors"; import { resolveSignatures } from "./resolveSignatures"; import { loadCases } from "../utils/loadCases"; -import { openContext } from "../grammar/store"; +import { openContext } from "../context/store"; import { featureEnable } from "../config/features"; import { getParser, SrcInfo } from "../grammar"; -import { getAstFactory } from "../grammar/ast"; +import { getAstFactory } from "../ast/ast"; import { isSrcInfo } from "../grammar/src-info"; import { defaultParser } from "../grammar/grammar"; diff --git a/src/types/resolveDescriptors.ts b/src/types/resolveDescriptors.ts index 37cd75c5f..71e5f3f86 100644 --- a/src/types/resolveDescriptors.ts +++ b/src/types/resolveDescriptors.ts @@ -18,8 +18,8 @@ import { idText, isSelfId, isSlice, -} from "../grammar/ast"; -import { traverse } from "../grammar/iterators"; +} from "../ast/ast"; +import { traverse } from "../ast/iterators"; import { idTextErr, throwCompilationError, @@ -40,8 +40,8 @@ import { TypeRef, typeRefEquals, } from "./types"; -import { getRawAST } from "../grammar/store"; -import { cloneNode } from "../grammar/clone"; +import { getRawAST } from "../context/store"; +import { cloneNode } from "../ast/clone"; import { crc16 } from "../utils/crc16"; import { isSubsetOf } from "../utils/isSubsetOf"; import { evalConstantExpression } from "../optimizer/constEval"; diff --git a/src/types/resolveErrors.ts b/src/types/resolveErrors.ts index 02f6394b9..069a7df00 100644 --- a/src/types/resolveErrors.ts +++ b/src/types/resolveErrors.ts @@ -1,7 +1,7 @@ import { sha256_sync } from "@ton/crypto"; import { CompilerContext, createContextStore } from "../context/context"; -import { AstNode, FactoryAst, isRequire } from "../grammar/ast"; -import { traverse } from "../grammar/iterators"; +import { AstNode, FactoryAst, isRequire } from "../ast/ast"; +import { traverse } from "../ast/iterators"; import { evalConstantExpression } from "../optimizer/constEval"; import { throwInternalCompilerError } from "../error/errors"; import { diff --git a/src/types/resolveExpression.ts b/src/types/resolveExpression.ts index cb0046b19..f29258867 100644 --- a/src/types/resolveExpression.ts +++ b/src/types/resolveExpression.ts @@ -21,7 +21,7 @@ import { AstSimplifiedString, AstCommentValue, AstStructValue, -} from "../grammar/ast"; +} from "../ast/ast"; import { idTextErr, throwCompilationError } from "../error/errors"; import { CompilerContext, createContextStore } from "../context/context"; import { diff --git a/src/types/resolveSignatures.ts b/src/types/resolveSignatures.ts index a36b2d01e..9f990fa2c 100644 --- a/src/types/resolveSignatures.ts +++ b/src/types/resolveSignatures.ts @@ -15,7 +15,7 @@ import { TypeDescription, } from "./types"; import { throwCompilationError } from "../error/errors"; -import { AstNumber, AstReceiver, FactoryAst } from "../grammar/ast"; +import { AstNumber, AstReceiver, FactoryAst } from "../ast/ast"; import { commentPseudoOpcode } from "../generator/writers/writeRouter"; import { sha256_sync } from "@ton/crypto"; import { dummySrcInfo } from "../grammar"; diff --git a/src/types/resolveStatements.spec.ts b/src/types/resolveStatements.spec.ts index 8213f9335..644c19301 100644 --- a/src/types/resolveStatements.spec.ts +++ b/src/types/resolveStatements.spec.ts @@ -1,12 +1,12 @@ import { getAllExpressionTypes } from "./resolveExpression"; import { resolveDescriptors } from "./resolveDescriptors"; import { loadCases } from "../utils/loadCases"; -import { openContext } from "../grammar/store"; +import { openContext } from "../context/store"; import { resolveStatements } from "./resolveStatements"; import { CompilerContext } from "../context/context"; import { featureEnable } from "../config/features"; import { getParser } from "../grammar"; -import { getAstFactory } from "../grammar/ast"; +import { getAstFactory } from "../ast/ast"; import { defaultParser } from "../grammar/grammar"; describe("resolveStatements", () => { diff --git a/src/types/resolveStatements.ts b/src/types/resolveStatements.ts index daaf44c53..1211f53c7 100644 --- a/src/types/resolveStatements.ts +++ b/src/types/resolveStatements.ts @@ -10,7 +10,7 @@ import { isSelfId, eqNames, FactoryAst, -} from "../grammar/ast"; +} from "../ast/ast"; import { isAssignable } from "./subtyping"; import { idTextErr, diff --git a/src/types/types.ts b/src/types/types.ts index 754db4298..f60f676fe 100644 --- a/src/types/types.ts +++ b/src/types/types.ts @@ -15,7 +15,7 @@ import { AstNumber, AstLiteral, idText, -} from "../grammar/ast"; +} from "../ast/ast"; import { ItemOrigin, SrcInfo } from "../grammar"; export type TypeDescription = {