Skip to content

Commit

Permalink
Adds ClavaJoinPoints.program()
Browse files Browse the repository at this point in the history
  • Loading branch information
joaobispo committed Aug 8, 2024
1 parent dddbe30 commit 5c00a1b
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 104 deletions.
9 changes: 9 additions & 0 deletions Clava-JS/src-api/clava/ClavaJoinPoints.ts
Original file line number Diff line number Diff line change
Expand Up @@ -853,4 +853,13 @@ export default class ClavaJoinPoints {
static declLiteral(declString: string): Joinpoints.Decl {
return wrapJoinPoint(ClavaJavaTypes.AstFactory.declLiteral(declString));
}

/**
* Creates a new empty join point 'program'.
*
* @param declString - The literal code of the decl.
*/
static program(): Joinpoints.Program {
return wrapJoinPoint(ClavaJavaTypes.AstFactory.program());
}
}
8 changes: 8 additions & 0 deletions ClavaLaraApi/src-lara/clava/clava/ClavaJoinPoints.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

133 changes: 29 additions & 104 deletions ClavaWeaver/src/pt/up/fe/specs/clava/weaver/importable/AstFactory.java
Original file line number Diff line number Diff line change
@@ -1,70 +1,30 @@
/**
* Copyright 2016 SPeCS.
*
* <p>
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
*
* <p>
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License. under the License.
*/

package pt.up.fe.specs.clava.weaver.importable;

import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.ListIterator;
import java.util.stream.Collectors;

import org.suikasoft.jOptions.Interfaces.DataStore;

import pt.up.fe.specs.clava.ClavaLog;
import pt.up.fe.specs.clava.ClavaNode;
import pt.up.fe.specs.clava.ClavaNodes;
import pt.up.fe.specs.clava.ClavaOptions;
import pt.up.fe.specs.clava.Types;
import pt.up.fe.specs.clava.ast.decl.Decl;
import pt.up.fe.specs.clava.ast.decl.FieldDecl;
import pt.up.fe.specs.clava.ast.decl.FunctionDecl;
import pt.up.fe.specs.clava.ast.decl.LabelDecl;
import pt.up.fe.specs.clava.ast.decl.LinkageSpecDecl;
import pt.up.fe.specs.clava.ast.decl.NamedDecl;
import pt.up.fe.specs.clava.ast.decl.ParmVarDecl;
import pt.up.fe.specs.clava.ast.decl.TypedefDecl;
import pt.up.fe.specs.clava.ast.decl.ValueDecl;
import pt.up.fe.specs.clava.ast.decl.VarDecl;
import pt.up.fe.specs.clava.*;
import pt.up.fe.specs.clava.ast.decl.*;
import pt.up.fe.specs.clava.ast.decl.enums.LanguageId;
import pt.up.fe.specs.clava.ast.expr.BinaryOperator;
import pt.up.fe.specs.clava.ast.expr.CallExpr;
import pt.up.fe.specs.clava.ast.expr.ConditionalOperator;
import pt.up.fe.specs.clava.ast.expr.DeclRefExpr;
import pt.up.fe.specs.clava.ast.expr.Expr;
import pt.up.fe.specs.clava.ast.expr.FloatingLiteral;
import pt.up.fe.specs.clava.ast.expr.IntegerLiteral;
import pt.up.fe.specs.clava.ast.expr.ParenExpr;
import pt.up.fe.specs.clava.ast.expr.UnaryOperator;
import pt.up.fe.specs.clava.ast.expr.*;
import pt.up.fe.specs.clava.ast.expr.enums.BinaryOperatorKind;
import pt.up.fe.specs.clava.ast.expr.enums.FloatKind;
import pt.up.fe.specs.clava.ast.expr.enums.UnaryOperatorKind;
import pt.up.fe.specs.clava.ast.extra.TranslationUnit;
import pt.up.fe.specs.clava.ast.omp.OmpDirectiveKind;
import pt.up.fe.specs.clava.ast.stmt.BreakStmt;
import pt.up.fe.specs.clava.ast.stmt.CaseStmt;
import pt.up.fe.specs.clava.ast.stmt.CompoundStmt;
import pt.up.fe.specs.clava.ast.stmt.ExprStmt;
import pt.up.fe.specs.clava.ast.stmt.IfStmt;
import pt.up.fe.specs.clava.ast.stmt.Stmt;
import pt.up.fe.specs.clava.ast.type.BuiltinType;
import pt.up.fe.specs.clava.ast.type.FunctionProtoType;
import pt.up.fe.specs.clava.ast.type.FunctionType;
import pt.up.fe.specs.clava.ast.type.NullType;
import pt.up.fe.specs.clava.ast.type.PointerType;
import pt.up.fe.specs.clava.ast.type.Type;
import pt.up.fe.specs.clava.ast.stmt.*;
import pt.up.fe.specs.clava.ast.type.*;
import pt.up.fe.specs.clava.ast.type.enums.BuiltinKind;
import pt.up.fe.specs.clava.ast.type.enums.ElaboratedTypeKeyword;
import pt.up.fe.specs.clava.language.AccessSpecifier;
Expand All @@ -74,47 +34,15 @@
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.clava.weaver.abstracts.joinpoints.AAccessSpecifier;
import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ABinaryOp;
import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ACall;
import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ACast;
import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AClass;
import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AComment;
import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ADecl;
import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AEmptyStmt;
import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ADeclStmt;
import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AElaboratedType;
import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AExprStmt;
import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AExpression;
import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AField;
import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AFile;
import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AFunction;
import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AFunctionType;
import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AGotoStmt;
import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AIf;
import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AJoinPoint;
import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ALabelDecl;
import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ALabelStmt;
import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ALoop;
import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ANamedDecl;
import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AParam;
import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AScope;
import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AStatement;
import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AStruct;
import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ATernaryOp;
import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AType;
import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.ATypedefDecl;
import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AUnaryOp;
import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AVardecl;
import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.AVarref;
import pt.up.fe.specs.clava.weaver.abstracts.joinpoints.*;
import pt.up.fe.specs.clava.weaver.joinpoints.CxxFunction;
import pt.up.fe.specs.util.Preconditions;
import pt.up.fe.specs.util.SpecsCollections;
import pt.up.fe.specs.util.SpecsEnums;
import pt.up.fe.specs.util.SpecsIo;
import pt.up.fe.specs.util.SpecsLogs;
import pt.up.fe.specs.util.*;
import pt.up.fe.specs.util.utilities.StringLines;

