diff --git a/.github/workflows/ant-lara-2.0-legacy.yml b/.github/workflows/ant-lara-2.0-legacy.yml index 8eac8986c..7cbc13cfc 100644 --- a/.github/workflows/ant-lara-2.0-legacy.yml +++ b/.github/workflows/ant-lara-2.0-legacy.yml @@ -11,7 +11,7 @@ on: # Daily at midnight schedule: - - cron: '0 0 * * *' + - cron: '0 0 1 * *' permissions: checks: write @@ -26,7 +26,7 @@ jobs: # working-directory: ./.. steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 # Because of scheduled runs, by default run on default branch with: ref: lara-2.0-legacy diff --git a/.github/workflows/copilot-setup-steps.yml b/.github/workflows/copilot-setup-steps.yml index c7b566c0a..41776a2df 100644 --- a/.github/workflows/copilot-setup-steps.yml +++ b/.github/workflows/copilot-setup-steps.yml @@ -14,7 +14,7 @@ on: - .github/workflows/copilot-setup-steps.yml env: - CLAVA_BRANCH: ${{ github.head_ref || github.ref_name }} + BRANCH_NAME: ${{ github.head_ref || github.ref_name }} jobs: # The job MUST be called `copilot-setup-steps` @@ -41,10 +41,9 @@ jobs: uses: gradle/actions/setup-gradle@v4 with: gradle-version: current - dependency-graph: generate-and-submit - name: Checkout clava - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: path: clava @@ -52,29 +51,45 @@ jobs: id: repo-refs shell: bash env: - BRANCH_NAME: ${{ env.CLAVA_BRANCH }} + BRANCH_NAME: ${{ env.BRANCH_NAME }} + BASE_BRANCH: ${{ github.base_ref }} run: | set -euo pipefail + # For each dependency repository, determine which branch to checkout. + # Priority order: + # 1. A branch with the same name as the current branch + # 2. If this is a PR, the target branch (base_ref) + # 3. The default branch of the repository + determine_ref() { local prefix=$1 local repo=$2 local url="https://github.com/${repo}.git" + # Get the default branch local default_branch default_branch=$(git ls-remote --symref "$url" HEAD | awk '/^ref:/ {print $2}' | sed 's@refs/heads/@@') echo "${prefix}_default=${default_branch}" >> "$GITHUB_OUTPUT" echo "Default branch for ${repo} is '${default_branch}'" - if git ls-remote --heads "$url" "refs/heads/${BRANCH_NAME}" >/dev/null; then - echo "${prefix}_match=true" >> "$GITHUB_OUTPUT" - echo "${prefix}_ref=${BRANCH_NAME}" >> "$GITHUB_OUTPUT" - echo "Branch '${BRANCH_NAME}' exists in ${repo}" + local ref_to_use="" + + # Priority 1: Same branch name + if [ -n "$(git ls-remote --heads "$url" "refs/heads/${BRANCH_NAME}")" ]; then + ref_to_use="${BRANCH_NAME}" + echo "Using matching branch '${BRANCH_NAME}' in ${repo}" + # Priority 2: PR target branch (if this is a PR) + elif [ -n "${BASE_BRANCH}" ] && [ -n "$(git ls-remote --heads "$url" "refs/heads/${BASE_BRANCH}")" ]; then + ref_to_use="${BASE_BRANCH}" + echo "Using PR target branch '${BASE_BRANCH}' in ${repo}" + # Priority 3: Default branch else - echo "${prefix}_match=false" >> "$GITHUB_OUTPUT" - echo "${prefix}_ref=${default_branch}" >> "$GITHUB_OUTPUT" - echo "Branch '${BRANCH_NAME}' not found in ${repo}. Falling back to '${default_branch}'." + ref_to_use="${default_branch}" + echo "Using default branch '${default_branch}' for ${repo}" fi + + echo "${prefix}_ref=${ref_to_use}" >> "$GITHUB_OUTPUT" } determine_ref "lara" "specs-feup/lara-framework" @@ -82,24 +97,22 @@ jobs: - name: Echo checks run: | - echo "Clava branch: ${{ env.CLAVA_BRANCH }}" - echo "Matching branch found (lara-framework): ${{ steps.repo-refs.outputs.lara_match }}" - echo "Matching branch found (specs-java-libs): ${{ steps.repo-refs.outputs.specs_match }}" + echo "Weaver branch: ${{ env.BRANCH_NAME }}" + echo "PR target branch (if any): ${{ github.base_ref }}" echo "Lara framework ref: ${{ steps.repo-refs.outputs.lara_ref }}" + echo "Lara framework default: ${{ steps.repo-refs.outputs.lara_default }}" echo "Specs-java-libs ref: ${{ steps.repo-refs.outputs.specs_ref }}" - echo "Lara framework default fallback: ${{ steps.repo-refs.outputs.lara_default }}" - echo "Specs-java-libs default fallback: ${{ steps.repo-refs.outputs.specs_default }}" - echo "Pull request base_ref (if any): ${{ github.base_ref }}" + echo "Specs-java-libs default: ${{ steps.repo-refs.outputs.specs_default }}" - name: Checkout lara-framework - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: repository: specs-feup/lara-framework path: lara-framework ref: ${{ steps.repo-refs.outputs.lara_ref }} - name: Checkout specs-java-libs - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: repository: specs-feup/specs-java-libs path: specs-java-libs diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 6058930d5..5bdba30cd 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -19,11 +19,6 @@ permissions: env: JAVA_VERSION: 17 BRANCH_NAME: ${{ github.head_ref || github.ref_name }} - # Setting default branch to staging assuming PRs will be done against the staging versions of the repository - # main versions will just receive what comes from the staging - DEFAULT_BRANCH: ${{ github.base_ref || 'staging' }} - #SPECS_JAVA_LIBS_BRANCH: ${{ 'master' }} - #LARA_FRAMEWORK_BRANCH: ${{ github.head_ref || github.ref_name }} jobs: build-java: @@ -31,8 +26,8 @@ jobs: runs-on: ubuntu-latest outputs: - branch-exists-lara-framework: ${{ steps.Branch-lara-framework.outputs.value }} - branch-exists-specs-java-libs: ${{ steps.Branch-specs-java-libs.outputs.value }} + lara_ref: ${{ steps.repo-refs.outputs.lara_ref }} + specs_ref: ${{ steps.repo-refs.outputs.specs_ref }} steps: - name: Setup Java @@ -48,39 +43,80 @@ jobs: dependency-graph: generate-and-submit - name: Checkout Clava - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: path: clava - - name: Check if branch exists on lara-framework - id: Branch-lara-framework - run: echo "value=$(git ls-remote --heads https://github.com/specs-feup/lara-framework.git refs/heads/${{ env.BRANCH_NAME }} | wc -l)" >> $GITHUB_OUTPUT + - name: Determine repository refs + id: repo-refs + shell: bash + env: + BRANCH_NAME: ${{ env.BRANCH_NAME }} + BASE_BRANCH: ${{ github.base_ref }} + run: | + set -euo pipefail + + # For each dependency repository, determine which branch to checkout. + # Priority order: + # 1. A branch with the same name as the current branch + # 2. If this is a PR, the target branch (base_ref) + # 3. The default branch of the repository + + determine_ref() { + local prefix=$1 + local repo=$2 + local url="https://github.com/${repo}.git" + + # Get the default branch + local default_branch + default_branch=$(git ls-remote --symref "$url" HEAD | awk '/^ref:/ {print $2}' | sed 's@refs/heads/@@') + echo "${prefix}_default=${default_branch}" >> "$GITHUB_OUTPUT" + echo "Default branch for ${repo} is '${default_branch}'" + + local ref_to_use="" + + # Priority 1: Same branch name + if [ -n "$(git ls-remote --heads "$url" "refs/heads/${BRANCH_NAME}")" ]; then + ref_to_use="${BRANCH_NAME}" + echo "Using matching branch '${BRANCH_NAME}' in ${repo}" + # Priority 2: PR target branch (if this is a PR) + elif [ -n "${BASE_BRANCH}" ] && [ -n "$(git ls-remote --heads "$url" "refs/heads/${BASE_BRANCH}")" ]; then + ref_to_use="${BASE_BRANCH}" + echo "Using PR target branch '${BASE_BRANCH}' in ${repo}" + # Priority 3: Default branch + else + ref_to_use="${default_branch}" + echo "Using default branch '${default_branch}' for ${repo}" + fi + + echo "${prefix}_ref=${ref_to_use}" >> "$GITHUB_OUTPUT" + } - - name: Check if branch exists on specs-java-libs - id: Branch-specs-java-libs - run: echo "value=$(git ls-remote --heads https://github.com/specs-feup/specs-java-libs.git refs/heads/${{ env.BRANCH_NAME }} | wc -l)" >> $GITHUB_OUTPUT + determine_ref "lara" "specs-feup/lara-framework" + determine_ref "specs" "specs-feup/specs-java-libs" - name: Echo checks run: | - echo "Branch-lara-framework: ${{ steps.Branch-lara-framework.outputs.value }}" - echo "Branch-specs-java-libs: ${{ steps.Branch-specs-java-libs.outputs.value }}" - echo "Branch name: ${{ env.BRANCH_NAME }}" - echo "Default branch: ${{ env.DEFAULT_BRANCH }}" - echo "Branch base_ref: ${{ github.base_ref }}" + echo "Weaver branch: ${{ env.BRANCH_NAME }}" + echo "PR target branch (if any): ${{ github.base_ref }}" + echo "Lara framework ref: ${{ steps.repo-refs.outputs.lara_ref }}" + echo "Lara framework default: ${{ steps.repo-refs.outputs.lara_default }}" + echo "Specs-java-libs ref: ${{ steps.repo-refs.outputs.specs_ref }}" + echo "Specs-java-libs default: ${{ steps.repo-refs.outputs.specs_default }}" - name: Checkout lara-framework - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: repository: specs-feup/lara-framework path: lara-framework - ref: ${{ steps.Branch-lara-framework.outputs.value == '1' && env.BRANCH_NAME || env.DEFAULT_BRANCH }} + ref: ${{ steps.repo-refs.outputs.lara_ref }} - name: Checkout specs-java-libs - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: repository: specs-feup/specs-java-libs path: specs-java-libs - ref: ${{ steps.Branch-specs-java-libs.outputs.value == '1' && env.BRANCH_NAME || env.DEFAULT_BRANCH }} + ref: ${{ steps.repo-refs.outputs.specs_ref }} - name: Build with Gradle run: | @@ -148,16 +184,16 @@ jobs: echo 'export PATH="$(brew --prefix gcc)/bin:$PATH"' >> $GITHUB_ENV - name: Checkout Clava - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: path: clava - name: Checkout lara-framework - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: repository: specs-feup/lara-framework path: lara-framework - ref: ${{ needs.build-java.outputs.branch-exists-lara-framework == '1' && env.BRANCH_NAME || env.DEFAULT_BRANCH }} + ref: ${{ needs.build-java.outputs.lara_ref }} - name: Setup js workspace run: | diff --git a/Clava-JS/eslint.config.js b/Clava-JS/eslint.config.js index 2ad231fb7..2273574c5 100644 --- a/Clava-JS/eslint.config.js +++ b/Clava-JS/eslint.config.js @@ -1,9 +1,14 @@ +import { fileURLToPath } from "url"; +import { dirname } from "path"; import typescriptEslint from "typescript-eslint"; import tsdoc from "eslint-plugin-tsdoc"; import jest from "eslint-plugin-jest"; import js from "@eslint/js"; import eslintConfigPrettier from "eslint-config-prettier"; +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + export default [ js.configs.recommended, eslintConfigPrettier, @@ -18,14 +23,13 @@ export default [ }, languageOptions: { - tsconfigRootDir: __dirname, - parser: typescriptEslint.parser, ecmaVersion: 5, sourceType: "script", parserOptions: { project: ["./*/tsconfig.json", "./tsconfig.*.json"], + tsconfigRootDir: __dirname, }, }, diff --git a/Clava-JS/package.json b/Clava-JS/package.json index 38a7c426e..b15575ecc 100644 --- a/Clava-JS/package.json +++ b/Clava-JS/package.json @@ -56,24 +56,24 @@ "homepage": "https://github.com/specs-feup/clava#readme", "dependencies": { "@specs-feup/lara": "~3.5.0", - "cytoscape": "^3.0.0" + "cytoscape": "^3.33.1" }, "devDependencies": { - "@jest/globals": "^29.7.0", + "@jest/globals": "^30.2.0", "@types/debug": "^4.1.12", "@types/java": "^0.9.6", - "@types/jest": "^29.5.14", + "@types/jest": "^30.0.0", "@types/node": "^20.14.10", - "@types/yargs": "^17.0.33", - "typescript-eslint": "^8.26.1", - "cross-env": "^7.0.3", - "eslint": "^9.22.0", - "eslint-config-prettier": "^10.1.1", - "eslint-plugin-jest": "^28.11.0", - "eslint-plugin-tsdoc": "^0.4.0", - "jest": "^29.7.0", + "@types/yargs": "^17.0.35", + "cross-env": "^10.1.0", + "eslint": "^9.32.2", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-jest": "^29.12.1", + "eslint-plugin-tsdoc": "^0.5.0", + "jest": "^30.2.0", "node-notifier": "^10.0.1", - "ts-jest": "^29.2.6", - "typescript": "^5.9.0" + "ts-jest": "^29.4.6", + "typescript": "^5.9.3", + "typescript-eslint": "^8.52.0" } } diff --git a/Clava-JS/src-api/clava/Clava.ts b/Clava-JS/src-api/clava/Clava.ts index 3c07da837..d6e402ca5 100644 --- a/Clava-JS/src-api/clava/Clava.ts +++ b/Clava-JS/src-api/clava/Clava.ts @@ -65,7 +65,7 @@ export default class Clava { } const $file = wrapJoinPoint( - ClavaJavaTypes.AstFactory.file(file.getAbsolutePath(), "") + ClavaJavaTypes.AstFactory.file(Weaver.getWeaverEngine(), file.getAbsolutePath(), "") ) as FileJp; Clava.addFile($file); } @@ -187,6 +187,7 @@ extern "C" { } const $newJp = ClavaJavaTypes.CxxWeaverApi.findJp( + Weaver.getWeaverEngine(), $file.filepath, $jp.astId ); @@ -209,7 +210,7 @@ extern "C" { static writeCode(outputFoldername: string) { const outputFolder = Io.mkdir(outputFoldername); - ClavaJavaTypes.CxxWeaverApi.writeCode(outputFolder); + ClavaJavaTypes.CxxWeaverApi.writeCode(Weaver.getWeaverEngine(), outputFolder); return outputFolder; } @@ -233,7 +234,7 @@ extern "C" { * @returns A list of join points representing available user includes */ static getAvailableIncludes(): JavaClasses.List { - return ClavaJavaTypes.CxxWeaverApi.getAvailableUserIncludes(); + return ClavaJavaTypes.CxxWeaverApi.getAvailableUserIncludes(Weaver.getWeaverEngine()); } /** @@ -241,6 +242,6 @@ extern "C" { * @returns {J#Set} A set with paths to the include folders of the current configuration. */ static getIncludeFolders() { - return ClavaJavaTypes.CxxWeaverApi.getIncludeFolders(); + return ClavaJavaTypes.CxxWeaverApi.getIncludeFolders(Weaver.getWeaverEngine()); } } diff --git a/Clava-JS/src-api/clava/ClavaJoinPoints.ts b/Clava-JS/src-api/clava/ClavaJoinPoints.ts index cc98549b7..a514ad85f 100644 --- a/Clava-JS/src-api/clava/ClavaJoinPoints.ts +++ b/Clava-JS/src-api/clava/ClavaJoinPoints.ts @@ -10,6 +10,7 @@ import { JavaClasses } from "@specs-feup/lara/api/lara/util/JavaTypes.js"; import * as Joinpoints from "../Joinpoints.js"; import Clava from "./Clava.js"; import ClavaJavaTypes from "./ClavaJavaTypes.js"; +import Weaver from "@specs-feup/lara/api/weaver/Weaver.js"; /** * Utility methods related with the creation of new join points. @@ -17,7 +18,7 @@ import ClavaJavaTypes from "./ClavaJavaTypes.js"; */ export default class ClavaJoinPoints { static toJoinPoint(node: any): Joinpoints.Joinpoint { - return wrapJoinPoint(ClavaJavaTypes.CxxJoinPoints.createFromLara(node)); + return wrapJoinPoint(ClavaJavaTypes.CxxJoinPoints.createFromLara(node, Weaver.getWeaverEngine())); } /** @@ -30,18 +31,18 @@ export default class ClavaJoinPoints { } static builtinType(code: string): Joinpoints.BuiltinType { - return wrapJoinPoint(ClavaJavaTypes.AstFactory.builtinType(code)); + return wrapJoinPoint(ClavaJavaTypes.AstFactory.builtinType(Weaver.getWeaverEngine(), code)); } static pointerFromBuiltin(code: string): Joinpoints.PointerType { return wrapJoinPoint( - ClavaJavaTypes.AstFactory.pointerTypeFromBuiltin(code) + ClavaJavaTypes.AstFactory.pointerTypeFromBuiltin(Weaver.getWeaverEngine(), code) ); } static pointer($type: Joinpoints.Type): Joinpoints.PointerType { return wrapJoinPoint( - ClavaJavaTypes.AstFactory.pointerType(unwrapJoinPoint($type)) + ClavaJavaTypes.AstFactory.pointerType(Weaver.getWeaverEngine(), unwrapJoinPoint($type)) ); } @@ -62,6 +63,7 @@ export default class ClavaJoinPoints { if (typeof type === "string") { return wrapJoinPoint( ClavaJavaTypes.AstFactory.constArrayType( + Weaver.getWeaverEngine(), type, Clava.getStandard(), dims @@ -70,6 +72,7 @@ export default class ClavaJoinPoints { } else if (type instanceof Joinpoints.Type) { return wrapJoinPoint( ClavaJavaTypes.AstFactory.constArrayType( + Weaver.getWeaverEngine(), type.node, Clava.getStandard(), dims @@ -86,6 +89,7 @@ export default class ClavaJoinPoints { ): Joinpoints.VariableArrayType { return wrapJoinPoint( ClavaJavaTypes.AstFactory.variableArrayType( + Weaver.getWeaverEngine(), unwrapJoinPoint($type), unwrapJoinPoint($sizeExpr) ) @@ -97,6 +101,7 @@ export default class ClavaJoinPoints { ): Joinpoints.IncompleteArrayType { return wrapJoinPoint( ClavaJavaTypes.AstFactory.incompleteArrayType( + Weaver.getWeaverEngine(), unwrapJoinPoint($type) ) ); @@ -112,7 +117,9 @@ export default class ClavaJoinPoints { type?: Joinpoints.Type | string ): Joinpoints.Expression { if (type === undefined) { - return wrapJoinPoint(ClavaJavaTypes.AstFactory.exprLiteral(code)); + return wrapJoinPoint( + ClavaJavaTypes.AstFactory.exprLiteral(Weaver.getWeaverEngine(), code) + ); } if (typeof type === "string") { @@ -120,7 +127,11 @@ export default class ClavaJoinPoints { } return wrapJoinPoint( - ClavaJavaTypes.AstFactory.exprLiteral(code, unwrapJoinPoint(type)) + ClavaJavaTypes.AstFactory.exprLiteral( + Weaver.getWeaverEngine(), + code, + unwrapJoinPoint(type) + ) ); } @@ -142,6 +153,7 @@ export default class ClavaJoinPoints { }); return wrapJoinPoint( ClavaJavaTypes.AstFactory.cxxConstructExpr( + Weaver.getWeaverEngine(), unwrapJoinPoint(type), unwrapJoinPoint(processedArguments) ) @@ -153,7 +165,11 @@ export default class ClavaJoinPoints { init: Joinpoints.Joinpoint ): Joinpoints.Vardecl { return wrapJoinPoint( - ClavaJavaTypes.AstFactory.varDecl(varName, unwrapJoinPoint(init)) + ClavaJavaTypes.AstFactory.varDecl( + Weaver.getWeaverEngine(), + varName, + unwrapJoinPoint(init) + ) ); } @@ -162,7 +178,11 @@ export default class ClavaJoinPoints { type: Joinpoints.Type ): Joinpoints.Vardecl { return wrapJoinPoint( - ClavaJavaTypes.AstFactory.varDeclNoInit(varName, unwrapJoinPoint(type)) + ClavaJavaTypes.AstFactory.varDeclNoInit( + Weaver.getWeaverEngine(), + varName, + unwrapJoinPoint(type) + ) ); } @@ -172,7 +192,12 @@ export default class ClavaJoinPoints { * @param typeString - The literal code of the type */ static typeLiteral(typeString: string): Joinpoints.Type { - return wrapJoinPoint(ClavaJavaTypes.AstFactory.typeLiteral(typeString)); + return wrapJoinPoint( + ClavaJavaTypes.AstFactory.typeLiteral( + Weaver.getWeaverEngine(), + typeString + ) + ); } /** @@ -186,7 +211,11 @@ export default class ClavaJoinPoints { path = "" ): Joinpoints.FileJp { return wrapJoinPoint( - ClavaJavaTypes.AstFactory.file(unwrapJoinPoint(filename), path) + ClavaJavaTypes.AstFactory.file( + Weaver.getWeaverEngine(), + unwrapJoinPoint(filename), + path + ) ); } @@ -201,7 +230,12 @@ export default class ClavaJoinPoints { path = "" ): Joinpoints.FileJp { return wrapJoinPoint( - ClavaJavaTypes.AstFactory.file(filename, source, path) + ClavaJavaTypes.AstFactory.file( + Weaver.getWeaverEngine(), + filename, + source, + path + ) ); } @@ -211,11 +245,18 @@ export default class ClavaJoinPoints { * @param stmtString - The literal code of the statement. */ static stmtLiteral(stmtString: string): Joinpoints.Statement { - return wrapJoinPoint(ClavaJavaTypes.AstFactory.stmtLiteral(stmtString)); + return wrapJoinPoint( + ClavaJavaTypes.AstFactory.stmtLiteral( + Weaver.getWeaverEngine(), + stmtString + ) + ); } static emptyStmt(): Joinpoints.Statement { - return wrapJoinPoint(ClavaJavaTypes.AstFactory.emptyStmt()); + return wrapJoinPoint( + ClavaJavaTypes.AstFactory.emptyStmt(Weaver.getWeaverEngine()) + ); } /** @@ -230,6 +271,7 @@ export default class ClavaJoinPoints { ): Joinpoints.Call { return wrapJoinPoint( ClavaJavaTypes.AstFactory.callFromFunction( + Weaver.getWeaverEngine(), unwrapJoinPoint($function), unwrapJoinPoint(flattenArgsArray(callArgs)) ) @@ -250,6 +292,7 @@ export default class ClavaJoinPoints { ): Joinpoints.Call { return wrapJoinPoint( ClavaJavaTypes.AstFactory.call( + Weaver.getWeaverEngine(), functionName, unwrapJoinPoint($returnType), flattenArgsArray(callArgs).map(unwrapJoinPoint) @@ -267,6 +310,7 @@ export default class ClavaJoinPoints { ): Joinpoints.Switch { return wrapJoinPoint( ClavaJavaTypes.AstFactory.switchStmt( + Weaver.getWeaverEngine(), unwrapJoinPoint($conditionExpr), unwrapJoinPoint(flattenArgsArray(cases)) ) @@ -274,13 +318,17 @@ export default class ClavaJoinPoints { } static omp(directiveName: string): Joinpoints.Omp { - return wrapJoinPoint(ClavaJavaTypes.AstFactory.omp(directiveName)); + return wrapJoinPoint( + ClavaJavaTypes.AstFactory.omp(Weaver.getWeaverEngine(), directiveName) + ); } static scope(...$jps: Joinpoints.Joinpoint[]): Joinpoints.Scope { $jps = flattenArgsArray($jps); if ($jps.length === 0) { - return wrapJoinPoint(ClavaJavaTypes.AstFactory.scope()); + return wrapJoinPoint( + ClavaJavaTypes.AstFactory.scope(Weaver.getWeaverEngine()) + ); } const $stmts = $jps.map(($stmt) => { @@ -296,7 +344,10 @@ export default class ClavaJoinPoints { }); return wrapJoinPoint( - ClavaJavaTypes.AstFactory.scope(unwrapJoinPoint($stmts)) + ClavaJavaTypes.AstFactory.scope( + Weaver.getWeaverEngine(), + unwrapJoinPoint($stmts) + ) ); } @@ -316,12 +367,19 @@ export default class ClavaJoinPoints { ): Joinpoints.Varref { if (typeof decl === "string") { return wrapJoinPoint( - ClavaJavaTypes.AstFactory.varref(decl, unwrapJoinPoint($type)) + ClavaJavaTypes.AstFactory.varref( + Weaver.getWeaverEngine(), + decl, + unwrapJoinPoint($type) + ) ); } return wrapJoinPoint( - ClavaJavaTypes.AstFactory.varref(unwrapJoinPoint(decl)) + ClavaJavaTypes.AstFactory.varref( + Weaver.getWeaverEngine(), + unwrapJoinPoint(decl) + ) ); } @@ -338,11 +396,16 @@ export default class ClavaJoinPoints { */ static returnStmt($expr?: Joinpoints.Expression): Joinpoints.ReturnStmt { if ($expr === undefined) { - return wrapJoinPoint(ClavaJavaTypes.AstFactory.returnStmt()); + return wrapJoinPoint( + ClavaJavaTypes.AstFactory.returnStmt(Weaver.getWeaverEngine()) + ); } return wrapJoinPoint( - ClavaJavaTypes.AstFactory.returnStmt(unwrapJoinPoint($expr)) + ClavaJavaTypes.AstFactory.returnStmt( + Weaver.getWeaverEngine(), + unwrapJoinPoint($expr) + ) ); } @@ -358,6 +421,7 @@ export default class ClavaJoinPoints { ): Joinpoints.FunctionType { return wrapJoinPoint( ClavaJavaTypes.AstFactory.functionType( + Weaver.getWeaverEngine(), unwrapJoinPoint($returnType), unwrapJoinPoint(flattenArgsArray(argTypes)) ) @@ -376,6 +440,7 @@ export default class ClavaJoinPoints { ): Joinpoints.FunctionJp { return wrapJoinPoint( ClavaJavaTypes.AstFactory.functionDeclFromType( + Weaver.getWeaverEngine(), functionName, unwrapJoinPoint($functionType) ) @@ -399,6 +464,7 @@ export default class ClavaJoinPoints { return wrapJoinPoint( ClavaJavaTypes.AstFactory.functionDecl( + Weaver.getWeaverEngine(), functionName, unwrapJoinPoint($returnType), unwrapJoinPoint($paramVarDecls) @@ -412,6 +478,7 @@ export default class ClavaJoinPoints { ): Joinpoints.BinaryOp { return wrapJoinPoint( ClavaJavaTypes.AstFactory.assignment( + Weaver.getWeaverEngine(), unwrapJoinPoint($leftHand), unwrapJoinPoint($rightHand) ) @@ -425,6 +492,7 @@ export default class ClavaJoinPoints { ): Joinpoints.BinaryOp { return wrapJoinPoint( ClavaJavaTypes.AstFactory.compoundAssignment( + Weaver.getWeaverEngine(), op, unwrapJoinPoint($leftHand), unwrapJoinPoint($rightHand) @@ -451,6 +519,7 @@ export default class ClavaJoinPoints { return wrapJoinPoint( ClavaJavaTypes.AstFactory.ifStmt( + Weaver.getWeaverEngine(), unwrapJoinPoint($condition), unwrapJoinPoint($then), unwrapJoinPoint($else) @@ -484,6 +553,7 @@ export default class ClavaJoinPoints { return wrapJoinPoint( ClavaJavaTypes.AstFactory.binaryOp( + Weaver.getWeaverEngine(), op, unwrapJoinPoint($left), unwrapJoinPoint($right), @@ -530,6 +600,7 @@ export default class ClavaJoinPoints { return wrapJoinPoint( ClavaJavaTypes.AstFactory.unaryOp( + Weaver.getWeaverEngine(), op, unwrapJoinPoint($expr), unwrapJoinPoint($type) @@ -567,6 +638,7 @@ export default class ClavaJoinPoints { return wrapJoinPoint( ClavaJavaTypes.AstFactory.ternaryOp( + Weaver.getWeaverEngine(), unwrapJoinPoint($cond), unwrapJoinPoint($trueExpr), unwrapJoinPoint($falseExpr), @@ -588,7 +660,10 @@ export default class ClavaJoinPoints { } return wrapJoinPoint( - ClavaJavaTypes.AstFactory.parenthesis(unwrapJoinPoint($expr)) + ClavaJavaTypes.AstFactory.parenthesis( + Weaver.getWeaverEngine(), + unwrapJoinPoint($expr) + ) ); } @@ -597,7 +672,10 @@ export default class ClavaJoinPoints { */ static doubleLiteral(doubleLiteral: number | string): Joinpoints.Expression { return wrapJoinPoint( - ClavaJavaTypes.AstFactory.doubleLiteral(doubleLiteral) + ClavaJavaTypes.AstFactory.doubleLiteral( + Weaver.getWeaverEngine(), + doubleLiteral + ) ); } @@ -608,7 +686,10 @@ export default class ClavaJoinPoints { integerLiteral: number | string ): Joinpoints.Expression { return wrapJoinPoint( - ClavaJavaTypes.AstFactory.integerLiteral(integerLiteral) + ClavaJavaTypes.AstFactory.integerLiteral( + Weaver.getWeaverEngine(), + integerLiteral + ) ); } @@ -619,7 +700,10 @@ export default class ClavaJoinPoints { $typedefDecl: Joinpoints.TypedefDecl ): Joinpoints.TypedefType { return wrapJoinPoint( - ClavaJavaTypes.AstFactory.typedefType(unwrapJoinPoint($typedefDecl)) + ClavaJavaTypes.AstFactory.typedefType( + Weaver.getWeaverEngine(), + unwrapJoinPoint($typedefDecl) + ) ); } @@ -633,6 +717,7 @@ export default class ClavaJoinPoints { ): Joinpoints.TypedefDecl { return wrapJoinPoint( ClavaJavaTypes.AstFactory.typedefDecl( + Weaver.getWeaverEngine(), unwrapJoinPoint($underlyingType), identifier ) @@ -645,7 +730,10 @@ export default class ClavaJoinPoints { */ static structType($struct: Joinpoints.Struct): Joinpoints.ElaboratedType { return wrapJoinPoint( - ClavaJavaTypes.AstFactory.structType(unwrapJoinPoint($struct)) + ClavaJavaTypes.AstFactory.structType( + Weaver.getWeaverEngine(), + unwrapJoinPoint($struct) + ) ); } @@ -659,6 +747,7 @@ export default class ClavaJoinPoints { ): Joinpoints.Cast { return wrapJoinPoint( ClavaJavaTypes.AstFactory.cStyleCast( + Weaver.getWeaverEngine(), unwrapJoinPoint($type), unwrapJoinPoint($expr) ) @@ -676,6 +765,7 @@ export default class ClavaJoinPoints { const flattenedFields = flattenArgsArray(fields); return wrapJoinPoint( ClavaJavaTypes.AstFactory.classDecl( + Weaver.getWeaverEngine(), className, unwrapJoinPoint(flattenedFields) ) @@ -697,6 +787,7 @@ export default class ClavaJoinPoints { const flattenedSubscripts = flattenArgsArray(subscripts); return wrapJoinPoint( ClavaJavaTypes.AstFactory.arrayAccess( + Weaver.getWeaverEngine(), unwrapJoinPoint(base), unwrapJoinPoint(flattenedSubscripts) ) @@ -712,7 +803,10 @@ export default class ClavaJoinPoints { static initList(...values: Joinpoints.Expression[]): Joinpoints.InitList { const flattenedValues = flattenArgsArray(values); return wrapJoinPoint( - ClavaJavaTypes.AstFactory.initList(unwrapJoinPoint(flattenedValues)) + ClavaJavaTypes.AstFactory.initList( + Weaver.getWeaverEngine(), + unwrapJoinPoint(flattenedValues) + ) ); } @@ -725,7 +819,11 @@ export default class ClavaJoinPoints { $fieldType: Joinpoints.Type ): Joinpoints.Field { return wrapJoinPoint( - ClavaJavaTypes.AstFactory.field(fieldName, unwrapJoinPoint($fieldType)) + ClavaJavaTypes.AstFactory.field( + Weaver.getWeaverEngine(), + fieldName, + unwrapJoinPoint($fieldType) + ) ); } @@ -737,7 +835,10 @@ export default class ClavaJoinPoints { static accessSpecifier(accessSpecifier: string): Joinpoints.AccessSpecifier { // TODO: Make this an enum return wrapJoinPoint( - ClavaJavaTypes.AstFactory.accessSpecifier(accessSpecifier) + ClavaJavaTypes.AstFactory.accessSpecifier( + Weaver.getWeaverEngine(), + accessSpecifier + ) ); } @@ -771,6 +872,7 @@ export default class ClavaJoinPoints { return wrapJoinPoint( ClavaJavaTypes.AstFactory.forStmt( + Weaver.getWeaverEngine(), unwrapJoinPoint($init), unwrapJoinPoint($condition), unwrapJoinPoint($inc), @@ -792,6 +894,7 @@ export default class ClavaJoinPoints { return wrapJoinPoint( ClavaJavaTypes.AstFactory.whileStmt( + Weaver.getWeaverEngine(), unwrapJoinPoint($condition), unwrapJoinPoint($body) ) @@ -800,7 +903,11 @@ export default class ClavaJoinPoints { static param(name: string, $type: Joinpoints.Type): Joinpoints.Param { return wrapJoinPoint( - ClavaJavaTypes.AstFactory.param(name, unwrapJoinPoint($type)) + ClavaJavaTypes.AstFactory.param( + Weaver.getWeaverEngine(), + name, + unwrapJoinPoint($type) + ) ); } @@ -845,7 +952,10 @@ export default class ClavaJoinPoints { static exprStmt($expr: Joinpoints.Expression): Joinpoints.ExprStmt { return wrapJoinPoint( - ClavaJavaTypes.AstFactory.exprStmt(unwrapJoinPoint($expr)) + ClavaJavaTypes.AstFactory.exprStmt( + Weaver.getWeaverEngine(), + unwrapJoinPoint($expr) + ) ); } @@ -856,7 +966,10 @@ export default class ClavaJoinPoints { static declStmt(...decls: Joinpoints.Decl[]): Joinpoints.DeclStmt { const flattenedDecls = flattenArgsArray(decls); return wrapJoinPoint( - ClavaJavaTypes.AstFactory.declStmt(unwrapJoinPoint(flattenedDecls)) + ClavaJavaTypes.AstFactory.declStmt( + Weaver.getWeaverEngine(), + unwrapJoinPoint(flattenedDecls) + ) ); } @@ -868,33 +981,47 @@ export default class ClavaJoinPoints { * */ static comment(text: string): Joinpoints.Comment { - return wrapJoinPoint(ClavaJavaTypes.AstFactory.comment(text)); + return wrapJoinPoint( + ClavaJavaTypes.AstFactory.comment(Weaver.getWeaverEngine(), text) + ); } static labelDecl(name: string): Joinpoints.LabelDecl { - return wrapJoinPoint(ClavaJavaTypes.AstFactory.labelDecl(name)); + return wrapJoinPoint( + ClavaJavaTypes.AstFactory.labelDecl(Weaver.getWeaverEngine(), name) + ); } static labelStmt( nameOrDecl: Joinpoints.LabelDecl | string ): Joinpoints.LabelStmt { return wrapJoinPoint( - ClavaJavaTypes.AstFactory.labelStmt(unwrapJoinPoint(nameOrDecl)) + ClavaJavaTypes.AstFactory.labelStmt( + Weaver.getWeaverEngine(), + unwrapJoinPoint(nameOrDecl) + ) ); } static gotoStmt(labelDecl: Joinpoints.LabelDecl): Joinpoints.GotoStmt { return wrapJoinPoint( - ClavaJavaTypes.AstFactory.gotoStmt(unwrapJoinPoint(labelDecl)) + ClavaJavaTypes.AstFactory.gotoStmt( + Weaver.getWeaverEngine(), + unwrapJoinPoint(labelDecl) + ) ); } static breakStmt(): Joinpoints.Break { - return wrapJoinPoint(ClavaJavaTypes.AstFactory.breakStmt()); + return wrapJoinPoint( + ClavaJavaTypes.AstFactory.breakStmt(Weaver.getWeaverEngine()) + ); } static defaultStmt(): Joinpoints.Default { - return wrapJoinPoint(ClavaJavaTypes.AstFactory.defaultStmt()); + return wrapJoinPoint( + ClavaJavaTypes.AstFactory.defaultStmt(Weaver.getWeaverEngine()) + ); } /** @@ -903,7 +1030,12 @@ export default class ClavaJoinPoints { * @param declString - The literal code of the decl. */ static declLiteral(declString: string): Joinpoints.Decl { - return wrapJoinPoint(ClavaJavaTypes.AstFactory.declLiteral(declString)); + return wrapJoinPoint( + ClavaJavaTypes.AstFactory.declLiteral( + Weaver.getWeaverEngine(), + declString + ) + ); } /** @@ -912,7 +1044,9 @@ export default class ClavaJoinPoints { * @param declString - The literal code of the decl. */ static program(): Joinpoints.Program { - return wrapJoinPoint(ClavaJavaTypes.AstFactory.program()); + return wrapJoinPoint( + ClavaJavaTypes.AstFactory.program(Weaver.getWeaverEngine()) + ); } /** @@ -945,6 +1079,7 @@ export default class ClavaJoinPoints { if (typeof field === "string") { return wrapJoinPoint( ClavaJavaTypes.AstFactory.memberAccess( + Weaver.getWeaverEngine(), unwrapJoinPoint(baseExpr), unwrapJoinPoint(field), unwrapJoinPoint(fieldType) @@ -954,6 +1089,7 @@ export default class ClavaJoinPoints { return wrapJoinPoint( ClavaJavaTypes.AstFactory.memberAccess( + Weaver.getWeaverEngine(), unwrapJoinPoint(baseExpr), unwrapJoinPoint(field) ) @@ -976,7 +1112,10 @@ export default class ClavaJoinPoints { argument: Joinpoints.Expression | Joinpoints.Type ): Joinpoints.UnaryExprOrType { return wrapJoinPoint( - ClavaJavaTypes.AstFactory.sizeof(unwrapJoinPoint(argument)) + ClavaJavaTypes.AstFactory.sizeof( + Weaver.getWeaverEngine(), + unwrapJoinPoint(argument) + ) ); } } diff --git a/Clava-JS/src-api/core.ts b/Clava-JS/src-api/core.ts deleted file mode 100644 index 4ca929e79..000000000 --- a/Clava-JS/src-api/core.ts +++ /dev/null @@ -1,21 +0,0 @@ -/** - * This file is used only in Clava Classic to load the core API. - * This is done for compatibility with the previous version of Clava. - * Do not use this file in new (clava-js) projects. - * Remove this file if Clava Classic has died out. - */ - -const prefix = "@specs-feup/clava/api/"; -const coreImports: string[] = []; -const sideEffectsOnlyImports: string[] = ["Joinpoints.js"]; - -for (const sideEffectsOnlyImport of sideEffectsOnlyImports) { - await import(prefix + sideEffectsOnlyImport); -} -for (const coreImport of coreImports) { - const foo = Object.entries(await import(prefix + coreImport)); - foo.forEach(([key, value]) => { - // @ts-ignore - globalThis[key] = value; - }); -} diff --git a/Clava-JS/src-api/lara/benchmark/ClavaBenchmarkInstance.ts b/Clava-JS/src-api/lara/benchmark/ClavaBenchmarkInstance.ts index ab5ac40a2..90fe37bcb 100644 --- a/Clava-JS/src-api/lara/benchmark/ClavaBenchmarkInstance.ts +++ b/Clava-JS/src-api/lara/benchmark/ClavaBenchmarkInstance.ts @@ -2,9 +2,8 @@ import Io from "@specs-feup/lara/api/lara/Io.js"; import BenchmarkInstance from "@specs-feup/lara/api/lara/benchmark/BenchmarkInstance.js"; import { JavaClasses } from "@specs-feup/lara/api/lara/util/JavaTypes.js"; import Query from "@specs-feup/lara/api/weaver/Query.js"; -import Weaver from "@specs-feup/lara/api/weaver/Weaver.js"; import Clava from "../..//clava/Clava.js"; -import { Joinpoint, Pragma, Program } from "../../Joinpoints.js"; +import { Pragma } from "../../Joinpoints.js"; import CMaker from "../../clava/cmake/CMaker.js"; import ClavaJoinPoints from "../../clava/ClavaJoinPoints.js"; @@ -100,14 +99,7 @@ export default abstract class ClavaBenchmarkInstance extends BenchmarkInstance { } protected loadCached(astFile: JavaClasses.File) { - // eslint-disable-next-line @typescript-eslint/no-unsafe-call - console.log(`Loading cached AST from file ${astFile.getAbsolutePath()}...`); - - // Load saved AST - const $app = Weaver.deserialize(Io.readFile(astFile)) as Program; - - // Push loaded AST - Clava.pushAst($app); + throw new Error("ClavaBenchmarkInstance.loadCached: Not implemented"); } /** diff --git a/ClavaWeaver/.gitignore b/ClavaWeaver/.gitignore index 1170455d2..3ce57ad83 100644 --- a/ClavaWeaver/.gitignore +++ b/ClavaWeaver/.gitignore @@ -2,6 +2,7 @@ cxx_weaver_output/ AutoParStats-default.json src/**/abstracts/ +!src/**/abstracts/ACxxWeaverJoinPoint.java src/**/exceptions/CxxWeaverException.java src/**/enums/ *.dotty diff --git a/ClavaWeaver/resources/clava/test/weaver/AstNodes.js b/ClavaWeaver/resources/clava/test/weaver/AstNodes.js index dd96a13fd..e450970c4 100644 --- a/ClavaWeaver/resources/clava/test/weaver/AstNodes.js +++ b/ClavaWeaver/resources/clava/test/weaver/AstNodes.js @@ -1,5 +1,4 @@ import Query from "@specs-feup/lara/api/weaver/Query.js"; -import Ast from "@specs-feup/lara/api/weaver/Ast.js"; for (const $if of Query.search("function", "testNodes").search("if")) { console.log("astNumChildren = " + $if.astNumChildren); @@ -10,16 +9,3 @@ for (const $if of Query.search("function", "testNodes").search("if")) { console.log("child(0) = " + $if.getChild(0)); console.log('astAncestor("Decl") = ' + $if.getAstAncestor("Decl").name); } - -console.log("\n\nAst API:"); -for (const $if of Query.search("function", "testNodes").search("if")) { - const astNode = $if.node; - - console.log("astNumChildren = " + Ast.getNumChildren(astNode)); - console.log( - "astChildren = " + - Ast.getChildren(astNode).map((node) => - node.getClass().getSimpleName() - ) - ); -} diff --git a/ClavaWeaver/resources/clava/test/weaver/c/results/AstNodes.js.txt b/ClavaWeaver/resources/clava/test/weaver/c/results/AstNodes.js.txt index 1fc0527cb..80bdd8068 100644 --- a/ClavaWeaver/resources/clava/test/weaver/c/results/AstNodes.js.txt +++ b/ClavaWeaver/resources/clava/test/weaver/c/results/AstNodes.js.txt @@ -5,7 +5,3 @@ numChildren = 2 children = Joinpoint 'binaryOp',Joinpoint 'body' child(0) = Joinpoint 'binaryOp' astAncestor("Decl") = testNodes - -Ast API: -astNumChildren = 2 -astChildren = BinaryOperator,CompoundStmt \ No newline at end of file diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/ClavaWeaverData.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/ClavaWeaverData.java index 0b72af05d..ed8c8115f 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/ClavaWeaverData.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/ClavaWeaverData.java @@ -34,8 +34,10 @@ public class ClavaWeaverData { private final Set manuallyWrittenFiles; private Collection generatedFiles; private ClavaContext context; + private final CxxWeaver weaver; - public ClavaWeaverData() { + public ClavaWeaverData(CxxWeaver weaver) { + this.weaver = weaver; // this.apps = new ArrayDeque<>(); this.userValuesStack = new ArrayDeque<>(); @@ -102,7 +104,7 @@ public void pushAst(App app) { // Executing here since execution might depend on code that consults the current App (e.g., for ClavaContext, // factory...) long tic = System.nanoTime(); - ClavaPragmas.processClavaPragmas(app); + ClavaPragmas.processClavaPragmas(app, weaver); SpecsLogs.debug(() -> SpecsStrings.takeTime("Weaver AST processing after push", tic)); } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/CxxActions.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/CxxActions.java index 9a9f51a19..930ee3dec 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/CxxActions.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/CxxActions.java @@ -14,7 +14,6 @@ package pt.up.fe.specs.clava.weaver; import com.google.common.base.Preconditions; -import org.lara.interpreter.weaver.interf.WeaverEngine; import org.lara.interpreter.weaver.interf.events.Stage; import pt.up.fe.specs.clava.ClavaNode; import pt.up.fe.specs.clava.ClavaNodes; @@ -24,7 +23,6 @@ import pt.up.fe.specs.clava.ast.extra.App; import pt.up.fe.specs.clava.ast.stmt.*; import pt.up.fe.specs.clava.utils.NodePosition; -import pt.up.fe.specs.clava.weaver.abstracts.ACxxWeaverJoinPoint; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AJoinPoint; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AScope; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AStatement; @@ -71,7 +69,7 @@ public static AJoinPoint insertAsStmt(ClavaNode target, String code, Insert inse app.clearCache(); weaver.getEventTrigger().triggerAction(Stage.DURING, "CxxActions.insertAsStmt", - CxxJoinpoints.create(target), Arrays.asList(insert, code), Optional.empty()); + CxxJoinpoints.create(target, weaver), Arrays.asList(insert, code), Optional.empty()); }); // Convert Insert to NodePosition @@ -88,7 +86,7 @@ public static AJoinPoint insertAsStmt(ClavaNode target, String code, Insert inse weaver.clearUserField(target); } - return CxxJoinpoints.create(node); + return CxxJoinpoints.create(node, weaver); } private static void checkInsertAfterReturn(ClavaNode base, ClavaNode newNode) { @@ -107,7 +105,7 @@ public static AJoinPoint[] insertAsChild(String position, ClavaNode base, ClavaN app.clearCache(); weaver.getEventTrigger().triggerAction(Stage.DURING, "CxxActions.insertAsChild", - CxxJoinpoints.create(base), Arrays.asList(position, CxxJoinpoints.create(node)), Optional.empty()); + CxxJoinpoints.create(base, weaver), Arrays.asList(position, CxxJoinpoints.create(node, weaver)), Optional.empty()); }); switch (position) { @@ -134,7 +132,7 @@ public static AJoinPoint[] insertAsChild(String position, ClavaNode base, ClavaN // // Remove all children // base.removeChildren(0, base.getNumChildren()); base.addChild(node); - return new AJoinPoint[]{CxxJoinpoints.create(node)}; + return new AJoinPoint[]{CxxJoinpoints.create(node, weaver)}; default: throw new RuntimeException("Case not defined:" + position); } @@ -158,8 +156,8 @@ public static ClavaNode replace(ClavaNode target, ClavaNode newNode, CxxWeaver w return NodeInsertUtils.replace(target, newNode); } - public static AJoinPoint insertBefore(AJoinPoint baseJp, AJoinPoint newJp) { - return insert(baseJp, newJp, Insert.BEFORE, (base, node) -> NodeInsertUtils.insertBefore(base, node)); + public static AJoinPoint insertBefore(AJoinPoint baseJp, AJoinPoint newJp, CxxWeaver weaver) { + return insert(baseJp, newJp, Insert.BEFORE, (base, node) -> NodeInsertUtils.insertBefore(base, node), weaver); // Stmt newStmt = ClavaNodes.toStmt(newJp.getNode()); // Stmt baseStmt = getValidStatement(baseJp.getNode(), Insert.BEFORE); // if (baseStmt == null) { @@ -170,10 +168,10 @@ public static AJoinPoint insertBefore(AJoinPoint baseJp, AJoinPoint newJp) { // return CxxJoinpoints.create(newStmt); } - public static AJoinPoint insertAfter(AJoinPoint baseJp, AJoinPoint newJp) { + public static AJoinPoint insertAfter(AJoinPoint baseJp, AJoinPoint newJp, CxxWeaver weaver) { checkInsertAfterReturn(baseJp.getNode(), newJp.getNode()); - return insert(baseJp, newJp, Insert.AFTER, (base, node) -> NodeInsertUtils.insertAfter(base, node)); + return insert(baseJp, newJp, Insert.AFTER, (base, node) -> NodeInsertUtils.insertAfter(base, node), weaver); // // If inside a scope, treat nodes at the statement level // // if // Stmt newStmt = ClavaNodes.toStmt(newJp.getNode()); @@ -186,8 +184,9 @@ public static AJoinPoint insertAfter(AJoinPoint baseJp, AJoinPoint newJp) { // return CxxJoinpoints.create(newStmt); } - public static AJoinPoint insert(AJoinPoint baseJp, AJoinPoint newJp, Insert position, - BiConsumer insertFunction) { + public static AJoinPoint insert(AJoinPoint baseJp, + AJoinPoint newJp, Insert position, + BiConsumer insertFunction, CxxWeaver weaver) { // Set origin point from target to newNode if locations are invalid and no origin point is set var newNode = newJp.getNode(); @@ -225,12 +224,12 @@ public static AJoinPoint insert(AJoinPoint baseJp, AJoinPoint newJp, Insert posi insertFunction.accept(adaptedBase, adaptedNew); - var returnedJp = CxxJoinpoints.create(adaptedNew); + var returnedJp = CxxJoinpoints.create(adaptedNew, weaver); // If base is part of App, clear caches adaptedBase.getAncestorTry(App.class).ifPresent(app -> { app.clearCache(); - WeaverEngine.getThreadLocalWeaver().getEventTrigger().triggerAction(Stage.DURING, "CxxActions.insert", + weaver.getEventTrigger().triggerAction(Stage.DURING, "CxxActions.insert", baseJp, Arrays.asList(position, newJp), Optional.ofNullable((Object) returnedJp)); }); @@ -327,7 +326,7 @@ private static AJoinPoint insertInLoopHeader(AJoinPoint baseJp, AJoinPoint newJp public static AJoinPoint insertJpAsStatement(AJoinPoint baseJp, AJoinPoint newJp, String position, CxxWeaver weaver) { - AStatement stmtJp = CxxJoinpoints.create(ClavaNodes.toStmt(newJp.getNode()), AStatement.class); + AStatement stmtJp = CxxJoinpoints.create(ClavaNodes.toStmt(newJp.getNode()), weaver, AStatement.class); return insertJp(baseJp, stmtJp, position, weaver); } @@ -379,7 +378,7 @@ public static void insertStmt(String position, Stmt body, Stmt stmt, CxxWeaver w app.clearCache(); weaver.getEventTrigger().triggerAction(Stage.DURING, "CxxActions.insertStmt", - CxxJoinpoints.create(body), Arrays.asList(position, CxxJoinpoints.create(stmt)), Optional.empty()); + CxxJoinpoints.create(body, weaver), Arrays.asList(position, CxxJoinpoints.create(stmt, weaver)), Optional.empty()); }); switch (position) { @@ -415,7 +414,7 @@ public static void removeChildren(ClavaNode node, CxxWeaver weaver) { app.clearCache(); weaver.getEventTrigger().triggerAction(Stage.DURING, "CxxActions.removeChildren", - CxxJoinpoints.create(node), Collections.emptyList(), Optional.empty()); + CxxJoinpoints.create(node, weaver), Collections.emptyList(), Optional.empty()); }); // Clear use fields @@ -427,7 +426,7 @@ public static void removeChildren(ClavaNode node, CxxWeaver weaver) { node.removeChildren(0, node.getNumChildren()); } - public static AJoinPoint insertReturn(AScope scope, AJoinPoint code) { + public static AJoinPoint insertReturn(AScope scope, AJoinPoint code, CxxWeaver weaver) { // Does not take into account situations where functions returns in all paths of an if/else. // This means it can lead to dead-code, although for C/C++ that does not seem to be problematic. @@ -454,7 +453,7 @@ public static AJoinPoint insertReturn(AScope scope, AJoinPoint code) { } for (ReturnStmt returnStmt : returnStatements) { - ACxxWeaverJoinPoint returnJp = CxxJoinpoints.create(returnStmt); + AJoinPoint returnJp = CxxJoinpoints.create(returnStmt, weaver); lastInsertPoint = returnJp.insertBeforeImpl(code); } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/CxxAttributes.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/CxxAttributes.java index d6834b3b5..bb5142724 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/CxxAttributes.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/CxxAttributes.java @@ -206,19 +206,19 @@ public static String convertUse(ExprUse use) { * @param value * @return */ - public static Object toLara(Object value) { + public static Object toLara(Object value, CxxWeaver weaver) { // Special cases // If Clava node, convert to join point if (value instanceof ClavaNode) { - return CxxJoinpoints.create((ClavaNode) value); + return CxxJoinpoints.create((ClavaNode) value, weaver); } // If DataClass, wrap around special version that converts nodes into join points if (value instanceof DataClass) { // System.out.println("ASDADASD"); var dataClass = (DataClass) value; - return new CxxWeaverDataClass(dataClass); + return new CxxWeaverDataClass(weaver, dataClass); } // If a List, apply adapt over all elements of the list @@ -227,7 +227,7 @@ public static Object toLara(Object value) { var newValue = new ArrayList(valueList.size()); for (var valueElement : valueList) { - newValue.add(toLara(valueElement)); + newValue.add(toLara(valueElement, weaver)); } return newValue; diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/CxxJoinpoints.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/CxxJoinpoints.java index 74f2b362b..4c9aec82d 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/CxxJoinpoints.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/CxxJoinpoints.java @@ -41,17 +41,17 @@ import pt.up.fe.specs.util.SpecsCheck; import pt.up.fe.specs.util.SpecsCollections; import pt.up.fe.specs.util.SpecsLogs; -import pt.up.fe.specs.util.classmap.FunctionClassMap; +import pt.up.fe.specs.util.classmap.BiFunctionClassMap; import java.util.List; import java.util.Optional; public class CxxJoinpoints { - private static final FunctionClassMap JOINPOINT_FACTORY; + private static final BiFunctionClassMap JOINPOINT_FACTORY; static { - JOINPOINT_FACTORY = new FunctionClassMap<>(); + JOINPOINT_FACTORY = new BiFunctionClassMap<>(); JOINPOINT_FACTORY.put(ElaboratedType.class, CxxElaboratedType::new); JOINPOINT_FACTORY.put(CastExpr.class, CxxCast::new); @@ -62,15 +62,13 @@ public class CxxJoinpoints { JOINPOINT_FACTORY.put(CUDAKernelCallExpr.class, CXXCudaKernelCall::new); JOINPOINT_FACTORY.put(CallExpr.class, CxxCall::new); JOINPOINT_FACTORY.put(DeclRefExpr.class, CxxVarref::new); - JOINPOINT_FACTORY.put(ArraySubscriptExpr.class, CxxJoinpoints::arrayAccessFactory); + JOINPOINT_FACTORY.put(ArraySubscriptExpr.class, CxxArrayAccess::new); JOINPOINT_FACTORY.put(MemberExpr.class, CxxMemberAccess::new); JOINPOINT_FACTORY.put(CXXNewExpr.class, CxxNewExpr::new); JOINPOINT_FACTORY.put(CXXDeleteExpr.class, CxxDeleteExpr::new); JOINPOINT_FACTORY.put(UnaryExprOrTypeTraitExpr.class, CxxUnaryExprOrType::new); JOINPOINT_FACTORY.put(CXXThisExpr.class, CxxThis::new); // JOINPOINT_FACTORY.put(LiteralExpr.class, CxxExpression::new); - // JOINPOINT_FACTORY.put(IntegerLiteral.class, CxxExpression::new); - // JOINPOINT_FACTORY.put(FloatingLiteral.class, CxxExpression::new); JOINPOINT_FACTORY.put(IntegerLiteral.class, CxxIntLiteral::new); JOINPOINT_FACTORY.put(FloatingLiteral.class, CxxFloatLiteral::new); JOINPOINT_FACTORY.put(CXXBoolLiteralExpr.class, CxxBoolLiteral::new); @@ -81,7 +79,6 @@ public class CxxJoinpoints { JOINPOINT_FACTORY.put(Expr.class, CxxExpression::new); JOINPOINT_FACTORY.put(IfStmt.class, CxxIf::new); JOINPOINT_FACTORY.put(LoopStmt.class, CxxLoop::new); - // JOINPOINT_FACTORY.put(CompoundStmt.class, CxxScope::new); JOINPOINT_FACTORY.put(CompoundStmt.class, CxxJoinpoints::compoundStmtFactory); JOINPOINT_FACTORY.put(ReturnStmt.class, CxxReturnStmt::new); JOINPOINT_FACTORY.put(SwitchStmt.class, CxxSwitch::new); @@ -99,7 +96,6 @@ public class CxxJoinpoints { JOINPOINT_FACTORY.put(FunctionDecl.class, CxxFunction::new); JOINPOINT_FACTORY.put(CXXRecordDecl.class, CxxClass::new); JOINPOINT_FACTORY.put(RecordDecl.class, CxxStruct::new); - // JOINPOINT_FACTORY.put(RecordDecl.class, CxxJoinpoints::recordDeclFactory); JOINPOINT_FACTORY.put(FieldDecl.class, CxxField::new); JOINPOINT_FACTORY.put(ParmVarDecl.class, CxxParam::new); JOINPOINT_FACTORY.put(VarDecl.class, CxxVardecl::new); @@ -133,14 +129,12 @@ public class CxxJoinpoints { JOINPOINT_FACTORY.put(OmpPragma.class, CxxOmp::new); JOINPOINT_FACTORY.put(Pragma.class, CxxPragma::new); JOINPOINT_FACTORY.put(TranslationUnit.class, CxxFile::new); - JOINPOINT_FACTORY.put(App.class, CxxJoinpoints::programFactory); + JOINPOINT_FACTORY.put(App.class, CxxProgram::new); JOINPOINT_FACTORY.put(NullExpr.class, CxxJoinpoints::nullNode); JOINPOINT_FACTORY.put(NullDecl.class, CxxJoinpoints::nullNode); JOINPOINT_FACTORY.put(NullStmt.class, CxxJoinpoints::nullNode); JOINPOINT_FACTORY.put(NullType.class, CxxUndefinedType::new); - // JOINPOINT_FACTORY.put(NullNodeOld.class, CxxEmpty::new); JOINPOINT_FACTORY.put(Comment.class, CxxComment::new); - // JOINPOINT_FACTORY.put(WrapperStmt.class, CxxJoinpoints::wrapperStmtFactory); JOINPOINT_FACTORY.put(WrapperStmt.class, CxxWrapperStmt::new); JOINPOINT_FACTORY.put(CilkFor.class, CxxCilkFor::new); JOINPOINT_FACTORY.put(CilkSync.class, CxxCilkSync::new); @@ -149,127 +143,61 @@ public class CxxJoinpoints { JOINPOINT_FACTORY.put(ClavaNode.class, CxxJoinpoints::defaultFactory); } - private static ACxxWeaverJoinPoint nullNode(ClavaNode node) { + private static ACxxWeaverJoinPoint nullNode(ClavaNode node, CxxWeaver weaver) { SpecsCheck.checkArgument(node instanceof NullNode, () -> "Expected an instance of NullNode, received: " + node); return null; } - /** - * Makes sure the node and its super have a weaver set. - * - * @param newJoinPoint - */ - /* - * private static void setWeaverEngine(ACxxWeaverJoinPoint newJoinPoint) { - * ACxxWeaverJoinPoint currentJoinpoint = newJoinPoint; - * CxxWeaver weaver = getWeaver(); - * - * while (currentJoinpoint != null) { - * - * // Set engine - * currentJoinpoint.setWeaverEngine(weaver); - * currentJoinpoint = currentJoinpoint.getSuper() - * .map(ACxxWeaverJoinPoint.class::cast) - * .orElse(null); - * - * } - * } - */ - - /* - * private final CxxWeaver weaverEngine; - * - * public CxxJoinpoints(CxxWeaver weaverEngine) { - * this.weaverEngine = weaverEngine; - * } - */ - // private static ACxxWeaverJoinPoint typeFactory(Type type, ACxxWeaverJoinPoint - // parent) { - // - // } - - // private static ACxxWeaverJoinPoint tuFactory(TranslationUnit tu, - // ACxxWeaverJoinPoint parent) { - // return new CxxFile(tu, parent); - // // return new CxxFile(tu, parent == null ? null : parent.getRoot()); - // } - public static CxxProgram programFactory(App app) { - CxxWeaver weaver = CxxWeaver.getCxxWeaver(); - return new CxxProgram(weaver.getProgramName(), app, weaver); - } - - private static ACxxWeaverJoinPoint compoundStmtFactory(CompoundStmt stmt) { + private static ACxxWeaverJoinPoint compoundStmtFactory(CompoundStmt stmt, CxxWeaver weaver) { // If no parent, use Scope as default if (!stmt.hasParent()) { - return new CxxScope(stmt); + return new CxxScope(stmt, weaver); } // If CompoundStmt parent is another CompoundStmt, is a Scope. if (stmt.getParent() instanceof CompoundStmt) { - return new CxxScope(stmt); + return new CxxScope(stmt, weaver); } // Otherwise, is a Body - return new CxxBody(stmt); + return new CxxBody(stmt, weaver); } - // private static ACxxWeaverJoinPoint recordDeclFactory(RecordDecl record) { - // - // if (record.getTagKind() == TagKind.STRUCT) { - // return new CxxStruct(record); - // } - // - // if (record.getTagKind() == TagKind.CLASS) { - // return new CxxClass((CXXRecordDecl) record); - // } - // - // return new CxxRecord(record); - // } - - private static ACxxWeaverJoinPoint arrayAccessFactory(ArraySubscriptExpr expr) { - /* - * if (!expr.isTopLevel()) { - * return CxxJoinpoints.nullNode(expr.getFactory().nullExpr()); - * } - */ - return new CxxArrayAccess(expr); - } - - private static ACxxWeaverJoinPoint defaultFactory(ClavaNode node) { + private static ACxxWeaverJoinPoint defaultFactory(ClavaNode node, CxxWeaver weaver) { SpecsLogs.warn("Factory not defined for nodes of class '" + node.getClass().getSimpleName() + "'"); - return new GenericJoinpoint(node); + return new GenericJoinpoint(node, weaver); } - public static ACxxWeaverJoinPoint createFromLara(Object node) { + public static ACxxWeaverJoinPoint createFromLara(Object node, CxxWeaver weaver) { if (!(node instanceof ClavaNode)) { throw new RuntimeException( "Expected input to be a ClavaNode, is " + node.getClass().getSimpleName() + ": " + node); } - return create((ClavaNode) node); + return create((ClavaNode) node, weaver); } - public static ACxxWeaverJoinPoint create(ClavaNode node) { + public static ACxxWeaverJoinPoint create(ClavaNode node, CxxWeaver weaver) { if (node == null) { ClavaLog.debug("CxxJoinpoints: tried to create join point from null node, returning undefined"); return null; } - return JOINPOINT_FACTORY.apply(node); + return JOINPOINT_FACTORY.apply(node, weaver); } - public static T create(ClavaNode node, Class targetClass) { + public static T create(ClavaNode node, CxxWeaver weaver, Class targetClass) { if (targetClass == null) { throw new RuntimeException("Check if you meant to call 'create' with a single argument"); } - return targetClass.cast(create(node)); + return targetClass.cast(create(node, weaver)); } - public static T[] create(List nodes, Class targetClass) { + public static T[] create(List nodes, CxxWeaver weaver, Class targetClass) { return nodes.stream() - .map(node -> create(node, targetClass)) + .map(node -> create(node, weaver, targetClass)) .toArray(size -> SpecsCollections.newArray(targetClass, size)); } @@ -313,10 +241,6 @@ public static Optional getAncestorandSelf(AJoinPoint j public static CxxWeaver getWeaver(AJoinPoint joinpoint) { // Get root joinpoint (program) - return getProgram(joinpoint).getWeaver(); + return getProgram(joinpoint).getWeaverEngine(); } - - // public static AJoinPoint create(Stmt newNode) { - // return create(newNode, null); - // } } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/CxxSelects.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/CxxSelects.java index 1441bc866..a9d654354 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/CxxSelects.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/CxxSelects.java @@ -19,8 +19,6 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -import org.lara.interpreter.weaver.interf.WeaverEngine; - import pt.up.fe.specs.clava.ClavaNode; import pt.up.fe.specs.clava.ast.expr.ArraySubscriptExpr; import pt.up.fe.specs.clava.ast.stmt.IfStmt; @@ -70,18 +68,18 @@ private static List selectPrivate(C * @param filter * @return */ - public static List select(Class targetJoinpoint, + public static List select(CxxWeaver weaver, Class targetJoinpoint, List directChildren, boolean selectDescendents, Predicate filter) { return selectPrivate(targetJoinpoint, directChildren, selectDescendents, filter, - node -> CxxJoinpoints.create(node, targetJoinpoint)); + node -> CxxJoinpoints.create(node, weaver, targetJoinpoint)); } - public static List select(Class targetJoinpoint, + public static List select(CxxWeaver weaver, Class targetJoinpoint, List directChildren, boolean selectDescendents, Class filter) { - return select(targetJoinpoint, directChildren, selectDescendents, filter::isInstance); + return select(weaver, targetJoinpoint, directChildren, selectDescendents, filter::isInstance); } public static boolean stmtFilter(ClavaNode node) { @@ -114,12 +112,12 @@ public static boolean stmtFilter(ClavaNode node) { // } public static AJoinPoint[] selectedNodesToJps(Stream selectedNodes, - WeaverEngine weaverEngine) { + CxxWeaver weaverEngine) { return selectedNodesToJps(selectedNodes, jp -> true, weaverEngine); } public static AJoinPoint[] selectedNodesToJps(Stream selectedNodes, - Predicate filter, WeaverEngine weaverEngine) { + Predicate filter, CxxWeaver weaverEngine) { return selectedNodesToJpsStream(selectedNodes, filter, weaverEngine) .collect(Collectors.toList()) @@ -128,18 +126,18 @@ public static AJoinPoint[] selectedNodesToJps(Stream select } public static Stream selectedNodesToJpsStream(Stream selectedNodes, - WeaverEngine weaverEngine) { + CxxWeaver weaverEngine) { return selectedNodesToJpsStream(selectedNodes, jp -> true, weaverEngine); } public static Stream selectedNodesToJpsStream(Stream selectedNodes, - Predicate filter, WeaverEngine weaverEngine) { + Predicate filter, CxxWeaver weaverEngine) { var selectedJps = selectedNodes // Ignore null nodes .filter(sibling -> !(sibling instanceof NullNode)) - .map(CxxJoinpoints::create) + .map(node -> CxxJoinpoints.create(node, weaverEngine)) // Filter null nodes .filter(jp -> jp != null) // Default filter diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/CxxWeaver.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/CxxWeaver.java index f0a989722..58926c96c 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/CxxWeaver.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/CxxWeaver.java @@ -175,7 +175,7 @@ public CxxWeaver() { private void reset() { // Gears this.modifiedFilesGear = new ModifiedFilesGear(); - this.cacheHandlerGear = new CacheHandlerGear(); + this.cacheHandlerGear = new CacheHandlerGear(this); // Weaver configuration context = new ClavaContext(); @@ -215,7 +215,7 @@ public Optional getAppTry() { } public CxxProgram getAppJp() { - return CxxJoinpoints.programFactory(getApp()); + return new CxxProgram(getApp(), this); } private Map> getUserValues() { @@ -238,7 +238,7 @@ public boolean addMessageToUser(String message) { @Override protected boolean begin(List sources, File outputDir, DataStore args) { setData(args); - this.weaverData = new ClavaWeaverData(); + this.weaverData = new ClavaWeaverData(this); this.accMap = new AccumulatorMap<>(); this.messagesToUser = new LinkedHashSet<>(); @@ -742,7 +742,7 @@ private static Optional headerFlagToFile(String headerFlag) { */ @Override public JoinPoint getRootJp() { - return CxxJoinpoints.create(getApp()); + return CxxJoinpoints.create(getApp(), this); } public String getProgramName() { @@ -1107,7 +1107,7 @@ public TranslationUnit rebuildFile(TranslationUnit tUnit) { getApp().clearCache(); getEventTrigger().triggerAction(Stage.DURING, "CxxWeaver.rebuildFile", - CxxJoinpoints.create(tUnit), Collections.emptyList(), Optional.empty()); + CxxJoinpoints.create(tUnit, this), Collections.emptyList(), Optional.empty()); // Return correct TranslationUnit for (TranslationUnit tu : rebuiltApp.getTranslationUnits()) { @@ -1365,10 +1365,6 @@ public boolean clearUserField(ClavaNode node) { return getUserValues().remove(node) != null; } - public static CxxWeaver getCxxWeaver() { - return (CxxWeaver) getThreadLocalWeaver(); - } - @Override public Set getLanguages() { return LANGUAGES; @@ -1436,15 +1432,15 @@ public List getAvailableIncludes() { return includes; } - public static ClavaFactory getFactory() { + public ClavaFactory getFactory() { return getContex().get(ClavaContext.FACTORY); } - public static ClavaContext getContex() { - return getCxxWeaver().getApp().getContext(); + public ClavaContext getContex() { + return getApp().getContext(); } - public static SnippetParser getSnippetParser() { + public SnippetParser getSnippetParser() { return new SnippetParser(getContex()); } @@ -1556,7 +1552,7 @@ public int getStackSize() { @Override public AstMethods getAstMethods() { - return new ClavaAstMethods(this, ClavaNode.class, node -> CxxJoinpoints.create(node), + return new ClavaAstMethods(this, ClavaNode.class, node -> CxxJoinpoints.create(node, this), node -> ClavaCommonLanguage.getJoinPointName(node), node -> node.getScopeChildren()); } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/CxxWeaverApi.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/CxxWeaverApi.java index 0a25b98a5..3b8edfa14 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/CxxWeaverApi.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/CxxWeaverApi.java @@ -24,28 +24,28 @@ public class CxxWeaverApi { - public static ACxxWeaverJoinPoint findJp(String filepath, String astId) { + public static ACxxWeaverJoinPoint findJp(CxxWeaver weaver, String filepath, String astId) { // Get AST at the top of the stack - App topAst = CxxWeaver.getCxxWeaver().getApp(); + App topAst = weaver.getApp(); return topAst.find(filepath, astId) - .map(node -> CxxJoinpoints.create(node)) + .map(node -> CxxJoinpoints.create(node, weaver)) .orElse(null); } - public static void writeCode(File outputFolder) { - CxxWeaver.getCxxWeaver().writeCode(outputFolder); + public static void writeCode(CxxWeaver weaver, File outputFolder) { + weaver.writeCode(outputFolder); } - public static List getAvailableUserIncludes() { - return CxxWeaver.getCxxWeaver().getAvailableIncludes().stream() - .map(CxxWeaver.getFactory()::includeDecl) - .map(includeDecl -> (AInclude) CxxJoinpoints.create(includeDecl)) + public static List getAvailableUserIncludes(CxxWeaver weaver) { + return weaver.getAvailableIncludes().stream() + .map(weaver.getFactory()::includeDecl) + .map(includeDecl -> CxxJoinpoints.create(includeDecl, weaver, AInclude.class)) .collect(Collectors.toList()); } - public static Set getIncludeFolders() { - return CxxWeaver.getCxxWeaver().getIncludeFolders(); + public static Set getIncludeFolders(CxxWeaver weaver) { + return weaver.getIncludeFolders(); } } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/CxxWeaverDataClass.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/CxxWeaverDataClass.java index a0b677b39..f4e4b5cfa 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/CxxWeaverDataClass.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/CxxWeaverDataClass.java @@ -19,10 +19,12 @@ public class CxxWeaverDataClass extends DataClassWrapper { private final DataClass originalData; + private final CxxWeaver weaver; - public CxxWeaverDataClass(DataClass data) { + public CxxWeaverDataClass(CxxWeaver weaver, DataClass data) { super(data); + this.weaver = weaver; this.originalData = data; } @@ -45,7 +47,7 @@ public Object getValue(String key) { var value = super.getValue(key); // Adapt value - return CxxAttributes.toLara(value); + return CxxAttributes.toLara(value, this.weaver); // // Special case // diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/abstracts/ACxxWeaverJoinPoint.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/abstracts/ACxxWeaverJoinPoint.java index 59da608d6..7e18d27c8 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/abstracts/ACxxWeaverJoinPoint.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/abstracts/ACxxWeaverJoinPoint.java @@ -43,6 +43,15 @@ */ public abstract class ACxxWeaverJoinPoint extends AJoinPoint { + public ACxxWeaverJoinPoint(CxxWeaver weaver) { + super(weaver); + } + + @Override + public CxxWeaver getWeaverEngine() { + return (CxxWeaver) super.getWeaverEngine(); + } + // private static final String BASE_CLAVA_AST_PACKAGE = "pt.up.fe.specs.clava.ast"; // // protected static String getBaseClavaAstPackage() { @@ -57,13 +66,8 @@ public abstract class ACxxWeaverJoinPoint extends AJoinPoint { // IGNORE_NODES.add(ParenExpr.class); // Have not tried it yet } - @Override - public CxxWeaver getWeaverEngine() { - return super.getWeaverEngine(); - } - public ClavaFactory getFactory() { - return CxxWeaver.getFactory(); + return getWeaverEngine().getFactory(); } /** @@ -125,7 +129,7 @@ public AJoinPoint getParentImpl() { // currentParent = currentParent.getParent(); // } - return CxxJoinpoints.create(currentParent); + return CxxJoinpoints.create(currentParent, getWeaverEngine()); } @Override @@ -144,7 +148,7 @@ public AJoinPoint getAncestorImpl(String type) { ClavaNode currentNode = getNode(); while (currentNode.hasParent()) { // Create join point for testing type - ACxxWeaverJoinPoint parentJp = CxxJoinpoints.create(currentNode.getParent()); + ACxxWeaverJoinPoint parentJp = CxxJoinpoints.create(currentNode.getParent(), getWeaverEngine()); if (parentJp.instanceOf(type)) { return parentJp; @@ -211,7 +215,7 @@ public AJoinPoint getAstAncestorImpl(String type) { ClavaNode parentNode = currentNode.getParent(); if (nodeClass.isInstance(parentNode)) { - return CxxJoinpoints.create(parentNode); + return CxxJoinpoints.create(parentNode, getWeaverEngine()); } currentNode = parentNode; @@ -320,7 +324,7 @@ public AJoinPoint insertBeforeImpl(AJoinPoint node) { return null; } - return CxxActions.insertBefore(this, node); + return CxxActions.insertBefore(this, node, getWeaverEngine()); } @Override @@ -339,7 +343,7 @@ public AJoinPoint insertAfterImpl(AJoinPoint node) { return null; } - return CxxActions.insertAfter(this, node); + return CxxActions.insertAfter(this, node, getWeaverEngine()); } @Override @@ -372,22 +376,21 @@ private AJoinPoint toJpToBeInserted(String code) { var type = declaration.substring(0, separationIndex).strip(); var declName = declaration.substring(separationIndex + 1, declaration.length()).strip(); - var typeJp = AstFactory.typeLiteral(type); + var typeJp = AstFactory.typeLiteral(getWeaverEngine(), type); System.out.println("TYPE: " + type); System.out.println("DECLNAME: " + declName); // if no index, assume no initialization if (equalIndex == -1) { - return AstFactory.varDeclNoInit(declName, typeJp); + return AstFactory.varDeclNoInit(getWeaverEngine(), declName, typeJp); } // With inicialization - var init = AstFactory.exprLiteral(code.substring(equalIndex + 1, code.length()).strip(), typeJp); - - return AstFactory.varDecl(declName, init); + var init = AstFactory.exprLiteral(getWeaverEngine(), code.substring(equalIndex + 1, code.length()).strip(), typeJp); + return AstFactory.varDecl(getWeaverEngine(), declName, init); } if (getNode() instanceof ExprStmt) { - return AstFactory.exprLiteral(code); + return AstFactory.exprLiteral(getWeaverEngine(), code); } throw new RuntimeException( @@ -396,12 +399,12 @@ private AJoinPoint toJpToBeInserted(String code) { } - return CxxJoinpoints.create(CxxWeaver.getSnippetParser().parseStmt(code)); + return CxxJoinpoints.create(getWeaverEngine().getSnippetParser().parseStmt(code), getWeaverEngine()); } @Override public AJoinPoint replaceWithImpl(AJoinPoint node) { - return CxxJoinpoints.create(CxxActions.replace(getNode(), node.getNode(), getWeaverEngine())); + return CxxJoinpoints.create(CxxActions.replace(getNode(), node.getNode(), getWeaverEngine()), getWeaverEngine()); // Return input joinpoint // return node; @@ -479,7 +482,7 @@ public AType getTypeImpl() { return null; } - return CxxJoinpoints.create(((Typable) node).getType(), AType.class); + return CxxJoinpoints.create(((Typable) node).getType(), getWeaverEngine(), AType.class); } @Override @@ -593,7 +596,7 @@ public Integer getAstNumChildrenImpl() { @Override public AJoinPoint[] getAstChildrenArrayImpl() { return getNode().getChildren().stream() - .map(node -> CxxJoinpoints.create(node)) + .map(node -> CxxJoinpoints.create(node, getWeaverEngine())) // .filter(jp -> jp != null) .collect(Collectors.toList()) .toArray(new AJoinPoint[0]); @@ -613,7 +616,7 @@ public AJoinPoint getAstChildImpl(int index) { return null; } - return CxxJoinpoints.create(node.getChild(index)); + return CxxJoinpoints.create(node.getChild(index), getWeaverEngine()); } @Override @@ -672,12 +675,12 @@ public AJoinPoint[] getSiblingsLeftArrayImpl() { @Override public AJoinPoint getLeftJpImpl() { - return getNode().getLeft().map(CxxJoinpoints::create).orElse(null); + return getNode().getLeft().map(node -> CxxJoinpoints.create(node, getWeaverEngine())).orElse(null); } @Override public AJoinPoint getRightJpImpl() { - return getNode().getRight().map(CxxJoinpoints::create).orElse(null); + return getNode().getRight().map(node -> CxxJoinpoints.create(node, getWeaverEngine())).orElse(null); } @Override @@ -687,7 +690,7 @@ public AJoinPoint getChildImpl(int index) { .filter(node -> !(node instanceof NullNode)) .skip(index) .findFirst() - .map(node -> CxxJoinpoints.create(node)) + .map(node -> CxxJoinpoints.create(node, getWeaverEngine())) .orElse(null); // AJoinPoint[] children = getChildrenArrayImpl(); @@ -792,7 +795,7 @@ public Object setUserFieldImpl(Map fieldNameAndValue) { public AJoinPoint getParentRegionImpl() { return CxxAttributes.getParentRegion(getNode()) - .map(node -> CxxJoinpoints.create(node)) + .map(node -> CxxJoinpoints.create(node, getWeaverEngine())) .orElse(null); /* Optional parentRegionTry = CxxAttributes.getParentRegion(getNode()); @@ -836,7 +839,7 @@ public AJoinPoint getCurrentRegionImpl() { return null; } - return CxxJoinpoints.create(currentRegionTry.get()); + return CxxJoinpoints.create(currentRegionTry.get(), getWeaverEngine()); } @Override @@ -857,12 +860,12 @@ public int hashCode() { @Override public AJoinPoint copyImpl() { - return CxxJoinpoints.create(getNode().copy()); + return CxxJoinpoints.create(getNode().copy(), getWeaverEngine()); } @Override public AJoinPoint deepCopyImpl() { - return CxxJoinpoints.create(getNode().deepCopy()); + return CxxJoinpoints.create(getNode().deepCopy(), getWeaverEngine()); } @Override @@ -922,7 +925,7 @@ public Boolean astIsInstanceImpl(String className) { @Override public APragma[] getPragmasArrayImpl() { return ClavaNodes.getPragmas(getNode()).stream() - .map(pragma -> CxxJoinpoints.create(pragma)) + .map(pragma -> CxxJoinpoints.create(pragma, getWeaverEngine())) .toArray(APragma[]::new); } @@ -1032,7 +1035,7 @@ public Object getValueImpl(String key) { var value = getNode().get(datakey); - return CxxAttributes.toLara(value); + return CxxAttributes.toLara(value, getWeaverEngine()); } @Override @@ -1057,7 +1060,7 @@ public AJoinPoint setValueImpl(String key, Object value) { } // Returns new join point of the node - return CxxJoinpoints.create(getNode().set(datakey, value)); + return CxxJoinpoints.create(getNode().set(datakey, value), getWeaverEngine()); } @Override @@ -1075,7 +1078,7 @@ public Object getKeyTypeImpl(String key) { @Override public AJoinPoint getFirstJpImpl(String type) { AJoinPoint firstJp = getNode().getDescendantsStream() - .map(descendant -> CxxJoinpoints.create(descendant)) + .map(descendant -> CxxJoinpoints.create(descendant, getWeaverEngine())) .filter(jp -> jp != null && jp.getJoinPointType().equals(type)) .findFirst() .orElse(null); @@ -1140,7 +1143,7 @@ public AJoinPoint getFirstChildImpl() { return null; } - return CxxJoinpoints.create(node.getChild(0)); + return CxxJoinpoints.create(node.getChild(0), getWeaverEngine()); } @Override @@ -1209,13 +1212,13 @@ public AJoinPoint toCommentImpl(String prefix, String suffix) { var prefixClean = prefix == null ? "" : prefix; var suffixClean = suffix == null ? "" : suffix; - return replaceWithImpl(AstFactory.comment(prefixClean + getCodeImpl() + suffixClean)); + return replaceWithImpl(AstFactory.comment(getWeaverEngine(), prefixClean + getCodeImpl() + suffixClean)); } @Override public AStatement getStmtImpl() { return ClavaNodes.toStmtTry(getNode()) - .map(stmt -> CxxJoinpoints.create(stmt, AStatement.class)) + .map(stmt -> CxxJoinpoints.create(stmt, getWeaverEngine(), AStatement.class)) .orElse(null); } @@ -1235,7 +1238,7 @@ public Integer getBitWidthImpl() { @Override public AComment[] getInlineCommentsArrayImpl() { - return CxxJoinpoints.create(getNode().get(ClavaNode.INLINE_COMMENTS), AComment.class); + return CxxJoinpoints.create(getNode().get(ClavaNode.INLINE_COMMENTS), getWeaverEngine(), AComment.class); } // @Override @@ -1290,15 +1293,15 @@ public Boolean getIsInSystemHeaderImpl() { @Override public AJoinPoint getOriginNodeImpl() { - return CxxJoinpoints.create(getNode().getOrigin()); + return CxxJoinpoints.create(getNode().getOrigin(), getWeaverEngine()); } @Override public AJoinPoint[] jpFieldsArrayImpl(Boolean recursive) { if (recursive) { - return CxxJoinpoints.create(getNode().getNodeFieldsRecursive(), AJoinPoint.class); + return CxxJoinpoints.create(getNode().getNodeFieldsRecursive(), getWeaverEngine(), AJoinPoint.class); } - return CxxJoinpoints.create(getNode().getNodeFields(), AJoinPoint.class); + return CxxJoinpoints.create(getNode().getNodeFields(), getWeaverEngine(), AJoinPoint.class); } } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/actions/CallWrap.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/actions/CallWrap.java index 57700fbe0..abcd5ffec 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/actions/CallWrap.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/actions/CallWrap.java @@ -69,8 +69,10 @@ public class CallWrap { private final CxxProgram app; private final ClavaFactory factory; + private final CxxWeaver weaver; - public CallWrap(CxxCall cxxCall) { + public CallWrap(CxxWeaver cxxWeaver, CxxCall cxxCall) { + this.weaver = cxxWeaver; this.cxxCall = cxxCall; app = (CxxProgram) cxxCall.getRootImpl(); @@ -338,8 +340,8 @@ private void initClavaWrappers() { "Expected header file to not exist yet"); // Create implementation and header file - AFile implFile = AstFactory.file(implementationFilename, WRAPPERS_FOLDERNAME); - AFile headerFile = AstFactory.file(WRAPPER_H_FILENAME, WRAPPERS_FOLDERNAME); + AFile implFile = AstFactory.file(this.weaver, implementationFilename, WRAPPERS_FOLDERNAME); + AFile headerFile = AstFactory.file(this.weaver, WRAPPER_H_FILENAME, WRAPPERS_FOLDERNAME); app.addFileImpl(headerFile); app.addFileImpl(implFile); @@ -354,7 +356,7 @@ private void initClavaWrappers() { } private String getImplFilename() { - boolean isCxx = CxxWeaver.getCxxWeaver().getConfig().get(ClavaOptions.STANDARD).isCxx(); + boolean isCxx = this.weaver.getConfig().get(ClavaOptions.STANDARD).isCxx(); String extension = isCxx ? "cpp" : "c"; return WRAPPER_IMPL_FILENAME_PREFIX + "." + extension; } @@ -393,10 +395,10 @@ private List createFunctionCallCode(List paramNames) { .map(param -> factory.literalExpr(param, factory.nullType())) .collect(Collectors.toList()); - CallExpr callExpr = CxxWeaver.getFactory().callExpr(function, returnType, args); + CallExpr callExpr = this.weaver.getFactory().callExpr(function, returnType, args); if (isVoid) { - wrapperStmts.add(CxxWeaver.getFactory().exprStmt(callExpr)); + wrapperStmts.add(this.weaver.getFactory().exprStmt(callExpr)); } else { DeclRefExpr varAssigned = factory.declRefExpr(varName, returnType); BinaryOperator op = factory.binaryOperator(BinaryOperatorKind.Assign, returnType, varAssigned, callExpr); diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/gears/CacheHandlerGear.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/gears/CacheHandlerGear.java index f5e43ea24..296f5eecf 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/gears/CacheHandlerGear.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/gears/CacheHandlerGear.java @@ -19,12 +19,18 @@ public class CacheHandlerGear extends AGear { + private final CxxWeaver weaver; + + public CacheHandlerGear(CxxWeaver weaver) { + this.weaver = weaver; + } + /** * Every time an action is called, clear cache */ @Override public void onAction(ActionEvent data) { - CxxWeaver.getCxxWeaver().getApp().clearCache(); + weaver.getApp().clearCache(); } } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/importable/AstFactory.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/importable/AstFactory.java index c67ca0b90..fa8d4db2b 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/importable/AstFactory.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/importable/AstFactory.java @@ -56,7 +56,7 @@ public class AstFactory { * @param joinpoint * @return */ - public static AJoinPoint varDecl(String varName, AJoinPoint init) { + public static AJoinPoint varDecl(CxxWeaver weaver, String varName, AJoinPoint init) { // Check that init is an expression ClavaNode expr = init.getNode(); @@ -70,17 +70,17 @@ public static AJoinPoint varDecl(String varName, AJoinPoint init) { Type initType = (Type) init.getTypeImpl().getNode(); - DataStore config = CxxWeaver.getCxxWeaver().getConfig(); + DataStore config = weaver.getConfig(); // Check if C or C++ Standard standard = config.get(ClavaOptions.STANDARD); - Type type = getVarDeclType(standard, initType); + Type type = getVarDeclType(weaver, standard, initType); - VarDecl varDecl = CxxWeaver.getFactory().varDecl(varName, type); + VarDecl varDecl = weaver.getFactory().varDecl(varName, type); varDecl.setInit(initExpr); - return CxxJoinpoints.create(varDecl, AVardecl.class); + return CxxJoinpoints.create(varDecl, weaver, AVardecl.class); } /** @@ -90,12 +90,12 @@ public static AJoinPoint varDecl(String varName, AJoinPoint init) { * @param joinpoint * @return */ - public static AJoinPoint varDeclNoInit(String varName, AType type) { - VarDecl varDecl = CxxWeaver.getFactory().varDecl(varName, (Type) type.getNode()); - return CxxJoinpoints.create(varDecl, AVardecl.class); + public static AJoinPoint varDeclNoInit(CxxWeaver weaver, String varName, AType type) { + VarDecl varDecl = weaver.getFactory().varDecl(varName, (Type) type.getNode()); + return CxxJoinpoints.create(varDecl, weaver, AVardecl.class); } - private static Type getVarDeclType(Standard standard, Type returnType) { + private static Type getVarDeclType(CxxWeaver weaver, Standard standard, Type returnType) { // Special case, NullType if (returnType instanceof NullType) { @@ -113,99 +113,97 @@ private static Type getVarDeclType(Standard standard, Type returnType) { // autoCode = autoCode + "&"; // } - return CxxWeaver.getFactory().literalType(autoCode); + return weaver.getFactory().literalType(autoCode); } return returnType; } - public static CxxFunction functionVoid(String name) { + public static CxxFunction functionVoid(CxxWeaver weaver, String name) { - BuiltinType voidType = CxxWeaver.getFactory().builtinType(BuiltinKind.Void); - FunctionProtoType functionType = CxxWeaver.getFactory().functionProtoType(voidType); + BuiltinType voidType = weaver.getFactory().builtinType(BuiltinKind.Void); + FunctionProtoType functionType = weaver.getFactory().functionProtoType(voidType); - FunctionDecl functionDecl = CxxWeaver.getFactory().functionDecl(name, functionType); - functionDecl.setBody(CxxWeaver.getFactory().compoundStmt()); + FunctionDecl functionDecl = weaver.getFactory().functionDecl(name, functionType); + functionDecl.setBody(weaver.getFactory().compoundStmt()); - return (CxxFunction) CxxJoinpoints.create(functionDecl); + return CxxJoinpoints.create(functionDecl, weaver, CxxFunction.class); } - public static AStatement stmtLiteral(String code) { - return CxxJoinpoints.create(CxxWeaver.getSnippetParser().parseStmt(code), AStatement.class); + public static AStatement stmtLiteral(CxxWeaver weaver, String code) { + return CxxJoinpoints.create(weaver.getSnippetParser().parseStmt(code), weaver, AStatement.class); } - public static AType typeLiteral(String code) { - return CxxJoinpoints.create(CxxWeaver.getFactory().literalType(code), AType.class); + public static AType typeLiteral(CxxWeaver weaver, String code) { + return CxxJoinpoints.create(weaver.getFactory().literalType(code), weaver, AType.class); } - public static ADecl declLiteral(String code) { - return CxxJoinpoints.create(CxxWeaver.getFactory().literalDecl(code), ADecl.class); + public static ADecl declLiteral(CxxWeaver weaver, String code) { + return CxxJoinpoints.create(weaver.getFactory().literalDecl(code), weaver, ADecl.class); } - public static AExpression exprLiteral(String code) { - return exprLiteral(code, - CxxJoinpoints.create(CxxWeaver.getFactory().nullType())); + public static AExpression exprLiteral(CxxWeaver weaver, String code) { + return exprLiteral(weaver, code, + CxxJoinpoints.create(weaver.getFactory().nullType(), weaver)); } - public static AExpression exprLiteral(String code, AJoinPoint type) { + public static AExpression exprLiteral(CxxWeaver weaver, String code, AJoinPoint type) { Type astType = type instanceof AType ? (Type) type.getNode() - : CxxWeaver.getFactory().nullType(); + : weaver.getFactory().nullType(); - return CxxJoinpoints.create(CxxWeaver.getFactory().literalExpr(code, astType), AExpression.class); + return CxxJoinpoints.create(weaver.getFactory().literalExpr(code, astType), weaver, AExpression.class); } - public static AExpression cxxConstructExpr(AType type, Object[] constructorArguments) { - return cxxConstructExpr(type, SpecsCollections.asListT(AJoinPoint.class, constructorArguments)); + public static AExpression cxxConstructExpr(CxxWeaver weaver, AType type, Object[] constructorArguments) { + return cxxConstructExpr(weaver, type, SpecsCollections.asListT(AJoinPoint.class, constructorArguments)); } - public static AExpression cxxConstructExpr(AType type, List constructorArguments) { + public static AExpression cxxConstructExpr(CxxWeaver weaver, AType type, List constructorArguments) { List exprArgs = constructorArguments.stream() .map(arg -> (Expr) arg.getNode()) .collect(Collectors.toList()); - return CxxJoinpoints.create(CxxWeaver.getFactory().cxxConstructExpr((Type) type.getNode(), exprArgs), - AExpression.class); + return CxxJoinpoints.create(weaver.getFactory().cxxConstructExpr((Type) type.getNode(), exprArgs), weaver, AExpression.class); } - public static ACall callFromFunction(AFunction function, Object[] args) { - return callFromFunction(function, SpecsCollections.asListT(AJoinPoint.class, args)); + public static ACall callFromFunction(CxxWeaver weaver, AFunction function, Object[] args) { + return callFromFunction(weaver, function, SpecsCollections.asListT(AJoinPoint.class, args)); } - public static ACall callFromFunction(AFunction function, List args) { + public static ACall callFromFunction(CxxWeaver weaver, AFunction function, List args) { var functionDecl = (FunctionDecl) function.getNode(); List exprArgs = args.stream() .map(arg -> (Expr) arg.getNode()) .collect(Collectors.toList()); - var call = CxxWeaver.getFactory().callExpr(functionDecl, exprArgs); + var call = weaver.getFactory().callExpr(functionDecl, exprArgs); - return CxxJoinpoints.create(call, ACall.class); + return CxxJoinpoints.create(call, weaver, ACall.class); } - public static ACall call(String functionName, AType typeJp, Object[] args) { - return call(functionName, typeJp, SpecsCollections.asListT(AJoinPoint.class, args)); + public static ACall call(CxxWeaver weaver, String functionName, AType typeJp, Object[] args) { + return call(weaver, functionName, typeJp, SpecsCollections.asListT(AJoinPoint.class, args)); } - public static ACall call(String functionName, AType typeJp, List args) { + public static ACall call(CxxWeaver weaver, String functionName, AType typeJp, List args) { Type returnType = (Type) typeJp.getNode(); - DeclRefExpr declRef = CxxWeaver.getFactory().declRefExpr(functionName, returnType); - + DeclRefExpr declRef = weaver.getFactory().declRefExpr(functionName, returnType); List argTypes = args.stream() .map(arg -> ((Typable) arg.getNode()).getType()) .collect(Collectors.toList()); - FunctionProtoType type = CxxWeaver.getFactory().functionProtoType(returnType, argTypes); + FunctionProtoType type = weaver.getFactory().functionProtoType(returnType, argTypes); List exprArgs = args.stream() .map(arg -> (Expr) arg.getNode()) .collect(Collectors.toList()); - CallExpr call = CxxWeaver.getFactory().callExpr(declRef, type, exprArgs); + CallExpr call = weaver.getFactory().callExpr(declRef, type, exprArgs); - return CxxJoinpoints.create(call, ACall.class); + return CxxJoinpoints.create(call, weaver, ACall.class); } /** @@ -215,7 +213,7 @@ public static ACall call(String functionName, AType typeJp, List arg * @param joinpoint * @return */ - public static AFile file(File file, String relativePath) { + public static AFile file(CxxWeaver weaver, File file, String relativePath) { // Test if path is absolute if (relativePath != null && new File(relativePath).isAbsolute()) { @@ -225,13 +223,13 @@ public static AFile file(File file, String relativePath) { } // New files do not have a path - TranslationUnit tUnit = CxxWeaver.getFactory().translationUnit(file, Collections.emptyList()); + TranslationUnit tUnit = weaver.getFactory().translationUnit(file, Collections.emptyList()); if (relativePath != null) { tUnit.setRelativePath(relativePath); } - var fileJp = CxxJoinpoints.create(tUnit, AFile.class); + var fileJp = CxxJoinpoints.create(tUnit, weaver, AFile.class); // If file already exists, insert the code of the file literaly if (file.isFile()) { @@ -249,8 +247,8 @@ public static AFile file(File file, String relativePath) { * @param relativePath * @return */ - public static AFile file(String filename, String contents, String relativePath) { - var fileJp = file(new File(filename), relativePath); + public static AFile file(CxxWeaver weaver, String filename, String contents, String relativePath) { + var fileJp = file(weaver, new File(filename), relativePath); // Add contents fileJp.getNode().setOptional(TranslationUnit.LITERAL_SOURCE, contents); @@ -265,11 +263,11 @@ public static AFile file(String filename, String contents, String relativePath) * @param relativePath * @return */ - public static AFile file(String filename, String relativePath) { - return file(new File(filename), relativePath); + public static AFile file(CxxWeaver weaver, String filename, String relativePath) { + return file(weaver, new File(filename), relativePath); } - public static AJoinPoint externC(AJoinPoint jpDecl) { + public static AJoinPoint externC(CxxWeaver weaver, AJoinPoint jpDecl) { // Allowed classes for now: CxxFunction // TODO: This might be expanded in the future @@ -288,17 +286,19 @@ public static AJoinPoint externC(AJoinPoint jpDecl) { // return CxxJoinpoints.newJoinpoint(decl.getParent(), null); } - LinkageSpecDecl linkage = CxxWeaver.getFactory().linkageSpecDecl(LanguageId.C, (Decl) decl); + LinkageSpecDecl linkage = weaver.getFactory().linkageSpecDecl(LanguageId.C, (Decl) decl); - return CxxJoinpoints.create(linkage); + return CxxJoinpoints.create(linkage, weaver); } - public static ACxxWeaverJoinPoint constArrayType(String typeCode, String standard, List dims) { - return constArrayType(CxxWeaver.getFactory().literalType(typeCode), standard, dims); + public static ACxxWeaverJoinPoint constArrayType(CxxWeaver weaver, + String typeCode, String standard, List dims) { + return constArrayType(weaver, weaver.getFactory().literalType(typeCode), standard, dims); } - public static ACxxWeaverJoinPoint constArrayType(String typeCode, String standard, Object[] dims) { - return constArrayType(typeCode, standard, SpecsCollections.asListT(Integer.class, dims)); + public static ACxxWeaverJoinPoint constArrayType(CxxWeaver weaver, + String typeCode, String standard, Object[] dims) { + return constArrayType(weaver, typeCode, standard, SpecsCollections.asListT(Integer.class, dims)); } /** @@ -309,7 +309,8 @@ public static ACxxWeaverJoinPoint constArrayType(String typeCode, String standar * @param dims * @return */ - public static ACxxWeaverJoinPoint constArrayType(Type outType, String standardString, List dims) { + public static ACxxWeaverJoinPoint constArrayType(CxxWeaver weaver, + Type outType, String standardString, List dims) { Objects.requireNonNull(dims); Preconditions.checkArgument(dims.size() > 0); @@ -319,54 +320,53 @@ public static ACxxWeaverJoinPoint constArrayType(Type outType, String standardSt ListIterator li = dims.listIterator(dims.size()); while (li.hasPrevious()) { inType = outType; - outType = CxxWeaver.getFactory().constantArrayType(inType, li.previous()); + outType = weaver.getFactory().constantArrayType(inType, li.previous()); } - return CxxJoinpoints.create(outType); + return CxxJoinpoints.create(outType, weaver); } - public static ACxxWeaverJoinPoint constArrayType(Type outType, String standardString, Object[] dims) { - return constArrayType(outType, standardString, SpecsCollections.asListT(Integer.class, dims)); + public static ACxxWeaverJoinPoint constArrayType(CxxWeaver weaver, + Type outType, String standardString, Object[] dims) { + return constArrayType(weaver, outType, standardString, SpecsCollections.asListT(Integer.class, dims)); } - public static AVariableArrayType variableArrayType(AType elementType, AExpression sizeExpr) { - Type variableArrayType = CxxWeaver.getFactory().variableArrayType((Type) elementType.getNode(), + public static AVariableArrayType variableArrayType(CxxWeaver weaver, AType elementType, AExpression sizeExpr) { + Type variableArrayType = weaver.getFactory().variableArrayType((Type) elementType.getNode(), (Expr) sizeExpr.getNode()); - return CxxJoinpoints.create(variableArrayType, AVariableArrayType.class); + return CxxJoinpoints.create(variableArrayType, weaver, AVariableArrayType.class); } - public static AIncompleteArrayType incompleteArrayType(AType elementType) { - Type incompleteArrayType = CxxWeaver.getFactory().incompleteArrayType(((Type) elementType.getNode())); - - return CxxJoinpoints.create(incompleteArrayType, AIncompleteArrayType.class); + public static AIncompleteArrayType incompleteArrayType(CxxWeaver weaver, AType elementType) { + Type incompleteArrayType = weaver.getFactory().incompleteArrayType(((Type) elementType.getNode())); + return CxxJoinpoints.create(incompleteArrayType, weaver, AIncompleteArrayType.class); } - public static AJoinPoint omp(String directiveName) { + public static AJoinPoint omp(CxxWeaver weaver, String directiveName) { // Get directive OmpDirectiveKind kind = OmpDirectiveKind.getHelper().fromValue(directiveName); - return CxxJoinpoints.create(OmpParser.newOmpPragma(kind, CxxWeaver.getContex())); + return CxxJoinpoints.create(OmpParser.newOmpPragma(kind, weaver.getContex()), weaver); } - public static AStatement caseStmt(AExpression value) { + public static AStatement caseStmt(CxxWeaver weaver, AExpression value) { - CaseStmt caseStmt = CxxWeaver.getFactory().caseStmt((Expr) value.getNode()); + CaseStmt caseStmt = weaver.getFactory().caseStmt((Expr) value.getNode()); - return CxxJoinpoints.create(caseStmt, AStatement.class); + return CxxJoinpoints.create(caseStmt, weaver, AStatement.class); } - public static AStatement defaultStmt() { - var defaultStmt = CxxWeaver.getFactory().defaultStmt(); + public static AStatement defaultStmt(CxxWeaver weaver) { + var defaultStmt = weaver.getFactory().defaultStmt(); - return CxxJoinpoints.create(defaultStmt, AStatement.class); + return CxxJoinpoints.create(defaultStmt, weaver, AStatement.class); } - public static AStatement breakStmt() { - var breakStmt = CxxWeaver.getFactory().breakStmt(); - - return CxxJoinpoints.create(breakStmt, AStatement.class); + public static AStatement breakStmt(CxxWeaver weaver) { + var breakStmt = weaver.getFactory().breakStmt(); + return CxxJoinpoints.create(breakStmt, weaver, AStatement.class); } /** @@ -374,29 +374,29 @@ public static AStatement breakStmt() { * @param expr * @return a list with a case statement and a break statement */ - public static List caseFromExpr(AExpression value, AExpression expr) { + public static List caseFromExpr(CxxWeaver weaver, AExpression value, AExpression expr) { // Create compound stmt - ExprStmt exprStmt = CxxWeaver.getFactory().exprStmt((Expr) expr.getNode()); - BreakStmt breakStmt = CxxWeaver.getFactory().breakStmt(); - var breakJp = CxxJoinpoints.create(breakStmt, AStatement.class); + ExprStmt exprStmt = weaver.getFactory().exprStmt((Expr) expr.getNode()); + BreakStmt breakStmt = weaver.getFactory().breakStmt(); + var breakJp = CxxJoinpoints.create(breakStmt, weaver, AStatement.class); - CompoundStmt compoundStmt = CxxWeaver.getFactory().compoundStmt(exprStmt); + CompoundStmt compoundStmt = weaver.getFactory().compoundStmt(exprStmt); compoundStmt.setNaked(true); - AStatement caseStmt = caseStmt(value); - var compoundJp = CxxJoinpoints.create(compoundStmt, AStatement.class); + AStatement caseStmt = caseStmt(weaver, value); + var compoundJp = CxxJoinpoints.create(compoundStmt, weaver, AStatement.class); return Arrays.asList(caseStmt, compoundJp, breakJp); } - public static AStatement switchStmt(AExpression condition, AStatement body) { - Stmt switchStmt = CxxWeaver.getFactory().switchStmt((Expr) condition.getNode(), (Stmt) body.getNode()); + public static AStatement switchStmt(CxxWeaver weaver, AExpression condition, AStatement body) { + Stmt switchStmt = weaver.getFactory().switchStmt((Expr) condition.getNode(), (Stmt) body.getNode()); - return CxxJoinpoints.create(switchStmt, AStatement.class); + return CxxJoinpoints.create(switchStmt, weaver, AStatement.class); } - public static AStatement switchStmt(AExpression condition, Object[] casesArray) { + public static AStatement switchStmt(CxxWeaver weaver, AExpression condition, Object[] casesArray) { var cases = SpecsCollections.cast(casesArray, AExpression.class); if (cases.length % 2 != 0) { @@ -408,89 +408,88 @@ public static AStatement switchStmt(AExpression condition, Object[] casesArray) for (int i = 0; i < cases.length; i += 2) { - statements.addAll(caseFromExpr(cases[i], cases[i + 1]).stream() + statements.addAll(caseFromExpr(weaver, cases[i], cases[i + 1]).stream() .map(aStmt -> (Stmt) aStmt.getNode()) .collect(Collectors.toList())); } - CompoundStmt body = CxxWeaver.getFactory().compoundStmt(statements); - Stmt switchStmt = CxxWeaver.getFactory().switchStmt((Expr) condition.getNode(), body); + CompoundStmt body = weaver.getFactory().compoundStmt(statements); + Stmt switchStmt = weaver.getFactory().switchStmt((Expr) condition.getNode(), body); - return CxxJoinpoints.create(switchStmt, AStatement.class); + return CxxJoinpoints.create(switchStmt, weaver, AStatement.class); } ////// Methods that only use ClavaFactory - public static ACxxWeaverJoinPoint builtinType(String typeCode) { - BuiltinType type = CxxWeaver.getFactory().builtinType(typeCode); + public static ACxxWeaverJoinPoint builtinType(CxxWeaver weaver, String typeCode) { + BuiltinType type = weaver.getFactory().builtinType(typeCode); - return CxxJoinpoints.create(type); + return CxxJoinpoints.create(type, weaver); } - public static ACxxWeaverJoinPoint pointerTypeFromBuiltin(String typeCode) { + public static ACxxWeaverJoinPoint pointerTypeFromBuiltin(CxxWeaver weaver, String typeCode) { - BuiltinType pointeeType = CxxWeaver.getFactory().builtinType(typeCode); - PointerType pointerType = CxxWeaver.getFactory().pointerType(pointeeType); + BuiltinType pointeeType = weaver.getFactory().builtinType(typeCode); + PointerType pointerType = weaver.getFactory().pointerType(pointeeType); - ACxxWeaverJoinPoint jp = CxxJoinpoints.create(pointerType); + ACxxWeaverJoinPoint jp = CxxJoinpoints.create(pointerType, weaver); return jp; } - public static ACxxWeaverJoinPoint pointerType(AType pointeeType) { - PointerType pointerType = CxxWeaver.getFactory().pointerType((Type) pointeeType.getNode()); + public static ACxxWeaverJoinPoint pointerType(CxxWeaver weaver, AType pointeeType) { + PointerType pointerType = weaver.getFactory().pointerType((Type) pointeeType.getNode()); - ACxxWeaverJoinPoint jp = CxxJoinpoints.create(pointerType); + ACxxWeaverJoinPoint jp = CxxJoinpoints.create(pointerType, weaver); return jp; } - public static AExpression doubleLiteral(String floating) { - return doubleLiteral(Double.parseDouble(floating)); + public static AExpression doubleLiteral(CxxWeaver weaver, String floating) { + return doubleLiteral(weaver, Double.parseDouble(floating)); } - public static AExpression doubleLiteral(double floating) { - FloatingLiteral floatingLiteral = CxxWeaver.getFactory() + public static AExpression doubleLiteral(CxxWeaver weaver, double floating) { + FloatingLiteral floatingLiteral = weaver.getFactory() .floatingLiteral(FloatKind.DOUBLE, floating); - return CxxJoinpoints.create(floatingLiteral, AExpression.class); + return CxxJoinpoints.create(floatingLiteral, weaver, AExpression.class); } - public static ACxxWeaverJoinPoint longType() { - BuiltinType type = CxxWeaver.getFactory().builtinType(BuiltinKind.Long); - return CxxJoinpoints.create(type); + public static ACxxWeaverJoinPoint longType(CxxWeaver weaver) { + BuiltinType type = weaver.getFactory().builtinType(BuiltinKind.Long); + return CxxJoinpoints.create(type, weaver); } - public static AExpression integerLiteral(String integer) { - return integerLiteral(Integer.parseInt(integer)); + public static AExpression integerLiteral(CxxWeaver weaver, String integer) { + return integerLiteral(weaver, Integer.parseInt(integer)); } - public static AExpression integerLiteral(int integer) { - IntegerLiteral intLiteral = CxxWeaver.getFactory().integerLiteral(integer); + public static AExpression integerLiteral(CxxWeaver weaver, int integer) { + IntegerLiteral intLiteral = weaver.getFactory().integerLiteral(integer); - return CxxJoinpoints.create(intLiteral, AExpression.class); + return CxxJoinpoints.create(intLiteral, weaver, AExpression.class); } - public static AScope scope() { - return scope(Collections.emptyList()); + public static AScope scope(CxxWeaver weaver) { + return scope(weaver, Collections.emptyList()); } - public static AScope scope(Object[] statements) { - return scope(SpecsCollections.asListT(AStatement.class, statements)); + public static AScope scope(CxxWeaver weaver, Object[] statements) { + return scope(weaver, SpecsCollections.asListT(AStatement.class, statements)); } - public static AScope scope(List statements) { + public static AScope scope(CxxWeaver weaver, List statements) { List stmtNodes = SpecsCollections.map(statements, stmt -> (Stmt) stmt.getNode()); - return CxxJoinpoints.create(CxxWeaver.getFactory().compoundStmt(stmtNodes), AScope.class); - + return CxxJoinpoints.create(weaver.getFactory().compoundStmt(stmtNodes), weaver, AScope.class); } - public static AVarref varref(String declName, AType type) { + public static AVarref varref(CxxWeaver weaver, String declName, AType type) { Type typeNode = (Type) type.getNode(); - return CxxJoinpoints.create(CxxWeaver.getFactory().declRefExpr(declName, typeNode), AVarref.class); + return CxxJoinpoints.create(weaver.getFactory().declRefExpr(declName, typeNode), weaver, AVarref.class); } - public static AVarref varref(ANamedDecl namedDecl) { + public static AVarref varref(CxxWeaver weaver, ANamedDecl namedDecl) { NamedDecl decl = (NamedDecl) namedDecl.getNode(); if (!(decl instanceof ValueDecl)) { @@ -499,23 +498,23 @@ public static AVarref varref(ANamedDecl namedDecl) { return null; } - return CxxJoinpoints.create(CxxWeaver.getFactory().declRefExpr((ValueDecl) decl), AVarref.class); + return CxxJoinpoints.create(weaver.getFactory().declRefExpr((ValueDecl) decl), weaver, AVarref.class); } - public static AStatement returnStmt(AExpression expr) { - return CxxJoinpoints.create(CxxWeaver.getFactory().returnStmt((Expr) expr.getNode()), AStatement.class); + public static AStatement returnStmt(CxxWeaver weaver, AExpression expr) { + return CxxJoinpoints.create(weaver.getFactory().returnStmt((Expr) expr.getNode()), weaver, AStatement.class); } - public static AStatement returnStmt() { - return CxxJoinpoints.create(CxxWeaver.getFactory().returnStmt(), AStatement.class); + public static AStatement returnStmt(CxxWeaver weaver) { + return CxxJoinpoints.create(weaver.getFactory().returnStmt(), weaver, AStatement.class); } - public static AFunctionType functionType(AType returnTypeJp, Object[] argTypesJps) { - return functionType(returnTypeJp, SpecsCollections.asListT(AType.class, argTypesJps)); + public static AFunctionType functionType(CxxWeaver weaver, AType returnTypeJp, Object[] argTypesJps) { + return functionType(weaver, returnTypeJp, SpecsCollections.asListT(AType.class, argTypesJps)); } - public static AFunctionType functionType(AType returnTypeJp, List argTypesJps) { + public static AFunctionType functionType(CxxWeaver weaver, AType returnTypeJp, List argTypesJps) { Type returnType = (Type) returnTypeJp.getNode(); @@ -523,18 +522,18 @@ public static AFunctionType functionType(AType returnTypeJp, List argType .map(arg -> ((Type) arg.getNode())) .collect(Collectors.toList()); - FunctionProtoType type = CxxWeaver.getFactory().functionProtoType(returnType, argTypes); + FunctionProtoType type = weaver.getFactory().functionProtoType(returnType, argTypes); - return CxxJoinpoints.create(type, AFunctionType.class); + return CxxJoinpoints.create(type, weaver, AFunctionType.class); } - public static AFunction functionDeclFromType(String functionName, AFunctionType functionTypeJp) { + public static AFunction functionDeclFromType(CxxWeaver weaver, String functionName, AFunctionType functionTypeJp) { FunctionType functionType = (FunctionType) functionTypeJp.getNode(); - return CxxJoinpoints.create(CxxWeaver.getFactory().functionDecl(functionName, functionType), - AFunction.class); + return CxxJoinpoints.create(weaver.getFactory().functionDecl(functionName, functionType), + weaver, AFunction.class); } - public static AFunction functionDecl(String functionName, AType returnTypeJp, List namedDeclJps) { + public static AFunction functionDecl(CxxWeaver weaver, String functionName, AType returnTypeJp, List namedDeclJps) { Type returnType = (Type) returnTypeJp.getNode(); @@ -552,116 +551,115 @@ public static AFunction functionDecl(String functionName, AType returnTypeJp, Li ValueDecl valueDecl = (ValueDecl) node; argTypes.add(valueDecl.getType()); - params.add(CxxWeaver.getFactory().parmVarDecl(valueDecl.getDeclName(), valueDecl.getType())); + params.add(weaver.getFactory().parmVarDecl(valueDecl.getDeclName(), valueDecl.getType())); } // Create the function type - FunctionProtoType functionType = CxxWeaver.getFactory().functionProtoType(returnType, argTypes); - + FunctionProtoType functionType = weaver.getFactory().functionProtoType(returnType, argTypes); // Create function decl - FunctionDecl functionDecl = CxxWeaver.getFactory().functionDecl(functionName, functionType); + FunctionDecl functionDecl = weaver.getFactory().functionDecl(functionName, functionType); // Add parameters functionDecl.addChildren(params); - return CxxJoinpoints.create(functionDecl, AFunction.class); + return CxxJoinpoints.create(functionDecl, weaver, AFunction.class); } - public static AFunction functionDecl(String functionName, AType returnTypeJp, Object... namedDeclJps) { - return functionDecl(functionName, returnTypeJp, SpecsCollections.asListT(AJoinPoint.class, namedDeclJps)); + public static AFunction functionDecl(CxxWeaver weaver, String functionName, AType returnTypeJp, Object... namedDeclJps) { + return functionDecl(weaver, functionName, returnTypeJp, SpecsCollections.asListT(AJoinPoint.class, namedDeclJps)); } - public static ABinaryOp assignment(AExpression leftHand, AExpression rightHand) { + public static ABinaryOp assignment(CxxWeaver weaver, AExpression leftHand, AExpression rightHand) { Expr lhs = (Expr) leftHand.getNode(); Expr rhs = (Expr) rightHand.getNode(); - BinaryOperator assign = CxxWeaver.getFactory().binaryOperator(BinaryOperatorKind.Assign, lhs.getType(), lhs, + BinaryOperator assign = weaver.getFactory().binaryOperator(BinaryOperatorKind.Assign, lhs.getType(), lhs, rhs); - return CxxJoinpoints.create(assign, ABinaryOp.class); + return CxxJoinpoints.create(assign, weaver, ABinaryOp.class); } - public static AIf ifStmt(AExpression condition, AStatement thenBody, AStatement elseBody) { + public static AIf ifStmt(CxxWeaver weaver, AExpression condition, AStatement thenBody, AStatement elseBody) { var thenNode = thenBody != null ? ClavaNodes.toCompoundStmt((Stmt) thenBody.getNode()) : null; var elseNode = elseBody != null ? ClavaNodes.toCompoundStmt((Stmt) elseBody.getNode()) : null; - IfStmt ifStmt = CxxWeaver.getFactory().ifStmt((Expr) condition.getNode(), thenNode, elseNode); - return CxxJoinpoints.create(ifStmt, AIf.class); + IfStmt ifStmt = weaver.getFactory().ifStmt((Expr) condition.getNode(), thenNode, elseNode); + return CxxJoinpoints.create(ifStmt, weaver, AIf.class); } - public static ABinaryOp binaryOp(String op, AExpression left, AExpression right, AType type) { + public static ABinaryOp binaryOp(CxxWeaver weaver, String op, AExpression left, AExpression right, AType type) { BinaryOperatorKind opKind = BinaryOperator.getOpByNameOrSymbol(op); - BinaryOperator opNode = CxxWeaver.getFactory().binaryOperator(opKind, (Type) type.getNode(), + BinaryOperator opNode = weaver.getFactory().binaryOperator(opKind, (Type) type.getNode(), (Expr) left.getNode(), (Expr) right.getNode()); - return CxxJoinpoints.create(opNode, ABinaryOp.class); + return CxxJoinpoints.create(opNode, weaver, ABinaryOp.class); } - public static ABinaryOp compoundAssignment(String op, AExpression lhs, AExpression rhs) { + public static ABinaryOp compoundAssignment(CxxWeaver weaver, String op, AExpression lhs, AExpression rhs) { var opKind = BinaryOperator.getOpByNameOrSymbol(op); var type = ((Expr) lhs.getNode()).getType(); - var opNode = CxxWeaver.getFactory().compoundAssignOperator(opKind, type, (Expr) lhs.getNode(), + var opNode = weaver.getFactory().compoundAssignOperator(opKind, type, (Expr) lhs.getNode(), (Expr) rhs.getNode()); - return CxxJoinpoints.create(opNode, ABinaryOp.class); + return CxxJoinpoints.create(opNode, weaver, ABinaryOp.class); } - public static AUnaryOp unaryOp(String op, AExpression expr, AType type) { + public static AUnaryOp unaryOp(CxxWeaver weaver, String op, AExpression expr, AType type) { UnaryOperatorKind opKind = UnaryOperator.getOpByNameOrSymbol(op); // If type is null, try to infer type from operator var typeNode = type != null ? (Type) type.getNode() - : Types.inferUnaryType(opKind, (Type) expr.getTypeImpl().getNode(), CxxWeaver.getFactory()); + : Types.inferUnaryType(opKind, (Type) expr.getTypeImpl().getNode(), weaver.getFactory()); - UnaryOperator opNode = CxxWeaver.getFactory().unaryOperator(opKind, typeNode, + UnaryOperator opNode = weaver.getFactory().unaryOperator(opKind, typeNode, (Expr) expr.getNode()); - return CxxJoinpoints.create(opNode, AUnaryOp.class); + return CxxJoinpoints.create(opNode, weaver, AUnaryOp.class); } - public static ATernaryOp ternaryOp(AExpression cond, AExpression trueExpr, AExpression falseExpr, AType type) { - ConditionalOperator opNode = CxxWeaver.getFactory().conditionalOperator( + public static ATernaryOp ternaryOp(CxxWeaver weaver, AExpression cond, AExpression trueExpr, AExpression falseExpr, AType type) { + ConditionalOperator opNode = weaver.getFactory().conditionalOperator( (Type) type.getNode(), (Expr) cond.getNode(), (Expr) trueExpr.getNode(), (Expr) falseExpr.getNode()); - return CxxJoinpoints.create(opNode, ATernaryOp.class); + return CxxJoinpoints.create(opNode, weaver, ATernaryOp.class); } - public static AExpression parenthesis(AExpression expression) { - ParenExpr parenExpr = CxxWeaver.getFactory().parenExpr((Expr) expression.getNode()); - return CxxJoinpoints.create(parenExpr, AExpression.class); + public static AExpression parenthesis(CxxWeaver weaver, AExpression expression) { + ParenExpr parenExpr = weaver.getFactory().parenExpr((Expr) expression.getNode()); + return CxxJoinpoints.create(parenExpr, weaver, AExpression.class); } - public static AArrayAccess arrayAccess(AExpression base, List subscripts) { + public static AArrayAccess arrayAccess(CxxWeaver weaver, AExpression base, List subscripts) { var subscriptsExpr = subscripts.stream() .map(arg -> ((Expr) arg.getNode())) .collect(Collectors.toList()); - var arraySubscriptExpr = CxxWeaver.getFactory().arraySubscriptExpr((Expr) base.getNode(), subscriptsExpr); - return CxxJoinpoints.create(arraySubscriptExpr, AArrayAccess.class); + var arraySubscriptExpr = weaver.getFactory().arraySubscriptExpr((Expr) base.getNode(), subscriptsExpr); + return CxxJoinpoints.create(arraySubscriptExpr, weaver, AArrayAccess.class); } - public static AArrayAccess arrayAccess(AExpression base, Object[] subscripts) { - return arrayAccess(base, SpecsCollections.asListT(AExpression.class, subscripts)); + public static AArrayAccess arrayAccess(CxxWeaver weaver, AExpression base, Object[] subscripts) { + return arrayAccess(weaver, base, SpecsCollections.asListT(AExpression.class, subscripts)); } - public static AInitList initList(List values) { + public static AInitList initList(CxxWeaver weaver, List values) { var valuesExpr = values.stream() .map(arg -> ((Expr) arg.getNode())) .collect(Collectors.toList()); - var initList = CxxWeaver.getFactory().initListExpr((valuesExpr)); - return CxxJoinpoints.create(initList, AInitList.class); + var initList = weaver.getFactory().initListExpr((valuesExpr)); + return CxxJoinpoints.create(initList, weaver, AInitList.class); } - public static AInitList initList(Object[] values) { - return initList(SpecsCollections.asListT(AExpression.class, values)); + public static AInitList initList(CxxWeaver weaver, Object[] values) { + return initList(weaver, SpecsCollections.asListT(AExpression.class, values)); } /** @@ -671,27 +669,27 @@ public static AInitList initList(Object[] values) { * @param joinpoint * @return */ - public static AType typedefType(ATypedefDecl typedefDecl) { - var typedefType = CxxWeaver.getFactory().typedefType((TypedefDecl) typedefDecl.getNode()); - return CxxJoinpoints.create(typedefType, AType.class); + public static AType typedefType(CxxWeaver weaver, ATypedefDecl typedefDecl) { + var typedefType = weaver.getFactory().typedefType((TypedefDecl) typedefDecl.getNode()); + return CxxJoinpoints.create(typedefType, weaver, AType.class); } - public static ATypedefDecl typedefDecl(AType underlyingType, String identifier) { - var typedefDecl = CxxWeaver.getFactory().typedefDecl((Type) underlyingType.getNode(), identifier); - return CxxJoinpoints.create(typedefDecl, ATypedefDecl.class); + public static ATypedefDecl typedefDecl(CxxWeaver weaver, AType underlyingType, String identifier) { + var typedefDecl = weaver.getFactory().typedefDecl((Type) underlyingType.getNode(), identifier); + return CxxJoinpoints.create(typedefDecl, weaver, ATypedefDecl.class); } - public static AElaboratedType structType(AStruct struct) { + public static AElaboratedType structType(CxxWeaver weaver, AStruct struct) { var namedType = (Type) struct.getTypeImpl().getNode(); - var elaboratedType = CxxWeaver.getFactory().elaboratedType(ElaboratedTypeKeyword.STRUCT, namedType); + var elaboratedType = weaver.getFactory().elaboratedType(ElaboratedTypeKeyword.STRUCT, namedType); - return CxxJoinpoints.create(elaboratedType, AElaboratedType.class); + return CxxJoinpoints.create(elaboratedType, weaver, AElaboratedType.class); } - public static ACast cStyleCast(AType type, AExpression expr) { - var cast = CxxWeaver.getFactory().cStyleCastExpr((Type) type.getNode(), (Expr) expr.getNode()); + public static ACast cStyleCast(CxxWeaver weaver, AType type, AExpression expr) { + var cast = weaver.getFactory().cStyleCastExpr((Type) type.getNode(), (Expr) expr.getNode()); - return CxxJoinpoints.create(cast, ACast.class); + return CxxJoinpoints.create(cast, weaver, ACast.class); } /** @@ -701,16 +699,16 @@ public static ACast cStyleCast(AType type, AExpression expr) { * @param joinpoint * @return */ - public static AClass classDecl(String className, List fields) { + public static AClass classDecl(CxxWeaver weaver, String className, List fields) { var fieldsNodes = fields.stream().map(field -> (FieldDecl) field.getNode()) .collect(Collectors.toList()); - var classDecl = CxxWeaver.getFactory().cxxRecordDecl(className, fieldsNodes); - return CxxJoinpoints.create(classDecl, AClass.class); + var classDecl = weaver.getFactory().cxxRecordDecl(className, fieldsNodes); + return CxxJoinpoints.create(classDecl, weaver, AClass.class); } - public static AClass classDecl(String className, Object... fields) { - return classDecl(className, SpecsCollections.asListT(AField.class, fields)); + public static AClass classDecl(CxxWeaver weaver, String className, Object... fields) { + return classDecl(weaver, className, SpecsCollections.asListT(AField.class, fields)); } /** @@ -720,9 +718,9 @@ public static AClass classDecl(String className, Object... fields) { * @param fieldType * @return */ - public static AField field(String fieldName, AType fieldType) { - var fieldDecl = CxxWeaver.getFactory().fieldDecl(fieldName, (Type) fieldType.getNode()); - return CxxJoinpoints.create(fieldDecl, AField.class); + public static AField field(CxxWeaver weaver, String fieldName, AType fieldType) { + var fieldDecl = weaver.getFactory().fieldDecl(fieldName, (Type) fieldType.getNode()); + return CxxJoinpoints.create(fieldDecl, weaver, AField.class); } /** @@ -732,39 +730,39 @@ public static AField field(String fieldName, AType fieldType) { * @param fieldType * @return */ - public static AAccessSpecifier accessSpecifier(String accessSpecifierString) { + public static AAccessSpecifier accessSpecifier(CxxWeaver weaver, String accessSpecifierString) { var accessSpecifier = SpecsEnums.fromName(AccessSpecifier.class, accessSpecifierString.toUpperCase()); - var accessSpecifierDecl = CxxWeaver.getFactory().accessSpecDecl(accessSpecifier); - return CxxJoinpoints.create(accessSpecifierDecl, AAccessSpecifier.class); + var accessSpecifierDecl = weaver.getFactory().accessSpecDecl(accessSpecifier); + return CxxJoinpoints.create(accessSpecifierDecl, weaver, AAccessSpecifier.class); } - public static ALoop forStmt(AStatement init, AStatement condition, AStatement inc, AStatement body) { + public static ALoop forStmt(CxxWeaver weaver, + AStatement init, AStatement condition, AStatement inc, AStatement body) { // If null, create NullStmt - var initStmt = init != null ? (Stmt) init.getNode() : CxxWeaver.getFactory().nullStmt(); - var condStmt = condition != null ? (Stmt) condition.getNode() : CxxWeaver.getFactory().nullStmt(); - var incStmt = inc != null ? (Stmt) inc.getNode() : CxxWeaver.getFactory().nullStmt(); - var bodyStmt = body != null ? (Stmt) body.getNode() : CxxWeaver.getFactory().nullStmt(); + var initStmt = init != null ? (Stmt) init.getNode() : weaver.getFactory().nullStmt(); + var condStmt = condition != null ? (Stmt) condition.getNode() : weaver.getFactory().nullStmt(); + var incStmt = inc != null ? (Stmt) inc.getNode() : weaver.getFactory().nullStmt(); + var bodyStmt = body != null ? (Stmt) body.getNode() : weaver.getFactory().nullStmt(); // If body is not a CompoundStmt, make it var compoundStmt = ClavaNodes.toCompoundStmt(bodyStmt); - var forStmt = CxxWeaver.getFactory().forStmt(initStmt, condStmt, incStmt, compoundStmt); + var forStmt = weaver.getFactory().forStmt(initStmt, condStmt, incStmt, compoundStmt); - return CxxJoinpoints.create(forStmt, ALoop.class); + return CxxJoinpoints.create(forStmt, weaver, ALoop.class); } - public static ALoop whileStmt(AStatement condition, AStatement body) { - var condStmt = condition != null ? (Stmt) condition.getNode() : CxxWeaver.getFactory().nullStmt(); - var bodyStmt = body != null ? (Stmt) body.getNode() : CxxWeaver.getFactory().nullStmt(); + public static ALoop whileStmt(CxxWeaver weaver, AStatement condition, AStatement body) { + var condStmt = condition != null ? (Stmt) condition.getNode() : weaver.getFactory().nullStmt(); + var bodyStmt = body != null ? (Stmt) body.getNode() : weaver.getFactory().nullStmt(); var compoundStmt = ClavaNodes.toCompoundStmt(bodyStmt); - var whileStmt = CxxWeaver.getFactory().whileStmt(condStmt, compoundStmt); - - return CxxJoinpoints.create(whileStmt, ALoop.class); + var whileStmt = weaver.getFactory().whileStmt(condStmt, compoundStmt); + return CxxJoinpoints.create(whileStmt, weaver, ALoop.class); } /** @@ -774,26 +772,26 @@ public static ALoop whileStmt(AStatement condition, AStatement body) { * @param type * @return */ - public static AParam param(String name, AType type) { - var param = CxxWeaver.getFactory().parmVarDecl(name, (Type) type.getNode()); - return CxxJoinpoints.create(param, AParam.class); + public static AParam param(CxxWeaver weaver, String name, AType type) { + var param = weaver.getFactory().parmVarDecl(name, (Type) type.getNode()); + return CxxJoinpoints.create(param, weaver, AParam.class); } - public static AComment comment(String text) { + public static AComment comment(CxxWeaver weaver, String text) { // TODO: Detect C standard, to detect if inline comments are supported? var lines = StringLines.getLines(text); - var comment = lines.size() < 2 ? CxxWeaver.getFactory().inlineComment(text, false) - : CxxWeaver.getFactory().multiLineComment(lines); + var comment = lines.size() < 2 ? weaver.getFactory().inlineComment(text, false) + : weaver.getFactory().multiLineComment(lines); - return CxxJoinpoints.create(comment, AComment.class); + return CxxJoinpoints.create(comment, weaver, AComment.class); } - public static AExprStmt exprStmt(AExpression expr) { - var exprStmt = CxxWeaver.getFactory().exprStmt((Expr) expr.getNode()); - return CxxJoinpoints.create(exprStmt, AExprStmt.class); + public static AExprStmt exprStmt(CxxWeaver weaver, AExpression expr) { + var exprStmt = weaver.getFactory().exprStmt((Expr) expr.getNode()); + return CxxJoinpoints.create(exprStmt, weaver, AExprStmt.class); } /** @@ -803,17 +801,16 @@ public static AExprStmt exprStmt(AExpression expr) { * @param joinpoint * @return */ - public static ADeclStmt declStmt(List decls) { + public static ADeclStmt declStmt(CxxWeaver weaver, List decls) { var declNodes = decls.stream().map(decl -> (Decl) decl.getNode()) .collect(Collectors.toList()); - var declStmt = CxxWeaver.getFactory().declStmt(declNodes); - - return CxxJoinpoints.create(declStmt, ADeclStmt.class); + var declStmt = weaver.getFactory().declStmt(declNodes); + return CxxJoinpoints.create(declStmt, weaver, ADeclStmt.class); } - public static ADeclStmt declStmt(Object... decls) { - return declStmt(SpecsCollections.asListT(ADecl.class, decls)); + public static ADeclStmt declStmt(CxxWeaver weaver, Object... decls) { + return declStmt(weaver, SpecsCollections.asListT(ADecl.class, decls)); } /** @@ -823,9 +820,9 @@ public static ADeclStmt declStmt(Object... decls) { * @param name Name of the label * @return The created label declaration */ - public static ALabelDecl labelDecl(String name) { - var decl = CxxWeaver.getFactory().labelDecl(name); - return CxxJoinpoints.create(decl, ALabelDecl.class); + public static ALabelDecl labelDecl(CxxWeaver weaver, String name) { + var decl = weaver.getFactory().labelDecl(name); + return CxxJoinpoints.create(decl, weaver, ALabelDecl.class); } /** @@ -834,9 +831,9 @@ public static ALabelDecl labelDecl(String name) { * @param decl The declaration for this statement * @return The label statement to be used in the code. */ - public static ALabelStmt labelStmt(ALabelDecl decl) { + public static ALabelStmt labelStmt(CxxWeaver weaver, ALabelDecl decl) { var stmt = decl.getFactory().labelStmt((LabelDecl) decl.getNode()); - return CxxJoinpoints.create(stmt, ALabelStmt.class); + return CxxJoinpoints.create(stmt, weaver, ALabelStmt.class); } /** @@ -845,8 +842,8 @@ public static ALabelStmt labelStmt(ALabelDecl decl) { * @param name Name of the label * @return The created */ - public static ALabelStmt labelStmt(String name) { - return labelStmt(labelDecl(name)); + public static ALabelStmt labelStmt(CxxWeaver weaver, String name) { + return labelStmt(weaver, labelDecl(weaver, name)); } /** @@ -855,42 +852,42 @@ public static ALabelStmt labelStmt(String name) { * @param label The declaration of the label to jump to * @return The created goto statement */ - public static AGotoStmt gotoStmt(ALabelDecl label) { + public static AGotoStmt gotoStmt(CxxWeaver weaver, ALabelDecl label) { var stmt = label.getFactory().gotoStmt((LabelDecl) label.getNode()); - return CxxJoinpoints.create(stmt, AGotoStmt.class); + return CxxJoinpoints.create(stmt, weaver, AGotoStmt.class); } - public static AEmptyStmt emptyStmt() { - var stmt = CxxWeaver.getFactory().emptyStmt(); - return CxxJoinpoints.create(stmt, AEmptyStmt.class); + public static AEmptyStmt emptyStmt(CxxWeaver weaver) { + var stmt = weaver.getFactory().emptyStmt(); + return CxxJoinpoints.create(stmt, weaver, AEmptyStmt.class); } - public static AProgram program() { - var app = CxxWeaver.getFactory().app(Collections.emptyList()); - return CxxJoinpoints.create(app, AProgram.class); + public static AProgram program(CxxWeaver weaver) { + var app = weaver.getFactory().app(Collections.emptyList()); + return CxxJoinpoints.create(app, weaver, AProgram.class); } - public static AMemberAccess memberAccess(AExpression baseExpr, AField field) { + public static AMemberAccess memberAccess(CxxWeaver weaver, AExpression baseExpr, AField field) { var fieldNode = (FieldDecl) field.getNode(); - var memberAccess = CxxWeaver.getFactory().memberExpr(fieldNode.get(FieldDecl.DECL_NAME), fieldNode.get(FieldDecl.TYPE), (Expr) baseExpr.getNode()); - return CxxJoinpoints.create(memberAccess, AMemberAccess.class); + var memberAccess = weaver.getFactory().memberExpr(fieldNode.get(FieldDecl.DECL_NAME), fieldNode.get(FieldDecl.TYPE), (Expr) baseExpr.getNode()); + return CxxJoinpoints.create(memberAccess, weaver, AMemberAccess.class); } - public static AMemberAccess memberAccess(AExpression baseExpr, String fieldName, AType fieldType) { - var memberAccess = CxxWeaver.getFactory().memberExpr(fieldName, (Type) fieldType.getNode(), (Expr) baseExpr.getNode()); - return CxxJoinpoints.create(memberAccess, AMemberAccess.class); + public static AMemberAccess memberAccess(CxxWeaver weaver, AExpression baseExpr, String fieldName, AType fieldType) { + var memberAccess = weaver.getFactory().memberExpr(fieldName, (Type) fieldType.getNode(), (Expr) baseExpr.getNode()); + return CxxJoinpoints.create(memberAccess, weaver, AMemberAccess.class); } - public static AUnaryExprOrType sizeof(AExpression exprArg) { - var sizeof = CxxWeaver.getFactory().sizeof((Expr) exprArg.getNode()); - return CxxJoinpoints.create(sizeof, AUnaryExprOrType.class); + public static AUnaryExprOrType sizeof(CxxWeaver weaver, AExpression exprArg) { + var sizeof = weaver.getFactory().sizeof((Expr) exprArg.getNode()); + return CxxJoinpoints.create(sizeof, weaver, AUnaryExprOrType.class); } - public static AUnaryExprOrType sizeof(AType typeArg) { - var sizeof = CxxWeaver.getFactory().sizeof((Type) typeArg.getNode()); - return CxxJoinpoints.create(sizeof, AUnaryExprOrType.class); + public static AUnaryExprOrType sizeof(CxxWeaver weaver, AType typeArg) { + var sizeof = weaver.getFactory().sizeof((Type) typeArg.getNode()); + return CxxJoinpoints.create(sizeof, weaver, AUnaryExprOrType.class); } } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CXXCudaKernelCall.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CXXCudaKernelCall.java index 516c4787a..ca6d8949d 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CXXCudaKernelCall.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CXXCudaKernelCall.java @@ -6,6 +6,7 @@ import pt.up.fe.specs.clava.ast.expr.CUDAKernelCallExpr; import pt.up.fe.specs.clava.ast.expr.Expr; import pt.up.fe.specs.clava.weaver.CxxJoinpoints; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ACudaKernelCall; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AExpression; import pt.up.fe.specs.clava.weaver.importable.AstFactory; @@ -15,8 +16,8 @@ public class CXXCudaKernelCall extends ACudaKernelCall { private final CUDAKernelCallExpr kernelCall; - public CXXCudaKernelCall(CUDAKernelCallExpr kernelCall) { - super(new CxxCall(kernelCall)); + public CXXCudaKernelCall(CUDAKernelCallExpr kernelCall, CxxWeaver weaver) { + super(new CxxCall(kernelCall, weaver), weaver); this.kernelCall = kernelCall; } @@ -28,7 +29,7 @@ public ClavaNode getNode() { @Override public AExpression[] getConfigArrayImpl() { - return CxxJoinpoints.create(kernelCall.getConfiguration(), AExpression.class); + return CxxJoinpoints.create(kernelCall.getConfiguration(), getWeaverEngine(), AExpression.class); } @Override @@ -39,7 +40,7 @@ public void setConfigImpl(AExpression[] args) { @Override public void setConfigFromStringsImpl(String[] args) { var exprArray = Arrays.stream(args) - .map(AstFactory::exprLiteral) + .map(arg -> AstFactory.exprLiteral(getWeaverEngine(), arg)) .toArray(size -> new AExpression[size]); setConfigImpl(exprArray); diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxAccessSpecifier.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxAccessSpecifier.java index 2cca06dad..1c3f6c8d1 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxAccessSpecifier.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxAccessSpecifier.java @@ -15,14 +15,15 @@ import pt.up.fe.specs.clava.ClavaNode; import pt.up.fe.specs.clava.ast.decl.AccessSpecDecl; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AAccessSpecifier; public class CxxAccessSpecifier extends AAccessSpecifier { private final AccessSpecDecl accessSpecifier; - public CxxAccessSpecifier(AccessSpecDecl accessSpecifier) { - super(new CxxDecl(accessSpecifier)); + public CxxAccessSpecifier(AccessSpecDecl accessSpecifier, CxxWeaver weaver) { + super(new CxxDecl(accessSpecifier, weaver), weaver); this.accessSpecifier = accessSpecifier; } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxArrayAccess.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxArrayAccess.java index bf6c25af6..77a118658 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxArrayAccess.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxArrayAccess.java @@ -17,6 +17,7 @@ import pt.up.fe.specs.clava.ast.expr.ArraySubscriptExpr; import pt.up.fe.specs.clava.utils.Nameable; import pt.up.fe.specs.clava.weaver.CxxJoinpoints; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AArrayAccess; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ADecl; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AExpression; @@ -27,8 +28,8 @@ public class CxxArrayAccess extends AArrayAccess { private final ArraySubscriptExpr arraySub; - public CxxArrayAccess(ArraySubscriptExpr arraySub) { - super(new CxxExpression(arraySub)); + public CxxArrayAccess(ArraySubscriptExpr arraySub, CxxWeaver weaver) { + super(new CxxExpression(arraySub, weaver), weaver); this.arraySub = arraySub; } @@ -39,13 +40,13 @@ public ClavaNode getNode() { @Override public AExpression getArrayVarImpl() { - return (AExpression) CxxJoinpoints.create(arraySub.getArrayExpr()); + return CxxJoinpoints.create(arraySub.getArrayExpr(), getWeaverEngine(), AExpression.class); } @Override public AExpression[] getSubscriptArrayImpl() { return arraySub.getSubscripts().stream() - .map(expr -> (AExpression) CxxJoinpoints.create(expr)) + .map(expr -> CxxJoinpoints.create(expr, getWeaverEngine(), AExpression.class)) .toArray(length -> new AExpression[length]); } @@ -69,7 +70,7 @@ public ADecl getDeclImpl() { @Override public AArrayAccess getParentAccessImpl() { return arraySub.getParentAccess() - .map(parentAccess -> CxxJoinpoints.create(parentAccess, AArrayAccess.class)) + .map(parentAccess -> CxxJoinpoints.create(parentAccess, getWeaverEngine(), AArrayAccess.class)) .orElse(null); } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxAsmStmt.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxAsmStmt.java index 4bd404ab9..9296ffe2c 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxAsmStmt.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxAsmStmt.java @@ -2,6 +2,7 @@ import pt.up.fe.specs.clava.ClavaNode; import pt.up.fe.specs.clava.ast.stmt.AsmStmt; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AAsmStmt; public class CxxAsmStmt extends AAsmStmt { @@ -11,8 +12,8 @@ public class CxxAsmStmt extends AAsmStmt { /** * @param asmStmt */ - public CxxAsmStmt(AsmStmt asmStmt) { - super(new CxxStatement(asmStmt)); + public CxxAsmStmt(AsmStmt asmStmt, CxxWeaver weaver) { + super(new CxxStatement(asmStmt, weaver), weaver); this.asmStmt = asmStmt; } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxAttribute.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxAttribute.java index 77d6d3ce8..630131e4a 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxAttribute.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxAttribute.java @@ -15,13 +15,15 @@ import pt.up.fe.specs.clava.ClavaNode; import pt.up.fe.specs.clava.ast.attr.Attribute; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AAttribute; public class CxxAttribute extends AAttribute { private final Attribute attr; - public CxxAttribute(Attribute attr) { + public CxxAttribute(Attribute attr, CxxWeaver weaver) { + super(weaver); this.attr = attr; } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxBinaryOp.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxBinaryOp.java index 4cc552ea8..3cfde8222 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxBinaryOp.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxBinaryOp.java @@ -22,6 +22,7 @@ import pt.up.fe.specs.clava.ast.expr.Expr; import pt.up.fe.specs.clava.ast.expr.enums.BinaryOperatorKind; import pt.up.fe.specs.clava.weaver.CxxJoinpoints; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ABinaryOp; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AExpression; @@ -29,8 +30,8 @@ public class CxxBinaryOp extends ABinaryOp { private final BinaryOperator op; - public CxxBinaryOp(BinaryOperator op) { - super(new CxxOp(op)); + public CxxBinaryOp(BinaryOperator op, CxxWeaver weaver) { + super(new CxxOp(op, weaver), weaver); this.op = op; } @@ -42,13 +43,15 @@ public ClavaNode getNode() { @Override public AExpression getLeftImpl() { - List left = Arrays.asList((AExpression) CxxJoinpoints.create(op.getLhs())); + List left = Arrays.asList((AExpression) CxxJoinpoints.create(op.getLhs(), + getWeaverEngine())); return left.isEmpty() ? null : left.get(0); } @Override public AExpression getRightImpl() { - List right = Arrays.asList((AExpression) CxxJoinpoints.create(op.getRhs())); + List right = Arrays.asList((AExpression) CxxJoinpoints.create(op.getRhs(), + getWeaverEngine())); return right.isEmpty() ? null : right.get(0); } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxBody.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxBody.java index 3bcdf85ac..8e20baa4a 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxBody.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxBody.java @@ -15,14 +15,15 @@ import pt.up.fe.specs.clava.ClavaNode; import pt.up.fe.specs.clava.ast.stmt.CompoundStmt; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ABody; public class CxxBody extends ABody { private final CompoundStmt scope; - public CxxBody(CompoundStmt scope) { - super(new CxxScope(scope)); + public CxxBody(CompoundStmt scope, CxxWeaver weaver) { + super(new CxxScope(scope, weaver), weaver); this.scope = scope; } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxBoolLiteral.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxBoolLiteral.java index 3a01c16fa..a67a32680 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxBoolLiteral.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxBoolLiteral.java @@ -15,14 +15,15 @@ import pt.up.fe.specs.clava.ClavaNode; import pt.up.fe.specs.clava.ast.expr.CXXBoolLiteralExpr; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ABoolLiteral; public class CxxBoolLiteral extends ABoolLiteral { private final CXXBoolLiteralExpr literal; - public CxxBoolLiteral(CXXBoolLiteralExpr literal) { - super(new CxxLiteral(literal)); + public CxxBoolLiteral(CXXBoolLiteralExpr literal, CxxWeaver weaver) { + super(new CxxLiteral(literal, weaver), weaver); this.literal = literal; } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxBreak.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxBreak.java index 93dacc410..11f3d5a15 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxBreak.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxBreak.java @@ -16,6 +16,7 @@ import pt.up.fe.specs.clava.ClavaNode; import pt.up.fe.specs.clava.ast.stmt.BreakStmt; import pt.up.fe.specs.clava.weaver.CxxJoinpoints; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ABreak; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AStatement; @@ -23,8 +24,8 @@ public class CxxBreak extends ABreak { private final BreakStmt breakStmt; - public CxxBreak(BreakStmt breakStmt) { - super(new CxxStatement(breakStmt)); + public CxxBreak(BreakStmt breakStmt, CxxWeaver weaver) { + super(new CxxStatement(breakStmt, weaver), weaver); this.breakStmt = breakStmt; } @@ -36,7 +37,7 @@ public ClavaNode getNode() { @Override public AStatement getEnclosingStmtImpl() { - return CxxJoinpoints.create(breakStmt.getEnclosingStmt(), AStatement.class); + return CxxJoinpoints.create(breakStmt.getEnclosingStmt(), getWeaverEngine(), AStatement.class); } } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxCall.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxCall.java index 8a0f90137..b535eef9b 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxCall.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxCall.java @@ -44,8 +44,8 @@ public class CxxCall extends ACall { private final CallExpr call; - public CxxCall(CallExpr call) { - super(new CxxExpression(call)); + public CxxCall(CallExpr call, CxxWeaver weaver) { + super(new CxxExpression(call, weaver), weaver); this.call = call; } @@ -102,13 +102,13 @@ public void extractImpl(String variableName, Boolean declareVariable) { // If assignment to already existing variable, use the following tree: // ExprStmt -> BinaryOperator -> DeclRefExpr, Call else { - Expr varExpr = CxxWeaver.getFactory().literalExpr(variableName, returnType); - BinaryOperator assign = CxxWeaver.getFactory().binaryOperator(BinaryOperatorKind.Assign, returnType, + Expr varExpr = getWeaverEngine().getFactory().literalExpr(variableName, returnType); + BinaryOperator assign = getWeaverEngine().getFactory().binaryOperator(BinaryOperatorKind.Assign, returnType, varExpr, call); // BinaryOperator assign = ClavaNodeFactory.binaryOperator(BinaryOperatorKind.ASSIGN, new // ExprData(returnType), // call.getInfo(), varExpr, call); - ExprStmt newStmt = CxxWeaver.getFactory().exprStmt(assign); + ExprStmt newStmt = getWeaverEngine().getFactory().exprStmt(assign); // Replace stmt NodeInsertUtils.replace(exprStmt, newStmt, true); @@ -124,7 +124,7 @@ public void extractImpl(String variableName, Boolean declareVariable) { @Override public AType getTypeImpl() { if (call instanceof CXXMemberCallExpr) { - return CxxJoinpoints.create(((CXXMemberCallExpr) call).getType(), AType.class); + return CxxJoinpoints.create(((CXXMemberCallExpr) call).getType(), getWeaverEngine(), AType.class); } // Return the type of the function (return type), after desugaring @@ -137,7 +137,7 @@ public AType getTypeImpl() { // } // System.out.println("CALLEE TYPE:" + calleeType); if (calleeType instanceof FunctionType) { - return CxxJoinpoints.create(((FunctionType) calleeType).getReturnType(), AType.class); + return CxxJoinpoints.create(((FunctionType) calleeType).getReturnType(), getWeaverEngine(), AType.class); } /* @@ -147,7 +147,7 @@ public AType getTypeImpl() { } */ - return CxxJoinpoints.create(calleeType, AType.class); + return CxxJoinpoints.create(calleeType, getWeaverEngine(), AType.class); } @Override @@ -163,7 +163,8 @@ public void setNameImpl(String name) { @Override public AFunction getDeclarationImpl() { return call.getPrototypes().stream() - .map(decl -> CxxJoinpoints.create(decl, AFunction.class)) + .map(decl -> CxxJoinpoints.create(decl, + getWeaverEngine(), AFunction.class)) .findFirst() .orElse(null); // return call.getFunctionDecl().map(FunctionDecl::getPrototypes) @@ -175,7 +176,7 @@ public AFunction getDeclarationImpl() { @Override public AFunction getDefinitionImpl() { - return call.getDefinition().map(decl -> (AFunction) CxxJoinpoints.create(decl)).orElse(null); + return call.getDefinition().map(decl -> CxxJoinpoints.create(decl, getWeaverEngine(), AFunction.class)).orElse(null); } @Override @@ -183,7 +184,7 @@ public AExpression[] getArgsArrayImpl() { return call.getArgs() .stream() // .map(Expr::getCode) - .map(arg -> (AExpression) CxxJoinpoints.create(arg)) + .map(arg -> CxxJoinpoints.create(arg, getWeaverEngine(), AExpression.class)) .collect(Collectors.toList()) .toArray(new AExpression[0]); } @@ -196,12 +197,12 @@ public AExpression[] getArgListArrayImpl() { @Override public AType getReturnTypeImpl() { - return (AType) CxxJoinpoints.create(call.getType()); + return CxxJoinpoints.create(call.getType(), getWeaverEngine(), AType.class); } @Override public void wrapImpl(String name) { - new CallWrap(this).addWrapper(name); + new CallWrap(getWeaverEngine(), this).addWrapper(name); } @Override @@ -221,8 +222,8 @@ public boolean inlineImpl() { public void setArgFromStringImpl(int index, String expr) { // Get arg of equivalent index, to extract type Expr arg = call.getArgs().get(index); - Expr literalExpr = CxxWeaver.getFactory().literalExpr(expr, arg.getExprType()); - setArgImpl(index, (AExpression) CxxJoinpoints.create(literalExpr)); + Expr literalExpr = getWeaverEngine().getFactory().literalExpr(expr, arg.getExprType()); + setArgImpl(index, CxxJoinpoints.create(literalExpr, getWeaverEngine(), AExpression.class)); } @Override @@ -230,7 +231,7 @@ public void addArgImpl(String arg, AType type) { Type processedType; if (type == null) { - processedType = CxxWeaver.getFactory().dummyType("from $call.addArg()"); + processedType = getWeaverEngine().getFactory().dummyType("from $call.addArg()"); } else { processedType = (Type) type.getNode(); } @@ -240,7 +241,7 @@ public void addArgImpl(String arg, AType type) { @Override public void addArgImpl(String arg, String type) { - call.addArgument(arg, CxxWeaver.getFactory().literalType(type)); + call.addArgument(arg, getWeaverEngine().getFactory().literalType(type)); } @Override @@ -260,7 +261,7 @@ public void setArgImpl(int index, AExpression expr) { public AExpression getArgImpl(int index) { call.checkIndex(index); Expr arg = call.getArgs().get(index); - return (AExpression) CxxJoinpoints.create(arg); + return CxxJoinpoints.create(arg, getWeaverEngine(), AExpression.class); } @@ -285,14 +286,14 @@ public AMemberAccess getMemberAccessImpl() { // MemberExpr memberExpr = ((CXXMemberCallExpr) call).getCallee(); - return CxxJoinpoints.create(memberExpr, AMemberAccess.class); + return CxxJoinpoints.create(memberExpr, getWeaverEngine(), AMemberAccess.class); } @Override public AFunctionType getFunctionTypeImpl() { return call.getFunctionType() - .map(type -> (AFunctionType) CxxJoinpoints.create(type)) + .map(type -> CxxJoinpoints.create(type, getWeaverEngine(), AFunctionType.class)) .orElse(null); // return (AType) CxxJoinpoints.create(call.getFunctionType(), this); @@ -340,14 +341,16 @@ public String getSignatureImpl() { @Override public AFunction getDeclImpl() { return call.getFunctionDecl() - .map(fDecl -> CxxJoinpoints.create(fDecl, AFunction.class)) + .map(fDecl -> CxxJoinpoints.create(fDecl, + getWeaverEngine(), AFunction.class)) .orElse(null); } @Override public AFunction getDirectCalleeImpl() { return call.get(CallExpr.DIRECT_CALLEE) - .map(callee -> CxxJoinpoints.create(callee, AFunction.class)) + .map(callee -> CxxJoinpoints.create(callee, + getWeaverEngine(), AFunction.class)) .orElse(null); } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxCase.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxCase.java index 5fb1a8f8e..df7c94bc4 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxCase.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxCase.java @@ -16,6 +16,7 @@ import pt.up.fe.specs.clava.ClavaNode; import pt.up.fe.specs.clava.ast.stmt.SwitchCase; import pt.up.fe.specs.clava.weaver.CxxJoinpoints; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ACase; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AExpression; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AStatement; @@ -24,8 +25,8 @@ public class CxxCase extends ACase { private final SwitchCase caseStmt; - public CxxCase(SwitchCase caseStmt) { - super(new CxxSwitchCase(caseStmt)); + public CxxCase(SwitchCase caseStmt, CxxWeaver weaver) { + super(new CxxSwitchCase(caseStmt, weaver), weaver); this.caseStmt = caseStmt; } @@ -51,22 +52,22 @@ public AStatement getNextInstructionImpl() { return null; } - return CxxJoinpoints.create(nextInst, AStatement.class); + return CxxJoinpoints.create(nextInst, getWeaverEngine(), AStatement.class); } @Override public AStatement[] getInstructionsArrayImpl() { - return CxxJoinpoints.create(caseStmt.getInstructions(), AStatement.class); + return CxxJoinpoints.create(caseStmt.getInstructions(), getWeaverEngine(), AStatement.class); } @Override public ACase getNextCaseImpl() { - return CxxJoinpoints.create(caseStmt.nextCase(), ACase.class); + return CxxJoinpoints.create(caseStmt.nextCase(), getWeaverEngine(), ACase.class); } @Override public AExpression[] getValuesArrayImpl() { - return CxxJoinpoints.create(caseStmt.getValues(), AExpression.class); + return CxxJoinpoints.create(caseStmt.getValues(), getWeaverEngine(), AExpression.class); } } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxCast.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxCast.java index 087dce3b0..bc4a3c52e 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxCast.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxCast.java @@ -17,6 +17,7 @@ import pt.up.fe.specs.clava.ast.expr.CastExpr; import pt.up.fe.specs.clava.ast.type.Type; import pt.up.fe.specs.clava.weaver.CxxJoinpoints; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ACast; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ADecl; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AExpression; @@ -27,8 +28,8 @@ public class CxxCast extends ACast { private final CastExpr cast; - public CxxCast(CastExpr cast) { - super(new CxxExpression(cast)); + public CxxCast(CastExpr cast, CxxWeaver weaver) { + super(new CxxExpression(cast, weaver), weaver); this.cast = cast; } @@ -47,17 +48,17 @@ public Boolean getIsImplicitCastImpl() { public AType getFromTypeImpl() { Type fromType = cast.getSubExpr().getType(); - return CxxJoinpoints.create(fromType, AType.class); + return CxxJoinpoints.create(fromType, getWeaverEngine(), AType.class); } @Override public AType getToTypeImpl() { - return CxxJoinpoints.create(cast.getCastType(), AType.class); + return CxxJoinpoints.create(cast.getCastType(), getWeaverEngine(), AType.class); } @Override public AVardecl getVardeclImpl() { - return ((AExpression) CxxJoinpoints.create(cast.getSubExpr())).getVardeclImpl(); + return CxxJoinpoints.create(cast.getSubExpr(), getWeaverEngine(), AExpression.class).getVardeclImpl(); } @Override @@ -67,7 +68,7 @@ public ADecl getDeclImpl() { @Override public AExpression getSubExprImpl() { - return (AExpression) CxxJoinpoints.create(cast.getSubExpr()); + return CxxJoinpoints.create(cast.getSubExpr(), getWeaverEngine(), AExpression.class); } } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxClass.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxClass.java index b8b79809f..e5febc5a7 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxClass.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxClass.java @@ -18,6 +18,7 @@ import pt.up.fe.specs.clava.ast.decl.CXXRecordDecl; import pt.up.fe.specs.clava.weaver.CxxJoinpoints; import pt.up.fe.specs.clava.weaver.CxxSelects; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AClass; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AMethod; @@ -25,8 +26,8 @@ public class CxxClass extends AClass { private final CXXRecordDecl cxxRecordDecl; - public CxxClass(CXXRecordDecl cxxRecordDecl) { - super(new CxxStruct(cxxRecordDecl)); + public CxxClass(CXXRecordDecl cxxRecordDecl, CxxWeaver weaver) { + super(new CxxStruct(cxxRecordDecl, weaver), weaver); this.cxxRecordDecl = cxxRecordDecl; } @@ -55,7 +56,7 @@ public ClavaNode getNode() { @Override public AMethod[] getMethodsArrayImpl() { - return CxxSelects.select(AMethod.class, cxxRecordDecl.getMethods(), false, node -> true).toArray(new AMethod[0]); + return CxxSelects.select(getWeaverEngine(), AMethod.class, cxxRecordDecl.getMethods(), false, node -> true).toArray(new AMethod[0]); } @Override @@ -67,7 +68,8 @@ public void addMethodImpl(AMethod method) { public AClass[] getBasesArrayImpl() { return cxxRecordDecl.getBases().stream() - .map(decl -> CxxJoinpoints.create(decl, AClass.class)) + .map(decl -> CxxJoinpoints.create(decl, + getWeaverEngine(), AClass.class)) // Collect to array .toArray(size -> new AClass[size]); @@ -80,12 +82,12 @@ public AClass[] getBasesArrayImpl() { @Override public AMethod[] getAllMethodsArrayImpl() { - return CxxJoinpoints.create(cxxRecordDecl.getAllMethods(false), AMethod.class); + return CxxJoinpoints.create(cxxRecordDecl.getAllMethods(false), getWeaverEngine(), AMethod.class); } @Override public AClass[] getAllBasesArrayImpl() { - return CxxJoinpoints.create(cxxRecordDecl.getAllBases(), AClass.class); + return CxxJoinpoints.create(cxxRecordDecl.getAllBases(), getWeaverEngine(), AClass.class); } @Override @@ -101,14 +103,16 @@ public Boolean getIsInterfaceImpl() { @Override public AClass[] getPrototypesArrayImpl() { return cxxRecordDecl.getDeclarations().stream() - .map(node -> CxxJoinpoints.create(node, AClass.class)) + .map(node -> CxxJoinpoints.create(node, + getWeaverEngine(), AClass.class)) .toArray(size -> new AClass[size]); } @Override public AClass getImplementationImpl() { return cxxRecordDecl.getDefinition() - .map(node -> CxxJoinpoints.create(node, AClass.class)) + .map(node -> CxxJoinpoints.create(node, + getWeaverEngine(), AClass.class)) .orElse(null); } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxClavaException.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxClavaException.java index ef5796081..c9fc1b57d 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxClavaException.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxClavaException.java @@ -14,13 +14,15 @@ package pt.up.fe.specs.clava.weaver.joinpoints; import pt.up.fe.specs.clava.ClavaNode; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AClavaException; public class CxxClavaException extends AClavaException { private final Throwable exception; - public CxxClavaException(Throwable exception) { + public CxxClavaException(Throwable exception, CxxWeaver weaver) { + super(weaver); this.exception = exception; } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxComment.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxComment.java index fccf70a8c..2ba2cea60 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxComment.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxComment.java @@ -15,13 +15,15 @@ import pt.up.fe.specs.clava.ClavaNode; import pt.up.fe.specs.clava.ast.comment.Comment; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AComment; public class CxxComment extends AComment { private final Comment comment; - public CxxComment(Comment comment) { + public CxxComment(Comment comment, CxxWeaver weaver) { + super(weaver); this.comment = comment; } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxContinue.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxContinue.java index 9e28c2247..32f73d42b 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxContinue.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxContinue.java @@ -15,14 +15,15 @@ import pt.up.fe.specs.clava.ClavaNode; import pt.up.fe.specs.clava.ast.stmt.ContinueStmt; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AContinue; public class CxxContinue extends AContinue { private final ContinueStmt continueStmt; - public CxxContinue(ContinueStmt continueStmt) { - super(new CxxStatement(continueStmt)); + public CxxContinue(ContinueStmt continueStmt, CxxWeaver weaver) { + super(new CxxStatement(continueStmt, weaver), weaver); this.continueStmt = continueStmt; } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxDecl.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxDecl.java index 5fc73015f..269af9c21 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxDecl.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxDecl.java @@ -15,6 +15,7 @@ import pt.up.fe.specs.clava.ClavaNode; import pt.up.fe.specs.clava.ast.decl.Decl; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AAttribute; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ADecl; @@ -22,7 +23,8 @@ public class CxxDecl extends ADecl { private final Decl decl; - public CxxDecl(Decl decl) { + public CxxDecl(Decl decl, CxxWeaver weaver) { + super(weaver); this.decl = decl; } @@ -34,7 +36,7 @@ public ClavaNode getNode() { @Override public AAttribute[] getAttrsArrayImpl() { return decl.get(Decl.ATTRIBUTES).stream() - .map(attr -> new CxxAttribute(attr)) + .map(attr -> new CxxAttribute(attr, getWeaverEngine())) .toArray(size -> new AAttribute[size]); } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxDeclStmt.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxDeclStmt.java index 7510e86d0..09d32ec1e 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxDeclStmt.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxDeclStmt.java @@ -16,6 +16,7 @@ import pt.up.fe.specs.clava.ClavaNode; import pt.up.fe.specs.clava.ast.stmt.DeclStmt; import pt.up.fe.specs.clava.weaver.CxxJoinpoints; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ADecl; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ADeclStmt; @@ -23,8 +24,8 @@ public class CxxDeclStmt extends ADeclStmt { private final DeclStmt declStmt; - public CxxDeclStmt(DeclStmt declStmt) { - super(new CxxStatement(declStmt)); + public CxxDeclStmt(DeclStmt declStmt, CxxWeaver weaver) { + super(new CxxStatement(declStmt, weaver), weaver); this.declStmt = declStmt; } @@ -35,7 +36,7 @@ public ClavaNode getNode() { @Override public ADecl[] getDeclsArrayImpl() { - return CxxJoinpoints.create(declStmt.getDecls(), ADecl.class); + return CxxJoinpoints.create(declStmt.getDecls(), getWeaverEngine(), ADecl.class); } } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxDeclarator.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxDeclarator.java index aa3b2ebfb..ae1874df1 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxDeclarator.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxDeclarator.java @@ -15,14 +15,15 @@ import pt.up.fe.specs.clava.ClavaNode; import pt.up.fe.specs.clava.ast.decl.DeclaratorDecl; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ADeclarator; public class CxxDeclarator extends ADeclarator { private final DeclaratorDecl declaratorDecl; - public CxxDeclarator(DeclaratorDecl declaratorDecl) { - super(new CxxNamedDecl(declaratorDecl)); + public CxxDeclarator(DeclaratorDecl declaratorDecl, CxxWeaver weaver) { + super(new CxxNamedDecl(declaratorDecl, weaver), weaver); this.declaratorDecl = declaratorDecl; } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxDefault.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxDefault.java index 54ff9f24e..6a7d6872e 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxDefault.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxDefault.java @@ -2,14 +2,15 @@ import pt.up.fe.specs.clava.ClavaNode; import pt.up.fe.specs.clava.ast.stmt.DefaultStmt; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ADefault; public class CxxDefault extends ADefault { private final DefaultStmt defaultStmt; - public CxxDefault(DefaultStmt defaultStmt) { - super(new CxxSwitchCase(defaultStmt)); + public CxxDefault(DefaultStmt defaultStmt, CxxWeaver weaver) { + super(new CxxSwitchCase(defaultStmt, weaver), weaver); this.defaultStmt = defaultStmt; } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxDeleteExpr.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxDeleteExpr.java index 8e014d79d..f189fa1e5 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxDeleteExpr.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxDeleteExpr.java @@ -15,14 +15,15 @@ import pt.up.fe.specs.clava.ClavaNode; import pt.up.fe.specs.clava.ast.expr.CXXDeleteExpr; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ADeleteExpr; public class CxxDeleteExpr extends ADeleteExpr { private final CXXDeleteExpr deleteExpr; - public CxxDeleteExpr(CXXDeleteExpr deleteExpr) { - super(new CxxExpression(deleteExpr)); + public CxxDeleteExpr(CXXDeleteExpr deleteExpr, CxxWeaver weaver) { + super(new CxxExpression(deleteExpr, weaver), weaver); this.deleteExpr = deleteExpr; } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxEmpty.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxEmpty.java index dde224f89..882ff0e8f 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxEmpty.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxEmpty.java @@ -14,13 +14,15 @@ package pt.up.fe.specs.clava.weaver.joinpoints; import pt.up.fe.specs.clava.ClavaNode; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AEmpty; public class CxxEmpty extends AEmpty { private final ClavaNode emptyNode; - public CxxEmpty(ClavaNode emptyNode) { + public CxxEmpty(ClavaNode emptyNode, CxxWeaver weaver) { + super(weaver); this.emptyNode = emptyNode; } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxEmptyStmt.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxEmptyStmt.java index 9d64746fb..bed95388b 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxEmptyStmt.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxEmptyStmt.java @@ -15,14 +15,15 @@ import pt.up.fe.specs.clava.ClavaNode; import pt.up.fe.specs.clava.ast.stmt.EmptyStmt; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AEmptyStmt; public class CxxEmptyStmt extends AEmptyStmt { private final EmptyStmt emptyStmt; - public CxxEmptyStmt(EmptyStmt emptyStmt) { - super(new CxxStatement(emptyStmt)); + public CxxEmptyStmt(EmptyStmt emptyStmt, CxxWeaver weaver) { + super(new CxxStatement(emptyStmt, weaver), weaver); this.emptyStmt = emptyStmt; } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxEnumDecl.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxEnumDecl.java index 3032aba41..fc544b4fb 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxEnumDecl.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxEnumDecl.java @@ -17,6 +17,7 @@ import pt.up.fe.specs.clava.ast.decl.EnumConstantDecl; import pt.up.fe.specs.clava.ast.decl.EnumDecl; import pt.up.fe.specs.clava.weaver.CxxSelects; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AEnumDecl; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AEnumeratorDecl; @@ -24,8 +25,8 @@ public class CxxEnumDecl extends AEnumDecl { private final EnumDecl enumDecl; - public CxxEnumDecl(EnumDecl enumDecl) { - super(new CxxNamedDecl(enumDecl)); + public CxxEnumDecl(EnumDecl enumDecl, CxxWeaver weaver) { + super(new CxxNamedDecl(enumDecl, weaver), weaver); this.enumDecl = enumDecl; } @@ -36,7 +37,7 @@ public ClavaNode getNode() { @Override public AEnumeratorDecl[] getEnumeratorsArrayImpl() { - return CxxSelects.select(AEnumeratorDecl.class, enumDecl.getChildren(), false, EnumConstantDecl.class).toArray(new AEnumeratorDecl[0]); + return CxxSelects.select(getWeaverEngine(), AEnumeratorDecl.class, enumDecl.getChildren(), false, EnumConstantDecl.class).toArray(new AEnumeratorDecl[0]); } } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxEnumeratorDecl.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxEnumeratorDecl.java index da5c19af0..0b048e1b5 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxEnumeratorDecl.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxEnumeratorDecl.java @@ -15,14 +15,15 @@ import pt.up.fe.specs.clava.ClavaNode; import pt.up.fe.specs.clava.ast.decl.EnumConstantDecl; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AEnumeratorDecl; public class CxxEnumeratorDecl extends AEnumeratorDecl { private final EnumConstantDecl enumConstantDecl; - public CxxEnumeratorDecl(EnumConstantDecl enumDecl) { - super(new CxxNamedDecl(enumDecl)); + public CxxEnumeratorDecl(EnumConstantDecl enumDecl, CxxWeaver weaver) { + super(new CxxNamedDecl(enumDecl, weaver), weaver); this.enumConstantDecl = enumDecl; } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxExprStmt.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxExprStmt.java index f6e4f7536..2a5d03ef2 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxExprStmt.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxExprStmt.java @@ -16,6 +16,7 @@ import pt.up.fe.specs.clava.ClavaNode; import pt.up.fe.specs.clava.ast.stmt.ExprStmt; import pt.up.fe.specs.clava.weaver.CxxJoinpoints; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AExprStmt; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AExpression; @@ -23,8 +24,8 @@ public class CxxExprStmt extends AExprStmt { private final ExprStmt exprStmt; - public CxxExprStmt(ExprStmt exprStmt) { - super(new CxxStatement(exprStmt)); + public CxxExprStmt(ExprStmt exprStmt, CxxWeaver weaver) { + super(new CxxStatement(exprStmt, weaver), weaver); this.exprStmt = exprStmt; } @@ -36,7 +37,7 @@ public ClavaNode getNode() { @Override public AExpression getExprImpl() { - return CxxJoinpoints.create(exprStmt.getExpr(), AExpression.class); + return CxxJoinpoints.create(exprStmt.getExpr(), getWeaverEngine(), AExpression.class); } } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxExpression.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxExpression.java index 168fcb401..4bb7b4e53 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxExpression.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxExpression.java @@ -18,6 +18,7 @@ import pt.up.fe.specs.clava.ast.stmt.ExprStmt; import pt.up.fe.specs.clava.weaver.CxxAttributes; import pt.up.fe.specs.clava.weaver.CxxJoinpoints; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.*; import java.util.Arrays; @@ -28,7 +29,8 @@ public class CxxExpression extends AExpression { private final Expr expr; - public CxxExpression(Expr expr) { + public CxxExpression(Expr expr, CxxWeaver weaver) { + super(weaver); this.expr = expr; } @@ -114,14 +116,16 @@ public ACast getImplicitCastImpl() { // expr.hasValue(key) return expr.getImplicitCast() - .map(castExpr -> CxxJoinpoints.create(castExpr, ACast.class)) + .map(castExpr -> CxxJoinpoints.create(castExpr, + getWeaverEngine(), ACast.class)) .orElse(null); } @Override public ADecl getDeclImpl() { return expr.getDecl() - .map(decl -> CxxJoinpoints.create(decl, ADecl.class)) + .map(decl -> CxxJoinpoints.create(decl, + getWeaverEngine(), ADecl.class)) .orElse(null); } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxField.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxField.java index f8fe941aa..a6ad283a9 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxField.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxField.java @@ -15,14 +15,15 @@ import pt.up.fe.specs.clava.ClavaNode; import pt.up.fe.specs.clava.ast.decl.FieldDecl; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AField; public class CxxField extends AField { private final FieldDecl field; - public CxxField(FieldDecl field) { - super(new CxxDeclarator(field)); + public CxxField(FieldDecl field, CxxWeaver weaver) { + super(new CxxDeclarator(field, weaver), weaver); this.field = field; } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxFile.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxFile.java index 2cf7983c5..1250f7316 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxFile.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxFile.java @@ -45,7 +45,8 @@ public class CxxFile extends AFile { private final TranslationUnit tunit; - public CxxFile(TranslationUnit tunit) { + public CxxFile(TranslationUnit tunit, CxxWeaver weaver) { + super(weaver); this.tunit = tunit; } @@ -98,9 +99,9 @@ public void addCIncludeImpl(String name, boolean isAngled) { @Override public AJoinPoint[] insertImpl(String position, String code) { - var tentativeNode = CxxWeaver.getSnippetParser().parseStmt(code); + var tentativeNode = getWeaverEngine().getSnippetParser().parseStmt(code); ClavaNode nodeToInsert = tentativeNode instanceof WrapperStmt ? tentativeNode.getChild(0) - : CxxWeaver.getFactory().literalDecl(code); + : getWeaverEngine().getFactory().literalDecl(code); return CxxActions.insertAsChild(position, getNode(), nodeToInsert, getWeaverEngine()); } @@ -206,11 +207,11 @@ public AVardecl addGlobalImpl(String name, AJoinPoint type, String initValue) { } Type typeNode = (Type) type.getNode(); - LiteralExpr literalExpr = CxxWeaver.getFactory().literalExpr(initValue, typeNode); + LiteralExpr literalExpr = getWeaverEngine().getFactory().literalExpr(initValue, typeNode); VarDecl global = tunit.getApp().getGlobalManager().addGlobal(tunit, name, typeNode, literalExpr); - return CxxJoinpoints.create(global, AVardecl.class); + return CxxJoinpoints.create(global, getWeaverEngine(), AVardecl.class); } @Override @@ -225,7 +226,7 @@ public void insertBeginImpl(AJoinPoint node) { @Override public void insertBeginImpl(String code) { - insertBeginImpl(AstFactory.declLiteral(code)); + insertBeginImpl(AstFactory.declLiteral(getWeaverEngine(),code)); } @Override @@ -240,12 +241,12 @@ public void insertEndImpl(AJoinPoint node) { @Override public void insertEndImpl(String code) { - insertEndImpl(AstFactory.declLiteral(code)); + insertEndImpl(AstFactory.declLiteral(getWeaverEngine(), code)); } @Override public AJoinPoint addFunctionImpl(String name) { - CxxFunction function = AstFactory.functionVoid(name); + CxxFunction function = AstFactory.functionVoid(getWeaverEngine(), name); // Add function to the tree tunit.addChild(function.getNode()); @@ -279,7 +280,7 @@ public Boolean getIsOpenCLImpl() { @Override public AInclude[] getIncludesArrayImpl() { - return CxxSelects.select(AInclude.class, tunit.getChildren(), false, IncludeDecl.class).toArray(size -> new AInclude[size]); + return CxxSelects.select(getWeaverEngine(), AInclude.class, tunit.getChildren(), false, IncludeDecl.class).toArray(size -> new AInclude[size]); } @Override @@ -306,7 +307,7 @@ public String getDestinationFilepathImpl(String destinationFolderpath) { public AFile rebuildImpl() { TranslationUnit rebuiltTunit = getWeaverEngine().rebuildFile(tunit); - AFile rebuiltFile = CxxJoinpoints.create(rebuiltTunit, AFile.class); + AFile rebuiltFile = CxxJoinpoints.create(rebuiltTunit, getWeaverEngine(), AFile.class); replaceWith(rebuiltFile); return rebuiltFile; } @@ -317,7 +318,7 @@ public AJoinPoint rebuildTryImpl() { return rebuildImpl(); } catch (Exception e) { System.out.println("EXCEPTION: " + e); - return new CxxClavaException(e); + return new CxxClavaException(e, getWeaverEngine()); } } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxFloatLiteral.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxFloatLiteral.java index 1c98a0400..0905a7eb1 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxFloatLiteral.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxFloatLiteral.java @@ -15,14 +15,15 @@ import pt.up.fe.specs.clava.ClavaNode; import pt.up.fe.specs.clava.ast.expr.FloatingLiteral; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AFloatLiteral; public class CxxFloatLiteral extends AFloatLiteral { private final FloatingLiteral literal; - public CxxFloatLiteral(FloatingLiteral literal) { - super(new CxxLiteral(literal)); + public CxxFloatLiteral(FloatingLiteral literal, CxxWeaver weaver) { + super(new CxxLiteral(literal, weaver), weaver); this.literal = literal; } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxFunction.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxFunction.java index 519742eaf..6e76ffc89 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxFunction.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxFunction.java @@ -45,8 +45,8 @@ public class CxxFunction extends AFunction { private final FunctionDecl function; - public CxxFunction(FunctionDecl function) { - super(new CxxDeclarator(function)); + public CxxFunction(FunctionDecl function, CxxWeaver weaver) { + super(new CxxDeclarator(function, weaver), weaver); this.function = function; } @@ -57,17 +57,17 @@ public FunctionDecl getNode() { @Override public AType getTypeImpl() { - return CxxJoinpoints.create(function.getReturnType(), AType.class); + return CxxJoinpoints.create(function.getReturnType(), getWeaverEngine(), AType.class); } @Override public AFunctionType getFunctionTypeImpl() { - return CxxJoinpoints.create(function.getFunctionType(), AFunctionType.class); + return CxxJoinpoints.create(function.getFunctionType(), getWeaverEngine(), AFunctionType.class); } @Override public ACall newCallImpl(AJoinPoint[] args) { - return AstFactory.callFromFunction(this, SpecsCollections.asListT(AJoinPoint.class, (Object[]) args)); + return AstFactory.callFromFunction(getWeaverEngine(), this, SpecsCollections.asListT(AJoinPoint.class, (Object[]) args)); } @Override @@ -91,7 +91,7 @@ private AJoinPoint processNodeToInsert(AJoinPoint node) { var clavaNode = node.getNode(); if (clavaNode instanceof VarDecl || clavaNode instanceof Expr) { - return CxxJoinpoints.create(ClavaNodes.toStmt(clavaNode)); + return CxxJoinpoints.create(ClavaNodes.toStmt(clavaNode), getWeaverEngine()); } // Otherwise, do nothing @@ -101,7 +101,7 @@ private AJoinPoint processNodeToInsert(AJoinPoint node) { @Override public AJoinPoint[] insertImpl(String position, String code) { // Stmt literalStmt = ClavaNodeFactory.literalStmt(code); - Stmt literalStmt = CxxWeaver.getSnippetParser().parseStmt(code); + Stmt literalStmt = getWeaverEngine().getSnippetParser().parseStmt(code); return insertStmt(literalStmt, position); } @@ -113,7 +113,8 @@ public AJoinPoint insertAfterImpl(AJoinPoint node) { @Override public AJoinPoint insertAfterImpl(String code) { - return insertAfterImpl(CxxJoinpoints.create(CxxWeaver.getSnippetParser().parseStmt(code))); + return insertAfterImpl(CxxJoinpoints.create(getWeaverEngine().getSnippetParser().parseStmt(code), + getWeaverEngine())); } @Override @@ -124,7 +125,8 @@ public AJoinPoint insertBeforeImpl(AJoinPoint node) { @Override public AJoinPoint insertBeforeImpl(String code) { - return insertBeforeImpl(CxxJoinpoints.create(CxxWeaver.getSnippetParser().parseStmt(code))); + return insertBeforeImpl(CxxJoinpoints.create(getWeaverEngine().getSnippetParser().parseStmt(code), + getWeaverEngine())); } @Override @@ -146,7 +148,7 @@ private AJoinPoint[] insertStmt(Stmt newNode, String position) { case "around": case "replace": NodeInsertUtils.replace(function, newNode); - return new AJoinPoint[]{CxxJoinpoints.create(newNode)}; + return new AJoinPoint[]{CxxJoinpoints.create(newNode, getWeaverEngine())}; default: throw new RuntimeException("Case not defined:" + position); } @@ -163,7 +165,7 @@ public ABody getBodyImpl() { return null; } - return (ABody) CxxJoinpoints.create(function.getBody().get()); + return CxxJoinpoints.create(function.getBody().get(), getWeaverEngine(), ABody.class); } @Override @@ -184,7 +186,7 @@ private AFunction makeCloneAndInsert(String newName, ClavaNode reference, boolea "The node (" + reference + ") needs to be either a FuncDecl or a TranslationUnit."); } - return CxxJoinpoints.create(newFunc, AFunction.class); + return CxxJoinpoints.create(newFunc, getWeaverEngine(), AFunction.class); } @Override @@ -208,14 +210,14 @@ public AFunction cloneOnFileImpl(String newName, String fileName) { .findFirst(); if (existingFile.isPresent()) { - return cloneOnFileImpl(newName, new CxxFile(existingFile.get())); + return cloneOnFileImpl(newName, new CxxFile(existingFile.get(), getWeaverEngine())); } // Extract relative path var relativePath = currentFile.getParentFile() != null ? currentFile.getParent() : null; // Create a new file - var newFile = AstFactory.file(fileName, relativePath); + var newFile = AstFactory.file(getWeaverEngine(), fileName, relativePath); // Set same source foldername var originalFile = function.getAncestorTry(TranslationUnit.class).orElse(null); @@ -321,14 +323,16 @@ public String[] getParamNamesArrayImpl() { public AParam[] getParamsArrayImpl() { return function.getParameters() .stream() - .map(param -> CxxJoinpoints.create(param, AParam.class)) + .map(param -> CxxJoinpoints.create(param, + getWeaverEngine(), AParam.class)) .collect(Collectors.toList()) .toArray(new AParam[0]); } @Override public AJoinPoint insertReturnImpl(String code) { - return insertReturnImpl(CxxJoinpoints.create(CxxWeaver.getSnippetParser().parseStmt(code))); + return insertReturnImpl(CxxJoinpoints.create(getWeaverEngine().getSnippetParser().parseStmt(code), + getWeaverEngine())); } @Override @@ -342,7 +346,7 @@ public AJoinPoint insertReturnImpl(AJoinPoint code) { return null; } - return CxxActions.insertReturn(getBodyImpl(), code); + return CxxActions.insertReturn(getBodyImpl(), code, getWeaverEngine()); // // List bodyStmts = function.getBody().get().toStatements(); @@ -391,7 +395,7 @@ public String getIdImpl() { @Override public AFunction[] getDeclarationJpsArrayImpl() { return function.getPrototypes().stream() - .map(node -> CxxJoinpoints.create(node, AFunction.class)) + .map(node -> CxxJoinpoints.create(node, getWeaverEngine(), AFunction.class)) .toArray(size -> new AFunction[size]); } @@ -414,7 +418,7 @@ public AFunction getDeclarationJpImpl() { @Override public AFunction getDefinitionJpImpl() { return function.getImplementation() - .map(node -> CxxJoinpoints.create(node, AFunction.class)) + .map(node -> CxxJoinpoints.create(node, getWeaverEngine(), AFunction.class)) .orElse(null); } @@ -480,7 +484,7 @@ public Boolean getIsDeleteImpl() { @Override public ACall[] getCallsArrayImpl() { return function.getCalls().stream() - .map(call -> CxxJoinpoints.create(call, ACall.class)) + .map(call -> CxxJoinpoints.create(call, getWeaverEngine(), ACall.class)) .toArray(ACall[]::new); } @@ -504,7 +508,7 @@ public void setParamsFromStringsImpl(String[] params) { var parmVarDecl = ClavaNodes.toParam(typeVarname, function); - newParams[i] = CxxJoinpoints.create(parmVarDecl, AParam.class); + newParams[i] = CxxJoinpoints.create(parmVarDecl, getWeaverEngine(), AParam.class); } setParamsImpl(newParams); @@ -527,7 +531,7 @@ public void setFunctionTypeImpl(AFunctionType functionType) { @Override public AType getReturnTypeImpl() { - return CxxJoinpoints.create(function.getReturnType(), AType.class); + return CxxJoinpoints.create(function.getReturnType(), getWeaverEngine(), AType.class); } @Override @@ -558,7 +562,7 @@ public void addParamImpl(String name, AType type) { } else { paramNode = getFactory().parmVarDecl(name, (Type) type.getNode()); } - addParamImpl(CxxJoinpoints.create(paramNode, AParam.class)); + addParamImpl(CxxJoinpoints.create(paramNode, getWeaverEngine(), AParam.class)); } @Override @@ -586,7 +590,7 @@ public void setParamImpl(int index, String name, AType type) { paramNode = getFactory().parmVarDecl(name, (Type) type.getNode()); } - setParamImpl(index, CxxJoinpoints.create(paramNode, AParam.class)); + setParamImpl(index, CxxJoinpoints.create(paramNode, getWeaverEngine(), AParam.class)); } @Override @@ -599,7 +603,7 @@ public Boolean getIsCudaKernelImpl() { @Override public AFunction getCanonicalImpl() { - return CxxJoinpoints.create(function.canonical(), AFunction.class); + return CxxJoinpoints.create(function.canonical(), getWeaverEngine(), AFunction.class); } @Override diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxGotoStmt.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxGotoStmt.java index 37f41427c..b6e191a33 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxGotoStmt.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxGotoStmt.java @@ -17,6 +17,7 @@ import pt.up.fe.specs.clava.ast.decl.LabelDecl; import pt.up.fe.specs.clava.ast.stmt.GotoStmt; import pt.up.fe.specs.clava.weaver.CxxJoinpoints; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AGotoStmt; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ALabelDecl; @@ -24,8 +25,8 @@ public class CxxGotoStmt extends AGotoStmt { private final GotoStmt gotoStmt; - public CxxGotoStmt(GotoStmt gotoStmt) { - super(new CxxStatement(gotoStmt)); + public CxxGotoStmt(GotoStmt gotoStmt, CxxWeaver weaver) { + super(new CxxStatement(gotoStmt, weaver), weaver); this.gotoStmt = gotoStmt; } @@ -42,7 +43,7 @@ public void setLabelImpl(ALabelDecl label) { @Override public ALabelDecl getLabelImpl() { - return CxxJoinpoints.create(gotoStmt.getLabel(), ALabelDecl.class); + return CxxJoinpoints.create(gotoStmt.getLabel(), getWeaverEngine(), ALabelDecl.class); } } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxIf.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxIf.java index 480427ab9..a632ca3bc 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxIf.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxIf.java @@ -23,6 +23,7 @@ import pt.up.fe.specs.clava.ast.stmt.IfStmt; import pt.up.fe.specs.clava.ast.stmt.Stmt; import pt.up.fe.specs.clava.weaver.CxxJoinpoints; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AExpression; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AIf; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AScope; @@ -34,8 +35,8 @@ public class CxxIf extends AIf { private final IfStmt ifStmt; - public CxxIf(IfStmt ifStmt) { - super(new CxxStatement(ifStmt)); + public CxxIf(IfStmt ifStmt, CxxWeaver weaver) { + super(new CxxStatement(ifStmt, weaver), weaver); this.ifStmt = ifStmt; } @@ -49,7 +50,7 @@ public AExpression getCondImpl() { List list = Collections.emptyList(); if ((ifStmt.getCondition() instanceof Expr)) { - list = Arrays.asList(CxxJoinpoints.create(ifStmt.getCondition(), AExpression.class)); + list = Arrays.asList(CxxJoinpoints.create(ifStmt.getCondition(), getWeaverEngine(), AExpression.class)); } return SpecsCollections.orElseNull(list); @@ -58,20 +59,22 @@ public AExpression getCondImpl() { @Override public AVardecl getCondDeclImpl() { return SpecsCollections.orElseNull(SpecsCollections.toList(ifStmt.getDeclCondition() - .map(varDecl -> CxxJoinpoints.create(varDecl, AVardecl.class)))); + .map(varDecl -> CxxJoinpoints.create(varDecl, getWeaverEngine(), AVardecl.class)))); } @Override public AScope getThenImpl() { return SpecsCollections.orElseNull( - ifStmt.getThen().map(then -> Arrays.asList(CxxJoinpoints.create(then, AScope.class))) + ifStmt.getThen().map(then -> Arrays.asList(CxxJoinpoints.create(then, + getWeaverEngine(), AScope.class))) .orElse(Collections.emptyList())); } @Override public AScope getElseImpl() { return SpecsCollections.orElseNull(SpecsCollections.toStream(ifStmt.getElse()) - .map(stmt -> CxxJoinpoints.create(stmt, AScope.class)) + .map(stmt -> CxxJoinpoints.create(stmt, + getWeaverEngine(), AScope.class)) .collect(Collectors.toList())); } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxImplicitValue.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxImplicitValue.java index 39c3cb937..894262552 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxImplicitValue.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxImplicitValue.java @@ -15,14 +15,15 @@ import pt.up.fe.specs.clava.ClavaNode; import pt.up.fe.specs.clava.ast.expr.ImplicitValueInitExpr; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AImplicitValue; public class CxxImplicitValue extends AImplicitValue { private final ImplicitValueInitExpr implicitValue; - public CxxImplicitValue(ImplicitValueInitExpr implicitValue) { - super(new CxxExpression(implicitValue)); + public CxxImplicitValue(ImplicitValueInitExpr implicitValue, CxxWeaver weaver) { + super(new CxxExpression(implicitValue, weaver), weaver); this.implicitValue = implicitValue; } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxInclude.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxInclude.java index 89e7aa629..b150bb462 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxInclude.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxInclude.java @@ -15,14 +15,15 @@ import pt.up.fe.specs.clava.ClavaNode; import pt.up.fe.specs.clava.ast.decl.IncludeDecl; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AInclude; public class CxxInclude extends AInclude { private final IncludeDecl include; - public CxxInclude(IncludeDecl include) { - super(new CxxDecl(include)); + public CxxInclude(IncludeDecl include, CxxWeaver weaver) { + super(new CxxDecl(include, weaver), weaver); this.include = include; } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxInitList.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxInitList.java index 8c76c33c4..aa82d9214 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxInitList.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxInitList.java @@ -16,6 +16,7 @@ import pt.up.fe.specs.clava.ClavaNode; import pt.up.fe.specs.clava.ast.expr.InitListExpr; import pt.up.fe.specs.clava.weaver.CxxJoinpoints; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AExpression; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AInitList; @@ -23,8 +24,8 @@ public class CxxInitList extends AInitList { private final InitListExpr initList; - public CxxInitList(InitListExpr initList) { - super(new CxxExpression(initList)); + public CxxInitList(InitListExpr initList, CxxWeaver weaver) { + super(new CxxExpression(initList, weaver), weaver); this.initList = initList; } @@ -37,7 +38,8 @@ public ClavaNode getNode() { @Override public AExpression getArrayFillerImpl() { return initList.get(InitListExpr.ARRAY_FILLER) - .map(n -> CxxJoinpoints.create(n, AExpression.class)) + .map(n -> CxxJoinpoints.create(n, + getWeaverEngine(), AExpression.class)) .orElse(null); } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxIntLiteral.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxIntLiteral.java index 4a17e8692..6d9d6bc25 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxIntLiteral.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxIntLiteral.java @@ -15,14 +15,15 @@ import pt.up.fe.specs.clava.ClavaNode; import pt.up.fe.specs.clava.ast.expr.IntegerLiteral; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AIntLiteral; public class CxxIntLiteral extends AIntLiteral { private final IntegerLiteral literal; - public CxxIntLiteral(IntegerLiteral literal) { - super(new CxxLiteral(literal)); + public CxxIntLiteral(IntegerLiteral literal, CxxWeaver weaver) { + super(new CxxLiteral(literal, weaver), weaver); this.literal = literal; } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxLabelDecl.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxLabelDecl.java index e8827d602..001b8ad71 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxLabelDecl.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxLabelDecl.java @@ -16,6 +16,7 @@ import pt.up.fe.specs.clava.ClavaNode; import pt.up.fe.specs.clava.ast.decl.LabelDecl; import pt.up.fe.specs.clava.weaver.CxxJoinpoints; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ALabelDecl; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ALabelStmt; @@ -23,8 +24,8 @@ public class CxxLabelDecl extends ALabelDecl { private final LabelDecl labelDecl; - public CxxLabelDecl(LabelDecl labelDecl) { - super(new CxxNamedDecl(labelDecl)); + public CxxLabelDecl(LabelDecl labelDecl, CxxWeaver weaver) { + super(new CxxNamedDecl(labelDecl, weaver), weaver); this.labelDecl = labelDecl; } @@ -36,7 +37,8 @@ public ClavaNode getNode() { @Override public ALabelStmt getLabelStmtImpl() { return labelDecl.get(LabelDecl.LABEL_STMT) - .map(labelStmt -> CxxJoinpoints.create(labelStmt, ALabelStmt.class)) + .map(labelStmt -> CxxJoinpoints.create(labelStmt, + getWeaverEngine(), ALabelStmt.class)) .orElse(null); } } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxLabelStmt.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxLabelStmt.java index 090ce472b..a69b2c5c3 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxLabelStmt.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxLabelStmt.java @@ -17,6 +17,7 @@ import pt.up.fe.specs.clava.ast.decl.LabelDecl; import pt.up.fe.specs.clava.ast.stmt.LabelStmt; import pt.up.fe.specs.clava.weaver.CxxJoinpoints; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ALabelDecl; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ALabelStmt; @@ -24,14 +25,14 @@ public class CxxLabelStmt extends ALabelStmt { private final LabelStmt labelStmt; - public CxxLabelStmt(LabelStmt labelStmt) { - super(new CxxStatement(labelStmt)); + public CxxLabelStmt(LabelStmt labelStmt, CxxWeaver weaver) { + super(new CxxStatement(labelStmt, weaver), weaver); this.labelStmt = labelStmt; } @Override public ALabelDecl getDeclImpl() { - return CxxJoinpoints.create(labelStmt.getLabelDecl(), ALabelDecl.class); + return CxxJoinpoints.create(labelStmt.getLabelDecl(), getWeaverEngine(), ALabelDecl.class); } @Override diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxLiteral.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxLiteral.java index b9dee5b9b..cfdfaaba6 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxLiteral.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxLiteral.java @@ -15,14 +15,15 @@ import pt.up.fe.specs.clava.ClavaNode; import pt.up.fe.specs.clava.ast.expr.Literal; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ALiteral; public class CxxLiteral extends ALiteral { private final Literal literal; - public CxxLiteral(Literal literal) { - super(new CxxExpression(literal)); + public CxxLiteral(Literal literal, CxxWeaver weaver) { + super(new CxxExpression(literal, weaver), weaver); this.literal = literal; } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxLoop.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxLoop.java index 9bd19de2a..ec5356f71 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxLoop.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxLoop.java @@ -56,8 +56,8 @@ private static Map, ALoopKindEnum> buildLoopTypeMap() private final LoopStmt loop; - public CxxLoop(LoopStmt loop) { - super(new CxxStatement(loop)); + public CxxLoop(LoopStmt loop, CxxWeaver weaver) { + super(new CxxStatement(loop, weaver), weaver); this.loop = loop; } @@ -125,7 +125,7 @@ public AVarref getControlVarrefImpl() { + loop.getLocation()); } - return CxxJoinpoints.create(controlVars.get(0), AVarref.class); + return CxxJoinpoints.create(controlVars.get(0), getWeaverEngine(), AVarref.class); } @@ -149,7 +149,7 @@ public AStatement getCondImpl() { return null; } - return CxxJoinpoints.create(ClavaNodes.toStmt(condition), AStatement.class); + return CxxJoinpoints.create(ClavaNodes.toStmt(condition), getWeaverEngine(), AStatement.class); } @Override @@ -164,7 +164,7 @@ public AStatement getStepImpl() { } - return CxxJoinpoints.create(inc, AStatement.class); + return CxxJoinpoints.create(inc, getWeaverEngine(), AStatement.class); } @Override @@ -219,10 +219,10 @@ private void convertToWhile() { // WhileStmt whileStmt = ClavaNodeFactory.whileStmt(loop.getInfo(), ((ForStmt) loop).getCond().orElse(null), // loop.getBody()); - Stmt cond = ((ForStmt) loop).getCond().orElse(CxxWeaver.getFactory().nullStmt()); - WhileStmt whileStmt = CxxWeaver.getFactory().whileStmt(cond, loop.getBody()); + Stmt cond = ((ForStmt) loop).getCond().orElse(getWeaverEngine().getFactory().nullStmt()); + WhileStmt whileStmt = getWeaverEngine().getFactory().whileStmt(cond, loop.getBody()); - replaceWith(CxxJoinpoints.create(whileStmt)); + replaceWith(CxxJoinpoints.create(whileStmt, getWeaverEngine())); return; } @@ -249,9 +249,9 @@ public void setInitValueImpl(String initCode) { return; // TODO: warn user? } - Type intType = CxxWeaver.getFactory().builtinType(BuiltinKind.Int); + Type intType = getWeaverEngine().getFactory().builtinType(BuiltinKind.Int); - ((ForStmt) loop).setInitValue(CxxWeaver.getFactory().literalExpr(initCode, intType)); + ((ForStmt) loop).setInitValue(getWeaverEngine().getFactory().literalExpr(initCode, intType)); } @Override @@ -260,9 +260,9 @@ public void setEndValueImpl(String value) { return; // TODO: warn user? } - Type intType = CxxWeaver.getFactory().builtinType(BuiltinKind.Int); + Type intType = getWeaverEngine().getFactory().builtinType(BuiltinKind.Int); - ((ForStmt) loop).setConditionValue(CxxWeaver.getFactory().literalExpr(value, intType)); + ((ForStmt) loop).setConditionValue(getWeaverEngine().getFactory().literalExpr(value, intType)); } @Override @@ -481,7 +481,7 @@ public Boolean isInterchangeableImpl(ALoop otherLoop) { @Override public AStatement tileImpl(String blockSize, AStatement reference, Boolean useTernary) { - LoopTiling loopTiling = new LoopTiling(CxxWeaver.getContex()); + LoopTiling loopTiling = new LoopTiling(getWeaverEngine().getContex()); boolean success = loopTiling.apply(loop, (Stmt) reference.getNode(), blockSize.toString(), useTernary); @@ -494,7 +494,7 @@ public AStatement tileImpl(String blockSize, AStatement reference, Boolean useTe return reference; } - return CxxJoinpoints.create(loopTiling.getLastReferenceStmt(), AStatement.class); + return CxxJoinpoints.create(loopTiling.getLastReferenceStmt(), getWeaverEngine(), AStatement.class); } @@ -512,7 +512,8 @@ public AExpression getIterationsExprImpl() { } return ((ForStmt) loop).getIterationsExpr() - .map(expr -> CxxJoinpoints.create(expr, AExpression.class)) + .map(expr -> CxxJoinpoints.create(expr, + getWeaverEngine(), AExpression.class)) .orElse(null); } @@ -541,14 +542,16 @@ public AStatement getInitImpl() { if (loop instanceof ForStmt) { return ((ForStmt) loop).getInit() - .map(init -> CxxJoinpoints.create(init, AStatement.class)) + .map(init -> CxxJoinpoints.create(init, + getWeaverEngine(), AStatement.class)) .orElse(null); } // If range stmt, return begin if (loop instanceof CXXForRangeStmt) { return ((CXXForRangeStmt) loop).getBegin() - .map(init -> CxxJoinpoints.create(init, AStatement.class)) + .map(init -> CxxJoinpoints.create(init, + getWeaverEngine(), AStatement.class)) .orElse(null); } @@ -558,7 +561,7 @@ public AStatement getInitImpl() { @Override public AScope getBodyImpl() { - return (AScope) CxxJoinpoints.create(loop.getBody()); + return CxxJoinpoints.create(loop.getBody(), getWeaverEngine(), AScope.class); } @Override diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxMarker.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxMarker.java index 35230bd86..f7e174bbc 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxMarker.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxMarker.java @@ -21,6 +21,7 @@ import pt.up.fe.specs.clava.ast.lara.LaraMarkerPragma; import pt.up.fe.specs.clava.ast.stmt.CompoundStmt; import pt.up.fe.specs.clava.weaver.CxxSelects; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AMarker; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AScope; import pt.up.fe.specs.util.SpecsCollections; @@ -29,8 +30,8 @@ public class CxxMarker extends AMarker { private final LaraMarkerPragma marker; - public CxxMarker(LaraMarkerPragma marker) { - super(new CxxPragma(marker)); + public CxxMarker(LaraMarkerPragma marker, CxxWeaver weaver) { + super(new CxxPragma(marker, weaver), weaver); this.marker = marker; } @@ -46,7 +47,7 @@ public String getIdImpl() { @Override public AScope getContentsImpl() { - List result = CxxSelects.select(AScope.class, SpecsCollections.toList(marker.getTarget()), + List result = CxxSelects.select(getWeaverEngine(), AScope.class, SpecsCollections.toList(marker.getTarget()), false, node -> node instanceof CompoundStmt && ((CompoundStmt) node).isNestedScope()); Preconditions.checkArgument(!result.isEmpty(), diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxMemberAccess.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxMemberAccess.java index 8d28683bd..dbf8e4e0e 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxMemberAccess.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxMemberAccess.java @@ -17,6 +17,7 @@ import pt.up.fe.specs.clava.ClavaNodes; import pt.up.fe.specs.clava.ast.expr.MemberExpr; import pt.up.fe.specs.clava.weaver.CxxJoinpoints; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ADecl; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AExpression; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AMemberAccess; @@ -25,8 +26,8 @@ public class CxxMemberAccess extends AMemberAccess { private final MemberExpr memberExpr; - public CxxMemberAccess(MemberExpr memberExpr) { - super(new CxxExpression(memberExpr)); + public CxxMemberAccess(MemberExpr memberExpr, CxxWeaver weaver) { + super(new CxxExpression(memberExpr, weaver), weaver); this.memberExpr = memberExpr; } @@ -37,7 +38,7 @@ public ClavaNode getNode() { @Override public AExpression getBaseImpl() { - return CxxJoinpoints.create(ClavaNodes.normalize(memberExpr.getBase()), AExpression.class); + return CxxJoinpoints.create(ClavaNodes.normalize(memberExpr.getBase()), getWeaverEngine(), AExpression.class); } @Override @@ -48,7 +49,7 @@ public String getNameImpl() { @Override public AExpression[] getMemberChainArrayImpl() { return memberExpr.getExprChain().stream() - .map(member -> (AExpression) CxxJoinpoints.create(member)) + .map(member -> CxxJoinpoints.create(member, getWeaverEngine(), AExpression.class)) .toArray(size -> new AExpression[size]); } @@ -59,7 +60,7 @@ public String[] getMemberChainNamesArrayImpl() { @Override public ADecl getDeclImpl() { - return CxxJoinpoints.create(memberExpr.get(MemberExpr.MEMBER_DECL), ADecl.class); + return CxxJoinpoints.create(memberExpr.get(MemberExpr.MEMBER_DECL), getWeaverEngine(), ADecl.class); } @Override diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxMemberCall.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxMemberCall.java index c340b2209..b556a97b2 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxMemberCall.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxMemberCall.java @@ -15,6 +15,7 @@ import pt.up.fe.specs.clava.ast.expr.CXXMemberCallExpr; import pt.up.fe.specs.clava.weaver.CxxJoinpoints; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AExpression; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AMemberCall; @@ -22,8 +23,8 @@ public class CxxMemberCall extends AMemberCall { private final CXXMemberCallExpr memberCall; - public CxxMemberCall(CXXMemberCallExpr memberCall) { - super(new CxxCall(memberCall)); + public CxxMemberCall(CXXMemberCallExpr memberCall, CxxWeaver weaver) { + super(new CxxCall(memberCall, weaver), weaver); this.memberCall = memberCall; } @@ -35,11 +36,11 @@ public CXXMemberCallExpr getNode() { @Override public AExpression getBaseImpl() { - return CxxJoinpoints.create(memberCall.getBase(), AExpression.class); + return CxxJoinpoints.create(memberCall.getBase(), getWeaverEngine(), AExpression.class); } @Override public AExpression getRootBaseImpl() { - return CxxJoinpoints.create(memberCall.getRootBase(), AExpression.class); + return CxxJoinpoints.create(memberCall.getRootBase(), getWeaverEngine(), AExpression.class); } } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxMethod.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxMethod.java index cb7f56770..b3a5c3036 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxMethod.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxMethod.java @@ -16,6 +16,7 @@ import pt.up.fe.specs.clava.ClavaNode; import pt.up.fe.specs.clava.ast.decl.CXXMethodDecl; import pt.up.fe.specs.clava.weaver.CxxJoinpoints; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AClass; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AMethod; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AType; @@ -24,8 +25,8 @@ public class CxxMethod extends AMethod { private final CXXMethodDecl method; - public CxxMethod(CXXMethodDecl method) { - super(new CxxFunction(method)); + public CxxMethod(CXXMethodDecl method, CxxWeaver weaver) { + super(new CxxFunction(method, weaver), weaver); this.method = method; } @@ -37,7 +38,7 @@ public ClavaNode getNode() { @Override public AClass getRecordImpl() { - return method.getRecordDecl().map(record -> (AClass) CxxJoinpoints.create(record)).orElse(null); + return method.getRecordDecl().map(record -> CxxJoinpoints.create(record, getWeaverEngine(), AClass.class)).orElse(null); } @Override @@ -51,7 +52,7 @@ public void removeRecordImpl() { */ @Override public AType getTypeImpl() { - return CxxJoinpoints.create(method.getReturnType(), AType.class); + return CxxJoinpoints.create(method.getReturnType(), getWeaverEngine(), AType.class); } @Override diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxNamedDecl.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxNamedDecl.java index edd3573ec..724f80e68 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxNamedDecl.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxNamedDecl.java @@ -21,14 +21,15 @@ import pt.up.fe.specs.clava.ast.decl.RecordDecl; import pt.up.fe.specs.clava.language.AccessSpecifier; import pt.up.fe.specs.clava.language.TagKind; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ANamedDecl; public class CxxNamedDecl extends ANamedDecl { private final NamedDecl namedDecl; - public CxxNamedDecl(NamedDecl namedDecl) { - super(new CxxDecl(namedDecl)); + public CxxNamedDecl(NamedDecl namedDecl, CxxWeaver weaver) { + super(new CxxDecl(namedDecl, weaver), weaver); this.namedDecl = namedDecl; } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxNewExpr.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxNewExpr.java index aa64785bb..90297ec11 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxNewExpr.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxNewExpr.java @@ -15,14 +15,15 @@ import pt.up.fe.specs.clava.ClavaNode; import pt.up.fe.specs.clava.ast.expr.CXXNewExpr; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ANewExpr; public class CxxNewExpr extends ANewExpr { private final CXXNewExpr newExpr; - public CxxNewExpr(CXXNewExpr newExpr) { - super(new CxxExpression(newExpr)); + public CxxNewExpr(CXXNewExpr newExpr, CxxWeaver weaver) { + super(new CxxExpression(newExpr, weaver), weaver); this.newExpr = newExpr; } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxOmp.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxOmp.java index c90204d65..d82f517f0 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxOmp.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxOmp.java @@ -26,6 +26,7 @@ import pt.up.fe.specs.clava.ast.omp.clauses.OmpScheduleClause.ScheduleKind; import pt.up.fe.specs.clava.ast.omp.clauses.OmpScheduleClause.ScheduleModifier; import pt.up.fe.specs.clava.parsing.omp.OmpParser; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AOmp; import pt.up.fe.specs.util.SpecsCollections; import pt.up.fe.specs.util.treenode.NodeInsertUtils; @@ -34,8 +35,8 @@ public class CxxOmp extends AOmp { private OmpPragma ompPragma; - public CxxOmp(OmpPragma ompPragma) { - super(new CxxPragma(ompPragma)); + public CxxOmp(OmpPragma ompPragma, CxxWeaver weaver) { + super(new CxxPragma(ompPragma, weaver), weaver); this.ompPragma = ompPragma; } @@ -307,6 +308,6 @@ public void setKindImpl(String directiveKindString) { this.ompPragma = newOmpPragma; // Update parent join point - this.aPragma = new CxxPragma(ompPragma); + this.aPragma = new CxxPragma(ompPragma, getWeaverEngine()); } } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxOp.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxOp.java index c26cc0c0d..df0803387 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxOp.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxOp.java @@ -15,14 +15,15 @@ import pt.up.fe.specs.clava.ClavaNode; import pt.up.fe.specs.clava.ast.expr.Operator; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AOp; public class CxxOp extends AOp { private final Operator op; - public CxxOp(Operator op) { - super(new CxxExpression(op)); + public CxxOp(Operator op, CxxWeaver weaver) { + super(new CxxExpression(op, weaver), weaver); this.op = op; } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxParam.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxParam.java index f8fd37887..1110c244a 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxParam.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxParam.java @@ -15,14 +15,15 @@ import pt.up.fe.specs.clava.ClavaNode; import pt.up.fe.specs.clava.ast.decl.ParmVarDecl; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AParam; public class CxxParam extends AParam { private final ParmVarDecl param; - public CxxParam(ParmVarDecl param) { - super(new CxxVardecl(param)); + public CxxParam(ParmVarDecl param, CxxWeaver weaver) { + super(new CxxVardecl(param, weaver), weaver); this.param = param; } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxParenExpr.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxParenExpr.java index b74797613..b459402ba 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxParenExpr.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxParenExpr.java @@ -16,6 +16,7 @@ import pt.up.fe.specs.clava.ClavaNode; import pt.up.fe.specs.clava.ast.expr.ParenExpr; import pt.up.fe.specs.clava.weaver.CxxJoinpoints; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AExpression; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AParenExpr; @@ -23,8 +24,8 @@ public class CxxParenExpr extends AParenExpr { private final ParenExpr parenExpr; - public CxxParenExpr(ParenExpr parenExpr) { - super(new CxxExpression(parenExpr)); + public CxxParenExpr(ParenExpr parenExpr, CxxWeaver weaver) { + super(new CxxExpression(parenExpr, weaver), weaver); this.parenExpr = parenExpr; } @@ -35,6 +36,6 @@ public ClavaNode getNode() { @Override public AExpression getSubExprImpl() { - return CxxJoinpoints.create(parenExpr.getSubExpr(), AExpression.class); + return CxxJoinpoints.create(parenExpr.getSubExpr(), getWeaverEngine(), AExpression.class); } } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxPragma.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxPragma.java index afbc82158..9688d5747 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxPragma.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxPragma.java @@ -17,6 +17,7 @@ import pt.up.fe.specs.clava.ast.pragma.Pragma; import pt.up.fe.specs.clava.weaver.CxxJoinpoints; import pt.up.fe.specs.clava.weaver.CxxSelects; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AJoinPoint; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.APragma; @@ -24,7 +25,8 @@ public class CxxPragma extends APragma { private Pragma pragma; - public CxxPragma(Pragma pragma) { + public CxxPragma(Pragma pragma, CxxWeaver weaver) { + super(weaver); this.pragma = pragma; } @@ -40,7 +42,8 @@ public String getNameImpl() { @Override public AJoinPoint getTargetImpl() { - return pragma.getTarget().map(target -> CxxJoinpoints.create(target, AJoinPoint.class)).orElse(null); + return pragma.getTarget().map(target -> CxxJoinpoints.create(target, + getWeaverEngine(), AJoinPoint.class)).orElse(null); } @Override diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxProgram.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxProgram.java index 7a5a7f3f9..980895a17 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxProgram.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxProgram.java @@ -42,7 +42,6 @@ public class CxxProgram extends AProgram { private final String name; private final App app; - private final CxxWeaver weaver; // private final File baseFolder; // private final List parserOptions; @@ -53,10 +52,10 @@ public class CxxProgram extends AProgram { // this.parserOptions = parserOptions; // } - public CxxProgram(String name, App app, CxxWeaver weaver) { - this.name = name; + public CxxProgram(App app, CxxWeaver weaver) { + super(weaver); + this.name = weaver.getProgramName(); this.app = app; - this.weaver = weaver; } @Override @@ -69,20 +68,16 @@ public String getNameImpl() { return name; } - public CxxWeaver getWeaver() { - return weaver; - } - @Override public boolean rebuildImpl() { SpecsLogs.msgInfo("Rebuilding tree..."); - return weaver.rebuildAst(true); + return getWeaverEngine().rebuildAst(true); } @Override public void rebuildFuzzyImpl() { SpecsLogs.msgInfo("Fuzzy rebuilding tree..."); - weaver.rebuildAstFuzzy(); + getWeaverEngine().rebuildAstFuzzy(); } @Override @@ -94,24 +89,24 @@ public AJoinPoint addFileImpl(AFile file) { return file; } - return new CxxFile(trueTu); + return new CxxFile(trueTu, getWeaverEngine()); } @Override public String[] getIncludeFoldersArrayImpl() { - Set includeFolders = weaver.getIncludeFolders(); + Set includeFolders = getWeaverEngine().getIncludeFolders(); return includeFolders.toArray(new String[0]); } @Override public String getStandardImpl() { - return weaver.getConfig().get(ClavaOptions.STANDARD).getString(); + return getWeaverEngine().getConfig().get(ClavaOptions.STANDARD).getString(); } @Override public String getStdFlagImpl() { - return weaver.getStdFlag(); + return getWeaverEngine().getStdFlag(); } @Override @@ -121,7 +116,7 @@ public String[] getDefaultFlagsArrayImpl() { @Override public String[] getUserFlagsArrayImpl() { - return weaver.getUserFlags().toArray(new String[0]); + return getWeaverEngine().getUserFlags().toArray(new String[0]); } // @Override @@ -132,7 +127,7 @@ public String[] getUserFlagsArrayImpl() { @Override public String getBaseFolderImpl() { // ClavaLog.deprecated("attribute baseFolder should not be used, instead use file.sourcePath"); - List sources = getWeaver().getSources(); + List sources = getWeaverEngine().getSources(); if (sources.isEmpty()) { SpecsLogs.warn("Expected at least program to have one source folder, found none"); return null; @@ -154,22 +149,22 @@ public String getCodeImpl() { @Override public void pushImpl() { - weaver.pushAst(); + getWeaverEngine().pushAst(); } @Override public void popImpl() { - weaver.popAst(); + getWeaverEngine().popAst(); } @Override public String getWeavingFolderImpl() { - return weaver.getWeavingFolder().getAbsolutePath(); + return getWeaverEngine().getWeavingFolder().getAbsolutePath(); } @Override public Boolean getIsCxxImpl() { - return weaver.getConfig().get(ClavaOptions.STANDARD).isCxx(); + return getWeaverEngine().getConfig().get(ClavaOptions.STANDARD).isCxx(); } @Override @@ -249,7 +244,7 @@ public AJoinPoint addFileFromPathImpl(Object filepath) { // Create file join point TranslationUnit newTu = getFactory().translationUnit(file, Arrays.asList(code)); - return addFileImpl(new CxxFile(newTu)); + return addFileImpl(new CxxFile(newTu, getWeaverEngine())); } private File getFile(Object filepath) { @@ -283,7 +278,7 @@ public AFunction getMainImpl() { continue; } - return (AFunction) CxxJoinpoints.create(function); + return CxxJoinpoints.create(function, getWeaverEngine(), AFunction.class); } } @@ -320,7 +315,7 @@ public void atexitImpl(AFunction function) { // Insert call at the beginning of the main function // ClavaLog.debug("Inserting atexit call at beginning of main"); - mainFunction.getBodyImpl().insertBegin(CxxJoinpoints.create(atexitCall)); + mainFunction.getBodyImpl().insertBegin(CxxJoinpoints.create(atexitCall, getWeaverEngine())); // Add include for atexit // ClavaLog.debug("Getting file ancestor"); @@ -339,7 +334,8 @@ public void atexitImpl(AFunction function) { @Override public AFile[] getFilesArrayImpl() { return app.getTranslationUnits().stream() - .map(tunit -> CxxJoinpoints.create(tunit, AFile.class)) + .map(tunit -> CxxJoinpoints.create(tunit, + getWeaverEngine(), AFile.class)) .collect(Collectors.toList()).toArray(size -> new AFile[size]); } } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxRecord.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxRecord.java index 862454e24..22d03a069 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxRecord.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxRecord.java @@ -19,6 +19,7 @@ import pt.up.fe.specs.clava.ast.decl.FieldDecl; import pt.up.fe.specs.clava.ast.decl.RecordDecl; import pt.up.fe.specs.clava.weaver.CxxJoinpoints; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AField; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AFunction; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ARecord; @@ -27,8 +28,8 @@ public class CxxRecord extends ARecord { private final RecordDecl recordDecl; - public CxxRecord(RecordDecl recordDecl) { - super(new CxxNamedDecl(recordDecl)); + public CxxRecord(RecordDecl recordDecl, CxxWeaver weaver) { + super(new CxxNamedDecl(recordDecl, weaver), weaver); this.recordDecl = recordDecl; } @@ -40,7 +41,8 @@ public ClavaNode getNode() { @Override public AField[] getFieldsArrayImpl() { return recordDecl.getFields().stream() - .map(field -> CxxJoinpoints.create(field, AField.class)) + .map(field -> CxxJoinpoints.create(field, + getWeaverEngine(), AField.class)) .collect(Collectors.toList()).toArray(new AField[0]); } @@ -57,7 +59,7 @@ public String getKindImpl() { @Override public AFunction[] getFunctionsArrayImpl() { return recordDecl.getFunctions().stream() - .map(function -> (AFunction) CxxJoinpoints.create(function)) + .map(function -> CxxJoinpoints.create(function, getWeaverEngine(), AFunction.class)) .toArray(size -> new AFunction[size]); } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxReturnStmt.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxReturnStmt.java index 8fcaf99bc..51f6f0fbe 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxReturnStmt.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxReturnStmt.java @@ -16,6 +16,7 @@ import pt.up.fe.specs.clava.ClavaNode; import pt.up.fe.specs.clava.ast.stmt.ReturnStmt; import pt.up.fe.specs.clava.weaver.CxxJoinpoints; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AExpression; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AReturnStmt; @@ -23,8 +24,8 @@ public class CxxReturnStmt extends AReturnStmt { private final ReturnStmt returnStmt; - public CxxReturnStmt(ReturnStmt returnStmt) { - super(new CxxStatement(returnStmt)); + public CxxReturnStmt(ReturnStmt returnStmt, CxxWeaver weaver) { + super(new CxxStatement(returnStmt, weaver), weaver); this.returnStmt = returnStmt; } @@ -35,7 +36,8 @@ public ClavaNode getNode() { @Override public AExpression getReturnExprImpl() { - return returnStmt.getRetValue().map(retValue -> CxxJoinpoints.create(retValue, AExpression.class)).orElse(null); + return returnStmt.getRetValue().map(retValue -> CxxJoinpoints.create(retValue, + getWeaverEngine(), AExpression.class)).orElse(null); } /* diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxScope.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxScope.java index 542cbfb31..9bc64ef72 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxScope.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxScope.java @@ -41,8 +41,8 @@ public class CxxScope extends AScope { private final CompoundStmt scope; - public CxxScope(CompoundStmt scope) { - super(new CxxStatement(scope)); + public CxxScope(CompoundStmt scope, CxxWeaver weaver) { + super(new CxxStatement(scope, weaver), weaver); this.scope = scope; } @@ -56,9 +56,9 @@ public AJoinPoint[] insertImpl(String position, String code) { // 'body' behaviour if (!scope.isNestedScope()) { - Stmt literalStmt = CxxWeaver.getSnippetParser().parseStmt(code); + Stmt literalStmt = getWeaverEngine().getSnippetParser().parseStmt(code); CxxActions.insertStmt(position, scope, literalStmt, getWeaverEngine()); - return new AJoinPoint[] { CxxJoinpoints.create(literalStmt) }; + return new AJoinPoint[] { CxxJoinpoints.create(literalStmt, getWeaverEngine()) }; } // Default behaviour @@ -114,12 +114,12 @@ private AJoinPoint insertBodyImplJp(String position, ClavaNode newNode) { CxxActions.insertStmt(position, scope, newStmt, getWeaverEngine()); // Body becomes the parent of this statement - return CxxJoinpoints.create(newStmt); + return CxxJoinpoints.create(newStmt, getWeaverEngine()); } @Override public AJoinPoint insertBeginImpl(String code) { - return insertBeginImpl(AstFactory.stmtLiteral(code)); + return insertBeginImpl(AstFactory.stmtLiteral(getWeaverEngine(), code)); } @Override @@ -128,12 +128,12 @@ public AJoinPoint insertBeginImpl(AJoinPoint node) { CxxActions.insertStmt("before", scope, newStmt, getWeaverEngine()); - return CxxJoinpoints.create(newStmt); + return CxxJoinpoints.create(newStmt, getWeaverEngine()); } @Override public AJoinPoint insertEndImpl(String code) { - return insertEndImpl(AstFactory.stmtLiteral(code)); + return insertEndImpl(AstFactory.stmtLiteral(getWeaverEngine(), code)); } @Override @@ -142,7 +142,7 @@ public AJoinPoint insertEndImpl(AJoinPoint node) { CxxActions.insertStmt("after", scope, newStmt, getWeaverEngine()); - return CxxJoinpoints.create(newStmt); + return CxxJoinpoints.create(newStmt, getWeaverEngine()); } @Override @@ -199,7 +199,7 @@ public AJoinPoint addLocalImpl(String name, AJoinPoint type, String initValue) { } varDecl.set(VarDecl.IS_USED); - AJoinPoint varDeclJp = CxxJoinpoints.create(varDecl); + AJoinPoint varDeclJp = CxxJoinpoints.create(varDecl, getWeaverEngine()); insertBegin(varDeclJp); @@ -208,12 +208,12 @@ public AJoinPoint addLocalImpl(String name, AJoinPoint type, String initValue) { @Override public AStatement[] getStmtsArrayImpl() { - return CxxJoinpoints.create(getNode().getChildren(Stmt.class), AStatement.class); + return CxxJoinpoints.create(getNode().getChildren(Stmt.class), getWeaverEngine(), AStatement.class); } @Override public AStatement[] getAllStmtsArrayImpl() { - return CxxSelects.select(AStatement.class, getStatements(), true, CxxSelects::stmtFilter).toArray(new AStatement[0]); + return CxxSelects.select(getWeaverEngine(), AStatement.class, getStatements(), true, CxxSelects::stmtFilter).toArray(new AStatement[0]); } @Override @@ -263,12 +263,12 @@ public String dfgImpl() { @Override public AJoinPoint insertReturnImpl(AJoinPoint code) { - return CxxActions.insertReturn(this, code); + return CxxActions.insertReturn(this, code, getWeaverEngine()); } @Override public AJoinPoint insertReturnImpl(String code) { - var stmt = CxxJoinpoints.create(CxxWeaver.getSnippetParser().parseStmt(code)); + var stmt = CxxJoinpoints.create(getWeaverEngine().getSnippetParser().parseStmt(code), getWeaverEngine()); return insertReturnImpl(stmt); } } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxStatement.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxStatement.java index 0b709bb1f..b6e543dde 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxStatement.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxStatement.java @@ -18,6 +18,7 @@ import pt.up.fe.specs.clava.ClavaNodes; import pt.up.fe.specs.clava.ast.stmt.Stmt; import pt.up.fe.specs.clava.weaver.CxxJoinpoints; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AJoinPoint; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AStatement; import pt.up.fe.specs.util.treenode.NodeInsertUtils; @@ -26,7 +27,8 @@ public class CxxStatement extends AStatement { private final Stmt stmt; - public CxxStatement(Stmt stmt) { + public CxxStatement(Stmt stmt, CxxWeaver weaver) { + super(weaver); this.stmt = stmt; } @@ -43,7 +45,7 @@ public AJoinPoint replaceWithImpl(AJoinPoint node) { NodeInsertUtils.replace(stmt, newStmt); // Return a statement joinpoint - return CxxJoinpoints.create(newStmt); + return CxxJoinpoints.create(newStmt, getWeaverEngine()); } @Override diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxStruct.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxStruct.java index 5686a9789..92c90dfdc 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxStruct.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxStruct.java @@ -15,14 +15,15 @@ import pt.up.fe.specs.clava.ClavaNode; import pt.up.fe.specs.clava.ast.decl.RecordDecl; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AStruct; public class CxxStruct extends AStruct { private final RecordDecl recordDecl; - public CxxStruct(RecordDecl recordDecl) { - super(new CxxRecord(recordDecl)); + public CxxStruct(RecordDecl recordDecl, CxxWeaver weaver) { + super(new CxxRecord(recordDecl, weaver), weaver); this.recordDecl = recordDecl; } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxSwitch.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxSwitch.java index 316d249fd..5feafd8dc 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxSwitch.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxSwitch.java @@ -16,6 +16,7 @@ import pt.up.fe.specs.clava.ClavaNode; import pt.up.fe.specs.clava.ast.stmt.SwitchStmt; import pt.up.fe.specs.clava.weaver.CxxJoinpoints; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ACase; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AExpression; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ASwitch; @@ -24,8 +25,8 @@ public class CxxSwitch extends ASwitch { private final SwitchStmt switchStmt; - public CxxSwitch(SwitchStmt switchStmt) { - super(new CxxStatement(switchStmt)); + public CxxSwitch(SwitchStmt switchStmt, CxxWeaver weaver) { + super(new CxxStatement(switchStmt, weaver), weaver); this.switchStmt = switchStmt; } @@ -42,18 +43,19 @@ public Boolean getHasDefaultCaseImpl() { @Override public ACase getGetDefaultCaseImpl() { return switchStmt.getDefaultCase() - .map(node -> CxxJoinpoints.create(node, ACase.class)) + .map(node -> CxxJoinpoints.create(node, + getWeaverEngine(), ACase.class)) .orElse(null); } @Override public ACase[] getCasesArrayImpl() { - return CxxJoinpoints.create(switchStmt.getCases(), ACase.class); + return CxxJoinpoints.create(switchStmt.getCases(), getWeaverEngine(), ACase.class); } @Override public AExpression getConditionImpl() { - return CxxJoinpoints.create(switchStmt.getCond(), AExpression.class); + return CxxJoinpoints.create(switchStmt.getCond(), getWeaverEngine(), AExpression.class); } } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxSwitchCase.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxSwitchCase.java index 7cc89c11d..52a86d3c9 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxSwitchCase.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxSwitchCase.java @@ -2,14 +2,15 @@ import pt.up.fe.specs.clava.ClavaNode; import pt.up.fe.specs.clava.ast.stmt.SwitchCase; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ASwitchCase; public class CxxSwitchCase extends ASwitchCase { private final SwitchCase switchCase; - public CxxSwitchCase(SwitchCase switchCase) { - super(new CxxStatement(switchCase)); + public CxxSwitchCase(SwitchCase switchCase, CxxWeaver weaver) { + super(new CxxStatement(switchCase, weaver), weaver); this.switchCase = switchCase; } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxTag.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxTag.java index fa60d70f5..0f3775652 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxTag.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxTag.java @@ -15,6 +15,7 @@ import pt.up.fe.specs.clava.ClavaNode; import pt.up.fe.specs.clava.ast.lara.LaraTagPragma; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.Insert; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AJoinPoint; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ATag; @@ -23,8 +24,8 @@ public class CxxTag extends ATag { private final LaraTagPragma tag; - public CxxTag(LaraTagPragma reference) { - super(new CxxPragma(reference)); + public CxxTag(LaraTagPragma reference, CxxWeaver weaver) { + super(new CxxPragma(reference, weaver), weaver); tag = reference; } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxTernaryOp.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxTernaryOp.java index dbf11a9d2..7335642aa 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxTernaryOp.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxTernaryOp.java @@ -16,6 +16,7 @@ import pt.up.fe.specs.clava.ClavaNode; import pt.up.fe.specs.clava.ast.expr.ConditionalOperator; import pt.up.fe.specs.clava.weaver.CxxJoinpoints; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AExpression; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ATernaryOp; @@ -23,8 +24,8 @@ public class CxxTernaryOp extends ATernaryOp { private final ConditionalOperator op; - public CxxTernaryOp(ConditionalOperator op) { - super(new CxxOp(op)); + public CxxTernaryOp(ConditionalOperator op, CxxWeaver weaver) { + super(new CxxOp(op, weaver), weaver); this.op = op; } @@ -36,16 +37,16 @@ public ClavaNode getNode() { @Override public AExpression getCondImpl() { - return CxxJoinpoints.create(op.getCondition(), AExpression.class); + return CxxJoinpoints.create(op.getCondition(), getWeaverEngine(), AExpression.class); } @Override public AExpression getTrueExprImpl() { - return CxxJoinpoints.create(op.getTrueExpr(), AExpression.class); + return CxxJoinpoints.create(op.getTrueExpr(), getWeaverEngine(), AExpression.class); } @Override public AExpression getFalseExprImpl() { - return CxxJoinpoints.create(op.getFalseExpr(), AExpression.class); + return CxxJoinpoints.create(op.getFalseExpr(), getWeaverEngine(), AExpression.class); } } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxThis.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxThis.java index 0ab0fd8ad..f0017c216 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxThis.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxThis.java @@ -17,6 +17,7 @@ import pt.up.fe.specs.clava.ast.expr.CXXThisExpr; import pt.up.fe.specs.clava.ast.type.TagType; import pt.up.fe.specs.clava.weaver.CxxJoinpoints; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ADecl; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.APointerType; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AThis; @@ -25,8 +26,8 @@ public class CxxThis extends AThis { private final CXXThisExpr thisExpr; - public CxxThis(CXXThisExpr thisExpr) { - super(new CxxExpression(thisExpr)); + public CxxThis(CXXThisExpr thisExpr, CxxWeaver weaver) { + super(new CxxExpression(thisExpr, weaver), weaver); this.thisExpr = thisExpr; } @@ -56,6 +57,6 @@ public ADecl getDeclImpl() { var typeDecl = thisType.get(TagType.DECL); - return CxxJoinpoints.create(typeDecl, ADecl.class); + return CxxJoinpoints.create(typeDecl, getWeaverEngine(), ADecl.class); } } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxTypedefDecl.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxTypedefDecl.java index ec244b110..1b4c9bf21 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxTypedefDecl.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxTypedefDecl.java @@ -15,14 +15,15 @@ import pt.up.fe.specs.clava.ClavaNode; import pt.up.fe.specs.clava.ast.decl.TypedefDecl; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ATypedefDecl; public class CxxTypedefDecl extends ATypedefDecl { private final TypedefDecl typedefDecl; - public CxxTypedefDecl(TypedefDecl typedefDecl) { - super(new CxxTypedefNameDecl(typedefDecl)); + public CxxTypedefDecl(TypedefDecl typedefDecl, CxxWeaver weaver) { + super(new CxxTypedefNameDecl(typedefDecl, weaver), weaver); this.typedefDecl = typedefDecl; } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxTypedefNameDecl.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxTypedefNameDecl.java index 5d5b04713..832ba2063 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxTypedefNameDecl.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxTypedefNameDecl.java @@ -15,14 +15,15 @@ import pt.up.fe.specs.clava.ClavaNode; import pt.up.fe.specs.clava.ast.decl.TypedefNameDecl; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ATypedefNameDecl; public class CxxTypedefNameDecl extends ATypedefNameDecl { private final TypedefNameDecl typedefNameDecl; - public CxxTypedefNameDecl(TypedefNameDecl typedefNameDecl) { - super(new CxxNamedDecl(typedefNameDecl)); + public CxxTypedefNameDecl(TypedefNameDecl typedefNameDecl, CxxWeaver weaver) { + super(new CxxNamedDecl(typedefNameDecl, weaver), weaver); this.typedefNameDecl = typedefNameDecl; } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxUnaryExprOrType.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxUnaryExprOrType.java index 252043cf3..6baddf118 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxUnaryExprOrType.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxUnaryExprOrType.java @@ -17,6 +17,7 @@ import pt.up.fe.specs.clava.ast.expr.UnaryExprOrTypeTraitExpr; import pt.up.fe.specs.clava.ast.type.Type; import pt.up.fe.specs.clava.weaver.CxxJoinpoints; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AExpression; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AType; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AUnaryExprOrType; @@ -26,8 +27,8 @@ public class CxxUnaryExprOrType extends AUnaryExprOrType { private final UnaryExprOrTypeTraitExpr expr; - public CxxUnaryExprOrType(UnaryExprOrTypeTraitExpr expr) { - super(new CxxExpression(expr)); + public CxxUnaryExprOrType(UnaryExprOrTypeTraitExpr expr, CxxWeaver weaver) { + super(new CxxExpression(expr, weaver), weaver); this.expr = expr; } @@ -53,7 +54,7 @@ public AType getArgTypeImpl() { return null; } - return CxxJoinpoints.create(expr.getArgumentType().get(), AType.class); + return CxxJoinpoints.create(expr.getArgumentType().get(), getWeaverEngine(), AType.class); } @Override @@ -62,7 +63,7 @@ public AExpression getArgExprImpl() { return null; } - return CxxJoinpoints.create(expr.getArgumentExpression(), AExpression.class); + return CxxJoinpoints.create(expr.getArgumentExpression(), getWeaverEngine(), AExpression.class); } @Override diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxUnaryOp.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxUnaryOp.java index e57b47cf0..3eeb49fdf 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxUnaryOp.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxUnaryOp.java @@ -18,6 +18,7 @@ import pt.up.fe.specs.clava.ast.expr.UnaryOperator; import pt.up.fe.specs.clava.ast.expr.enums.UnaryOperatorKind; import pt.up.fe.specs.clava.weaver.CxxJoinpoints; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AExpression; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AUnaryOp; @@ -25,8 +26,8 @@ public class CxxUnaryOp extends AUnaryOp { private final UnaryOperator unaryOp; - public CxxUnaryOp(UnaryOperator unaryOp) { - super(new CxxOp(unaryOp)); + public CxxUnaryOp(UnaryOperator unaryOp, CxxWeaver weaver) { + super(new CxxOp(unaryOp, weaver), weaver); this.unaryOp = unaryOp; } @@ -37,7 +38,7 @@ public ClavaNode getNode() { @Override public AExpression getOperandImpl() { - return CxxJoinpoints.create(ClavaNodes.normalize(unaryOp.getSubExpr()), AExpression.class); + return CxxJoinpoints.create(ClavaNodes.normalize(unaryOp.getSubExpr()), getWeaverEngine(), AExpression.class); } @Override diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxVardecl.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxVardecl.java index ab1575b63..7e310f627 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxVardecl.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxVardecl.java @@ -27,8 +27,8 @@ public class CxxVardecl extends AVardecl { private final VarDecl varDecl; - public CxxVardecl(VarDecl varDecl) { - super(new CxxDeclarator(varDecl)); + public CxxVardecl(VarDecl varDecl, CxxWeaver weaver) { + super(new CxxDeclarator(varDecl, weaver), weaver); this.varDecl = varDecl; } @@ -45,7 +45,7 @@ public Boolean getHasInitImpl() { @Override public AExpression getInitImpl() { - return varDecl.getInit().map(init -> (AExpression) CxxJoinpoints.create(init)).orElse(null); + return varDecl.getInit().map(init -> (AExpression) CxxJoinpoints.create(init, getWeaverEngine())).orElse(null); } @Override @@ -63,7 +63,7 @@ public void setInitImpl(String init) { removeInitImpl(true); } - varDecl.setInit(CxxWeaver.getFactory().literalExpr(init, varDecl.getType())); + varDecl.setInit(getWeaverEngine().getFactory().literalExpr(init, varDecl.getType())); } @Override @@ -99,7 +99,7 @@ public String getInitStyleImpl() { @Override public AVardecl getDefinitionImpl() { - return CxxJoinpoints.create(varDecl.getDefinition(), AVardecl.class); + return CxxJoinpoints.create(varDecl.getDefinition(), getWeaverEngine(), AVardecl.class); } // @Override @@ -109,7 +109,7 @@ public AVardecl getDefinitionImpl() { @Override public AVarref varrefImpl() { - return AstFactory.varref(CxxJoinpoints.create(varDecl, AVardecl.class)); + return AstFactory.varref(getWeaverEngine(), CxxJoinpoints.create(varDecl, getWeaverEngine(), AVardecl.class)); } } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxVarref.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxVarref.java index 417c049eb..34bb20812 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxVarref.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxVarref.java @@ -19,6 +19,7 @@ import pt.up.fe.specs.clava.ast.expr.DeclRefExpr; import pt.up.fe.specs.clava.ast.expr.MSPropertyRefExpr; import pt.up.fe.specs.clava.weaver.CxxJoinpoints; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ADecl; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ADeclarator; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AExpression; @@ -29,8 +30,8 @@ public class CxxVarref extends AVarref { private final DeclRefExpr refExpr; - public CxxVarref(DeclRefExpr refExpr) { - super(new CxxExpression(refExpr)); + public CxxVarref(DeclRefExpr refExpr, CxxWeaver weaver) { + super(new CxxExpression(refExpr, weaver), weaver); this.refExpr = refExpr; } @@ -57,7 +58,7 @@ public String getKindImpl() { @Override public AExpression getUseExprImpl() { - return CxxJoinpoints.create(refExpr.getUseExpr(), AExpression.class); + return CxxJoinpoints.create(refExpr.getUseExpr(), getWeaverEngine(), AExpression.class); } @Override @@ -80,7 +81,7 @@ public ADeclarator getDeclarationImpl() { return null; } - return CxxJoinpoints.create(declarator.get(), ADeclarator.class); + return CxxJoinpoints.create(declarator.get(), getWeaverEngine(), ADeclarator.class); } @Override diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxWrapperStmt.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxWrapperStmt.java index c0057a81c..72ad3a2e8 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxWrapperStmt.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/CxxWrapperStmt.java @@ -18,6 +18,7 @@ import pt.up.fe.specs.clava.ast.pragma.Pragma; import pt.up.fe.specs.clava.ast.stmt.WrapperStmt; import pt.up.fe.specs.clava.weaver.CxxJoinpoints; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AJoinPoint; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AWrapperStmt; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.enums.AWrapperStmtKindEnum; @@ -26,8 +27,8 @@ public class CxxWrapperStmt extends AWrapperStmt { private final WrapperStmt wrapperStmt; - public CxxWrapperStmt(WrapperStmt wrapperStmt) { - super(new CxxStatement(wrapperStmt)); + public CxxWrapperStmt(WrapperStmt wrapperStmt, CxxWeaver weaver) { + super(new CxxStatement(wrapperStmt, weaver), weaver); this.wrapperStmt = wrapperStmt; } @@ -54,7 +55,7 @@ public String getKindImpl() { @Override public AJoinPoint getContentImpl() { - return CxxJoinpoints.create(wrapperStmt.getWrappedNode()); + return CxxJoinpoints.create(wrapperStmt.getWrappedNode(), getWeaverEngine()); } } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/GenericJoinpoint.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/GenericJoinpoint.java index f5bfc6853..030cad1d7 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/GenericJoinpoint.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/GenericJoinpoint.java @@ -14,13 +14,15 @@ package pt.up.fe.specs.clava.weaver.joinpoints; import pt.up.fe.specs.clava.ClavaNode; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.ACxxWeaverJoinPoint; public class GenericJoinpoint extends ACxxWeaverJoinPoint { private final ClavaNode node; - public GenericJoinpoint(ClavaNode node) { + public GenericJoinpoint(ClavaNode node, CxxWeaver weaver) { + super(weaver); this.node = node; } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/cilk/CxxCilkFor.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/cilk/CxxCilkFor.java index d418d3cb1..b935abee7 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/cilk/CxxCilkFor.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/cilk/CxxCilkFor.java @@ -15,6 +15,7 @@ import pt.up.fe.specs.clava.ClavaNode; import pt.up.fe.specs.clava.ast.cilk.CilkFor; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ACilkFor; import pt.up.fe.specs.clava.weaver.joinpoints.CxxLoop; @@ -22,8 +23,8 @@ public class CxxCilkFor extends ACilkFor { private final CilkFor loop; - public CxxCilkFor(CilkFor loop) { - super(new CxxLoop(loop)); + public CxxCilkFor(CilkFor loop, CxxWeaver weaver) { + super(new CxxLoop(loop, weaver), weaver); this.loop = loop; } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/cilk/CxxCilkSpawn.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/cilk/CxxCilkSpawn.java index 6e70b043c..294e7ca36 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/cilk/CxxCilkSpawn.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/cilk/CxxCilkSpawn.java @@ -15,6 +15,7 @@ import pt.up.fe.specs.clava.ClavaNode; import pt.up.fe.specs.clava.ast.cilk.CilkSpawn; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ACilkSpawn; import pt.up.fe.specs.clava.weaver.joinpoints.CxxCall; @@ -22,8 +23,8 @@ public class CxxCilkSpawn extends ACilkSpawn { private final CilkSpawn spawnCall; - public CxxCilkSpawn(CilkSpawn spawnCall) { - super(new CxxCall(spawnCall)); + public CxxCilkSpawn(CilkSpawn spawnCall, CxxWeaver weaver) { + super(new CxxCall(spawnCall, weaver), weaver); this.spawnCall = spawnCall; } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/cilk/CxxCilkSync.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/cilk/CxxCilkSync.java index e3a0f2333..0f66786db 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/cilk/CxxCilkSync.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/cilk/CxxCilkSync.java @@ -15,6 +15,7 @@ import pt.up.fe.specs.clava.ClavaNode; import pt.up.fe.specs.clava.ast.cilk.CilkSync; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ACilkSync; import pt.up.fe.specs.clava.weaver.joinpoints.CxxStatement; @@ -22,8 +23,8 @@ public class CxxCilkSync extends ACilkSync { private final CilkSync cilkSync; - public CxxCilkSync(CilkSync cilkSync) { - super(new CxxStatement(cilkSync)); + public CxxCilkSync(CilkSync cilkSync, CxxWeaver weaver) { + super(new CxxStatement(cilkSync, weaver), weaver); this.cilkSync = cilkSync; } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxAdjustedType.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxAdjustedType.java index c421ef1f4..db1b8f34c 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxAdjustedType.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxAdjustedType.java @@ -16,6 +16,7 @@ import pt.up.fe.specs.clava.ClavaNode; import pt.up.fe.specs.clava.ast.type.AdjustedType; import pt.up.fe.specs.clava.weaver.CxxJoinpoints; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AAdjustedType; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AType; @@ -23,8 +24,8 @@ public class CxxAdjustedType extends AAdjustedType { private final AdjustedType adjustedType; - public CxxAdjustedType(AdjustedType adjustedType) { - super(new CxxType(adjustedType)); + public CxxAdjustedType(AdjustedType adjustedType, CxxWeaver weaver) { + super(new CxxType(adjustedType, weaver), weaver); this.adjustedType = adjustedType; } @@ -36,7 +37,7 @@ public ClavaNode getNode() { @Override public AType getOriginalTypeImpl() { - return CxxJoinpoints.create(adjustedType.get(AdjustedType.ORIGINAL_TYPE), AType.class); + return CxxJoinpoints.create(adjustedType.get(AdjustedType.ORIGINAL_TYPE), getWeaverEngine(), AType.class); } @Override diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxArrayType.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxArrayType.java index 1dba7a5ca..b1c3ae53b 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxArrayType.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxArrayType.java @@ -17,6 +17,7 @@ import pt.up.fe.specs.clava.ast.type.ArrayType; import pt.up.fe.specs.clava.ast.type.Type; import pt.up.fe.specs.clava.weaver.CxxJoinpoints; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AArrayType; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AType; @@ -24,8 +25,8 @@ public class CxxArrayType extends AArrayType { private final ArrayType arrayType; - public CxxArrayType(ArrayType arrayType) { - super(new CxxType(arrayType)); + public CxxArrayType(ArrayType arrayType, CxxWeaver weaver) { + super(new CxxType(arrayType, weaver), weaver); this.arrayType = arrayType; } @@ -37,7 +38,7 @@ public ClavaNode getNode() { @Override public AType getElementTypeImpl() { - return CxxJoinpoints.create(arrayType.getElementType(), AType.class); + return CxxJoinpoints.create(arrayType.getElementType(), getWeaverEngine(), AType.class); } @Override diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxBuiltinType.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxBuiltinType.java index 77a18e433..323de90ca 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxBuiltinType.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxBuiltinType.java @@ -15,14 +15,15 @@ import pt.up.fe.specs.clava.ClavaNode; import pt.up.fe.specs.clava.ast.type.BuiltinType; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ABuiltinType; public class CxxBuiltinType extends ABuiltinType { private final BuiltinType builtinType; - public CxxBuiltinType(BuiltinType builtinType) { - super(new CxxType(builtinType)); + public CxxBuiltinType(BuiltinType builtinType, CxxWeaver weaver) { + super(new CxxType(builtinType, weaver), weaver); this.builtinType = builtinType; } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxElaboratedType.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxElaboratedType.java index 5df0b678a..8d2fea778 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxElaboratedType.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxElaboratedType.java @@ -16,6 +16,7 @@ import pt.up.fe.specs.clava.ClavaNode; import pt.up.fe.specs.clava.ast.type.ElaboratedType; import pt.up.fe.specs.clava.weaver.CxxJoinpoints; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AElaboratedType; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AType; import pt.up.fe.specs.util.SpecsStrings; @@ -24,8 +25,8 @@ public class CxxElaboratedType extends AElaboratedType { private final ElaboratedType elaboratedType; - public CxxElaboratedType(ElaboratedType elaboratedType) { - super(new CxxType(elaboratedType)); + public CxxElaboratedType(ElaboratedType elaboratedType, CxxWeaver weaver) { + super(new CxxType(elaboratedType, weaver), weaver); this.elaboratedType = elaboratedType; } @@ -50,7 +51,7 @@ public String getKeywordImpl() { @Override public AType getNamedTypeImpl() { - return CxxJoinpoints.create(elaboratedType.get(ElaboratedType.NAMED_TYPE), AType.class); + return CxxJoinpoints.create(elaboratedType.get(ElaboratedType.NAMED_TYPE), getWeaverEngine(), AType.class); } } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxEnumType.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxEnumType.java index 3bada0814..ddd9418d1 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxEnumType.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxEnumType.java @@ -17,6 +17,7 @@ import pt.up.fe.specs.clava.ast.extra.App; import pt.up.fe.specs.clava.ast.type.EnumType; import pt.up.fe.specs.clava.weaver.CxxJoinpoints; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AEnumType; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AType; import pt.up.fe.specs.util.SpecsLogs; @@ -24,8 +25,8 @@ public class CxxEnumType extends AEnumType { private final EnumType enumType; - public CxxEnumType(EnumType enumType) { - super(new CxxTagType(enumType)); + public CxxEnumType(EnumType enumType, CxxWeaver weaver) { + super(new CxxTagType(enumType, weaver), weaver); this.enumType = enumType; } @@ -42,7 +43,7 @@ public AType getIntegerTypeImpl() { return null; } - return CxxJoinpoints.create(enumType.getEnumDecl((App) getRootImpl().getNode()).getIntegerType(), AType.class); + return CxxJoinpoints.create(enumType.getEnumDecl((App) getRootImpl().getNode()).getIntegerType(), getWeaverEngine(), AType.class); } } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxFunctionType.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxFunctionType.java index 563b814d6..b2f215ca3 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxFunctionType.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxFunctionType.java @@ -16,6 +16,7 @@ import pt.up.fe.specs.clava.ast.type.FunctionType; import pt.up.fe.specs.clava.ast.type.Type; import pt.up.fe.specs.clava.weaver.CxxJoinpoints; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AFunctionType; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AType; @@ -23,8 +24,8 @@ public class CxxFunctionType extends AFunctionType { private final FunctionType type; - public CxxFunctionType(FunctionType type) { - super(new CxxType(type)); + public CxxFunctionType(FunctionType type, CxxWeaver weaver) { + super(new CxxType(type, weaver), weaver); this.type = type; } @@ -35,14 +36,14 @@ public Type getNode() { @Override public AType getReturnTypeImpl() { - return CxxJoinpoints.create(type.getReturnType(), AType.class); + return CxxJoinpoints.create(type.getReturnType(), getWeaverEngine(), AType.class); } @Override public AType[] getParamTypesArrayImpl() { return type.getParamTypes().stream() - .map(paramType -> CxxJoinpoints.create(paramType)) + .map(paramType -> CxxJoinpoints.create(paramType, getWeaverEngine())) .toArray(size -> new AType[size]); } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxIncompleteArrayType.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxIncompleteArrayType.java index 87ec68454..23e1029d2 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxIncompleteArrayType.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxIncompleteArrayType.java @@ -15,14 +15,15 @@ import pt.up.fe.specs.clava.ClavaNode; import pt.up.fe.specs.clava.ast.type.IncompleteArrayType; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AIncompleteArrayType; public class CxxIncompleteArrayType extends AIncompleteArrayType { private final IncompleteArrayType arrayType; - public CxxIncompleteArrayType(IncompleteArrayType arrayType) { - super(new CxxArrayType(arrayType)); + public CxxIncompleteArrayType(IncompleteArrayType arrayType, CxxWeaver weaver) { + super(new CxxArrayType(arrayType, weaver), weaver); this.arrayType = arrayType; } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxParenType.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxParenType.java index 961150d2d..5c1c07265 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxParenType.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxParenType.java @@ -17,6 +17,7 @@ import pt.up.fe.specs.clava.ast.type.ParenType; import pt.up.fe.specs.clava.ast.type.Type; import pt.up.fe.specs.clava.weaver.CxxJoinpoints; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AParenType; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AType; @@ -24,8 +25,8 @@ public class CxxParenType extends AParenType { private final ParenType parenType; - public CxxParenType(ParenType parenType) { - super(new CxxType(parenType)); + public CxxParenType(ParenType parenType, CxxWeaver weaver) { + super(new CxxType(parenType, weaver), weaver); this.parenType = parenType; } @@ -37,7 +38,7 @@ public ClavaNode getNode() { @Override public AType getInnerTypeImpl() { - return CxxJoinpoints.create(parenType.getInnerType(), AType.class); + return CxxJoinpoints.create(parenType.getInnerType(), getWeaverEngine(), AType.class); } @Override diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxPointerType.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxPointerType.java index 955089501..e2a6baedf 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxPointerType.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxPointerType.java @@ -17,6 +17,7 @@ import pt.up.fe.specs.clava.ast.type.PointerType; import pt.up.fe.specs.clava.ast.type.Type; import pt.up.fe.specs.clava.weaver.CxxJoinpoints; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.APointerType; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AType; @@ -24,8 +25,8 @@ public class CxxPointerType extends APointerType { private final PointerType pointerType; - public CxxPointerType(PointerType pointerType) { - super(new CxxType(pointerType)); + public CxxPointerType(PointerType pointerType, CxxWeaver weaver) { + super(new CxxType(pointerType, weaver), weaver); this.pointerType = pointerType; } @@ -37,7 +38,7 @@ public ClavaNode getNode() { @Override public AType getPointeeImpl() { - return CxxJoinpoints.create(pointerType.getPointeeType(), AType.class); + return CxxJoinpoints.create(pointerType.getPointeeType(), getWeaverEngine(), AType.class); } @Override diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxQualType.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxQualType.java index d6d689ef4..d9302ee27 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxQualType.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxQualType.java @@ -16,6 +16,7 @@ import pt.up.fe.specs.clava.ClavaNode; import pt.up.fe.specs.clava.ast.type.QualType; import pt.up.fe.specs.clava.weaver.CxxJoinpoints; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AQualType; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AType; @@ -23,8 +24,8 @@ public class CxxQualType extends AQualType { private final QualType qualType; - public CxxQualType(QualType qualType) { - super(new CxxType(qualType)); + public CxxQualType(QualType qualType, CxxWeaver weaver) { + super(new CxxType(qualType, weaver), weaver); this.qualType = qualType; } @@ -41,6 +42,6 @@ public String[] getQualifiersArrayImpl() { @Override public AType getUnqualifiedTypeImpl() { - return CxxJoinpoints.create(qualType.getUnqualifiedType(), AType.class); + return CxxJoinpoints.create(qualType.getUnqualifiedType(), getWeaverEngine(), AType.class); } } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxTagType.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxTagType.java index 26fdc8773..dcb21a6bd 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxTagType.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxTagType.java @@ -17,14 +17,15 @@ import pt.up.fe.specs.clava.ast.decl.TagDecl; import pt.up.fe.specs.clava.ast.type.TagType; import pt.up.fe.specs.clava.weaver.CxxJoinpoints; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ADecl; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ATagType; public class CxxTagType extends ATagType { private final TagType tagType; - public CxxTagType(TagType tagType) { - super(new CxxType(tagType)); + public CxxTagType(TagType tagType, CxxWeaver weaver) { + super(new CxxType(tagType, weaver), weaver); this.tagType = tagType; } @@ -41,7 +42,7 @@ public String getNameImpl() { @Override public ADecl getDeclImpl() { - return CxxJoinpoints.create(tagType.getDecl(), ADecl.class); + return CxxJoinpoints.create(tagType.getDecl(), getWeaverEngine(), ADecl.class); } } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxTemplateSpecializationType.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxTemplateSpecializationType.java index e1dc62d9e..0e14b963f 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxTemplateSpecializationType.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxTemplateSpecializationType.java @@ -20,15 +20,16 @@ import pt.up.fe.specs.clava.ast.type.TemplateSpecializationType; import pt.up.fe.specs.clava.ast.type.Type; import pt.up.fe.specs.clava.weaver.CxxJoinpoints; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ATemplateSpecializationType; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AType; public class CxxTemplateSpecializationType extends ATemplateSpecializationType { private final TemplateSpecializationType templateSpecializationType; - public CxxTemplateSpecializationType(TemplateSpecializationType templateSpecializationType) { + public CxxTemplateSpecializationType(TemplateSpecializationType templateSpecializationType, CxxWeaver weaver) { - super(new CxxType(templateSpecializationType)); + super(new CxxType(templateSpecializationType, weaver), weaver); this.templateSpecializationType = templateSpecializationType; } @@ -63,7 +64,7 @@ public AType getFirstArgTypeImpl() { return null; } - return (AType) CxxJoinpoints.create(templateArgTypes.get(0)); + return CxxJoinpoints.create(templateArgTypes.get(0), getWeaverEngine(), AType.class); } } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxType.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxType.java index 8574a7498..33c0076d4 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxType.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxType.java @@ -32,13 +32,15 @@ import pt.up.fe.specs.clava.ast.type.ConstantArrayType; import pt.up.fe.specs.clava.ast.type.Type; import pt.up.fe.specs.clava.weaver.CxxJoinpoints; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AType; public class CxxType extends AType { private final Type type; - public CxxType(Type type) { + public CxxType(Type type, CxxWeaver weaver) { + super(weaver); this.type = type; } @@ -100,12 +102,12 @@ public Boolean getHasSugarImpl() { @Override public AType getDesugarImpl() { - return CxxJoinpoints.create(type.desugar(), AType.class); + return CxxJoinpoints.create(type.desugar(), getWeaverEngine(), AType.class); } @Override public AType getDesugarAllImpl() { - return CxxJoinpoints.create(type.desugarAll(), AType.class); + return CxxJoinpoints.create(type.desugarAll(), getWeaverEngine(), AType.class); } @Override @@ -142,7 +144,7 @@ public AType getUnwrapImpl() { return null; } - return (AType) CxxJoinpoints.create(unwrappedType); + return CxxJoinpoints.create(unwrappedType, getWeaverEngine(), AType.class); } @Override @@ -154,7 +156,7 @@ public Boolean getIsTopLevelImpl() { @Override public AType[] getTemplateArgsTypesArrayImpl() { return type.getTemplateArgumentTypes().stream() - .map(argType -> (AType) CxxJoinpoints.create(argType)) + .map(argType -> CxxJoinpoints.create(argType, getWeaverEngine(), AType.class)) .toArray(size -> new AType[size]); } @@ -176,7 +178,7 @@ public void setTemplateArgTypeImpl(int index, AType templateArgType) { @Override public AType getNormalizeImpl() { - return CxxJoinpoints.create(type.normalize(), AType.class); + return CxxJoinpoints.create(type.normalize(), getWeaverEngine(), AType.class); } @Override @@ -202,7 +204,7 @@ public Map getTypeFieldsImpl() { continue; } - typeFields.put(key.getName(), CxxJoinpoints.create(values.get(0), AType.class)); + typeFields.put(key.getName(), CxxJoinpoints.create(values.get(0), getWeaverEngine(), AType.class)); } return typeFields; @@ -275,7 +277,7 @@ public String getFieldTreeImpl() { @Override public AType setUnderlyingTypeImpl(AType oldValue, AType newValue) { return CxxJoinpoints.create(type.setUnderlyingType((Type) oldValue.getNode(), (Type) newValue.getNode()), - AType.class); + getWeaverEngine(), AType.class); } @Override @@ -285,6 +287,6 @@ public Boolean getIsAutoImpl() { @Override public AType asConstImpl() { - return CxxJoinpoints.create(type.asConst(), AType.class); + return CxxJoinpoints.create(type.asConst(), getWeaverEngine(), AType.class); } } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxTypedefType.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxTypedefType.java index 98d6720ab..8e6f07a38 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxTypedefType.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxTypedefType.java @@ -17,6 +17,7 @@ import pt.up.fe.specs.clava.ast.decl.TypedefNameDecl; import pt.up.fe.specs.clava.ast.type.TypedefType; import pt.up.fe.specs.clava.weaver.CxxJoinpoints; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AType; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ATypedefNameDecl; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ATypedefType; @@ -25,14 +26,14 @@ public class CxxTypedefType extends ATypedefType { private final TypedefType typedefType; - public CxxTypedefType(TypedefType typedefType) { - super(new CxxType(typedefType)); + public CxxTypedefType(TypedefType typedefType, CxxWeaver weaver) { + super(new CxxType(typedefType, weaver), weaver); this.typedefType = typedefType; } @Override public ATypedefNameDecl getDeclImpl() { - return CxxJoinpoints.create(typedefType.get(TypedefType.DECL), ATypedefNameDecl.class); + return CxxJoinpoints.create(typedefType.get(TypedefType.DECL), getWeaverEngine(), ATypedefNameDecl.class); } @Override @@ -43,7 +44,7 @@ public ClavaNode getNode() { @Override public AType getUnderlyingTypeImpl() { return CxxJoinpoints.create(typedefType.get(TypedefType.DECL).get(TypedefNameDecl.UNDERLYING_TYPE), - AType.class); + getWeaverEngine(), AType.class); } } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxUndefinedType.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxUndefinedType.java index 666336b7a..57af71050 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxUndefinedType.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxUndefinedType.java @@ -15,14 +15,15 @@ import pt.up.fe.specs.clava.ast.type.NullType; import pt.up.fe.specs.clava.ast.type.Type; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AUndefinedType; public class CxxUndefinedType extends AUndefinedType { private final NullType nullType; - public CxxUndefinedType(NullType nullType) { - super(new CxxType(nullType)); + public CxxUndefinedType(NullType nullType, CxxWeaver weaver) { + super(new CxxType(nullType, weaver), weaver); this.nullType = nullType; } diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxVariableArrayType.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxVariableArrayType.java index 0aa262b6a..379f32197 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxVariableArrayType.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/joinpoints/types/CxxVariableArrayType.java @@ -17,6 +17,7 @@ import pt.up.fe.specs.clava.ast.expr.Expr; import pt.up.fe.specs.clava.ast.type.VariableArrayType; import pt.up.fe.specs.clava.weaver.CxxJoinpoints; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AExpression; import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AVariableArrayType; @@ -24,8 +25,8 @@ public class CxxVariableArrayType extends AVariableArrayType { private final VariableArrayType arrayType; - public CxxVariableArrayType(VariableArrayType arrayType) { - super(new CxxArrayType(arrayType)); + public CxxVariableArrayType(VariableArrayType arrayType, CxxWeaver weaver) { + super(new CxxArrayType(arrayType, weaver), weaver); this.arrayType = arrayType; } @@ -37,7 +38,7 @@ public ClavaNode getNode() { @Override public AExpression getSizeExprImpl() { - return (AExpression) CxxJoinpoints.create(arrayType.get(VariableArrayType.SIZE_EXPR)); + return CxxJoinpoints.create(arrayType.get(VariableArrayType.SIZE_EXPR), getWeaverEngine(), AExpression.class); } @Override diff --git a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/pragmas/ClavaPragmas.java b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/pragmas/ClavaPragmas.java index 599ad3eb6..87ce08598 100644 --- a/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/pragmas/ClavaPragmas.java +++ b/ClavaWeaver/src/pt/up/fe/specs/clava/weaver/pragmas/ClavaPragmas.java @@ -22,6 +22,7 @@ import pt.up.fe.specs.clava.ast.extra.App; import pt.up.fe.specs.clava.ast.pragma.Pragma; import pt.up.fe.specs.clava.weaver.CxxJoinpoints; +import pt.up.fe.specs.clava.weaver.CxxWeaver; import pt.up.fe.specs.clava.weaver.abstracts.ACxxWeaverJoinPoint; import pt.up.fe.specs.util.stringparser.StringParser; import pt.up.fe.specs.util.stringparser.StringParsers; @@ -33,13 +34,13 @@ public class ClavaPragmas { CLAVA_DIRECTIVES_MAP = new HashMap<>(); } - public static void processClavaPragmas(App app) { + public static void processClavaPragmas(App app, CxxWeaver weaver) { app.getDescendants(Pragma.class).stream() .filter(pragma -> pragma.getName().toLowerCase().equals("clava")) - .forEach(ClavaPragmas::processClavaPragma); + .forEach(pragma -> processClavaPragma(pragma, weaver)); } - private static void processClavaPragma(Pragma clavaPragma) { + private static void processClavaPragma(Pragma clavaPragma, CxxWeaver weaver) { Optional clavaDirective = getDirective(clavaPragma); if (clavaDirective.isPresent()) { @@ -50,7 +51,7 @@ private static void processClavaPragma(Pragma clavaPragma) { return; } - ACxxWeaverJoinPoint jp = CxxJoinpoints.create(targetNode.get()); + ACxxWeaverJoinPoint jp = CxxJoinpoints.create(targetNode.get(), weaver); clavaDirective.ifPresent(directive -> directive.apply(jp)); return; }