import java.io.File;
import java.util.*;
import java.util.stream.Collectors;

public class AstFactory {

/**
Expand Down Expand Up @@ -298,7 +226,7 @@ public static AFile file(File file, String relativePath) {

/**
* Overload that accepts the contents of the file, to be inserted literally.
*
*
* @param filename
* @param contents
* @param relativePath
Expand Down Expand Up @@ -399,7 +327,6 @@ public static AStatement caseStmt(AExpression value, AStatement subStmt) {
}

/**
*
* @param value
* @param expr
* @return a list with a case statement and a break statement
Expand Down Expand Up @@ -803,9 +730,8 @@ public static ADeclStmt declStmt(ADecl... decls) {
/**
* Creates a joinpoint representing a declaration of a label. This is not a `label:` statement. For that, you must
* create a `labelStmt` with returned `labelDecl`. This joinpoint is also used to create `gotoStmt`s.
*
* @param name
* Name of the label
*
* @param name Name of the label
* @return The created label declaration
*/
public static ALabelDecl labelDecl(String name) {
Expand All @@ -815,9 +741,8 @@ public static ALabelDecl labelDecl(String name) {

/**
* Creates a join point representing a label statement in the code.
*
* @param decl
* The declaration for this statement
*
* @param decl The declaration for this statement
* @return The label statement to be used in the code.
*/
public static ALabelStmt labelStmt(ALabelDecl decl) {
Expand All @@ -827,9 +752,8 @@ public static ALabelStmt labelStmt(ALabelDecl decl) {

/**
* Convenience method to create at once a label statement and its declaration
*
* @param name
* Name of the label
*
* @param name Name of the label
* @return The created
*/
public static ALabelStmt labelStmt(String name) {
Expand All @@ -838,18 +762,19 @@ public static ALabelStmt labelStmt(String name) {

/**
* Create a joinpoint representing a goto statement.
*
* @param label
* The declaration of the label to jump to
*
* @param label The declaration of the label to jump to
* @return The created goto statement
*/
public static AGotoStmt gotoStmt(ALabelDecl label) {
var stmt = label.getFactory().gotoStmt((LabelDecl) label.getNode());
return CxxJoinpoints.create(stmt, AGotoStmt.class);
}

public static AEmptyStmt emptyStmt() {
var stmt = CxxWeaver.getFactory().emptyStmt();
return CxxJoinpoints.create(stmt, AEmptyStmt.class);


public static AProgram program() {
var app = CxxWeaver.getFactory().app(Collections.emptyList());
return CxxJoinpoints.create(app, AProgram.class);
}

}

0 comments on commit 5c00a1b

Please sign in to comment.