Skip to content

Commit 403eab5

Browse files
committed
refactored code: replaced anonymous function term with lambda
1 parent 5060635 commit 403eab5

File tree

31 files changed

+179
-189
lines changed

31 files changed

+179
-189
lines changed

src/app/src/main/antlr/org/smoothbuild/antlr/lang/SmoothAntlr.g4

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ item : type NAME ( '=' expr )? ;
1313
annotation : '@' NAME '(' STRING ')' ;
1414
pipe : expr ( p+='>' expr )* ;
1515
expr : chain
16-
| anonymousFunc
16+
| lambda
1717
;
1818
chain : chainHead ( chainPart )* ;
1919
chainHead : NAME
@@ -29,7 +29,7 @@ argList : '(' ( arg ( ',' arg )* ','? )? ')' ;
2929
arg : ( NAME '=' )? expr ;
3030
select : '.' NAME ;
3131
array : '[' ( expr (',' expr)* (',')? )? ']' ;
32-
anonymousFunc : '(' itemList ')' '->' expr ;
32+
lambda : '(' itemList ')' '->' expr ;
3333
type : NAME # typeName
3434
| '[' type ']' # arrayT
3535
| '(' ( type (',' type)*)? ')' '->' type # funcT

src/app/src/main/java/org/smoothbuild/compile/fs/fp/ApTranslator.java

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import org.antlr.v4.runtime.tree.TerminalNode;
2020
import org.smoothbuild.antlr.lang.SmoothAntlrBaseVisitor;
2121
import org.smoothbuild.antlr.lang.SmoothAntlrParser.AnnotationContext;
22-
import org.smoothbuild.antlr.lang.SmoothAntlrParser.AnonymousFuncContext;
2322
import org.smoothbuild.antlr.lang.SmoothAntlrParser.ArgContext;
2423
import org.smoothbuild.antlr.lang.SmoothAntlrParser.ArgListContext;
2524
import org.smoothbuild.antlr.lang.SmoothAntlrParser.ArrayTContext;
@@ -30,6 +29,7 @@
3029
import org.smoothbuild.antlr.lang.SmoothAntlrParser.FuncTContext;
3130
import org.smoothbuild.antlr.lang.SmoothAntlrParser.ItemContext;
3231
import org.smoothbuild.antlr.lang.SmoothAntlrParser.ItemListContext;
32+
import org.smoothbuild.antlr.lang.SmoothAntlrParser.LambdaContext;
3333
import org.smoothbuild.antlr.lang.SmoothAntlrParser.ModuleContext;
3434
import org.smoothbuild.antlr.lang.SmoothAntlrParser.NamedFuncContext;
3535
import org.smoothbuild.antlr.lang.SmoothAntlrParser.NamedValueContext;
@@ -42,7 +42,6 @@
4242
import org.smoothbuild.compile.fs.lang.base.location.Locations;
4343
import org.smoothbuild.compile.fs.ps.CompileError;
4444
import org.smoothbuild.compile.fs.ps.ast.define.AnnotationP;
45-
import org.smoothbuild.compile.fs.ps.ast.define.AnonymousFuncP;
4645
import org.smoothbuild.compile.fs.ps.ast.define.ArrayTP;
4746
import org.smoothbuild.compile.fs.ps.ast.define.BlobP;
4847
import org.smoothbuild.compile.fs.ps.ast.define.CallP;
@@ -53,6 +52,7 @@
5352
import org.smoothbuild.compile.fs.ps.ast.define.InstantiateP;
5453
import org.smoothbuild.compile.fs.ps.ast.define.IntP;
5554
import org.smoothbuild.compile.fs.ps.ast.define.ItemP;
55+
import org.smoothbuild.compile.fs.ps.ast.define.LambdaP;
5656
import org.smoothbuild.compile.fs.ps.ast.define.ModuleP;
5757
import org.smoothbuild.compile.fs.ps.ast.define.NamedArgP;
5858
import org.smoothbuild.compile.fs.ps.ast.define.NamedEvaluableP;
@@ -105,7 +105,7 @@ private static class ApTranslatingVisitor extends SmoothAntlrBaseVisitor<Void> {
105105
private final ArrayList<NamedEvaluableP> evaluables;
106106
private final LogBuffer logs;
107107
private final String scopeName;
108-
private int anonymousFuncCount;
108+
private int lambdaCount;
109109

110110
public ApTranslatingVisitor(FilePath filePath, ArrayList<StructP> structs,
111111
ArrayList<NamedEvaluableP> evaluables, LogBuffer logs) {
@@ -123,7 +123,7 @@ public ApTranslatingVisitor(
123123
this.evaluables = evaluables;
124124
this.logs = logs;
125125
this.scopeName = scopeName;
126-
this.anonymousFuncCount = 0;
126+
this.lambdaCount = 0;
127127
}
128128

129129
@Override
@@ -251,8 +251,8 @@ private ExprP createExpr(ExprContext expr) {
251251
private ExprP createExpr(AtomicReference<ExprP> piped, ExprContext expr) {
252252
if (expr.chain() != null) {
253253
return createChain(piped, expr.chain());
254-
} else if (expr.anonymousFunc() != null) {
255-
return createAnonymousFunc(expr.anonymousFunc());
254+
} else if (expr.lambda() != null) {
255+
return createLambda(expr.lambda());
256256
} else {
257257
throw new RuntimeException("shouldn't happen");
258258
}
@@ -313,13 +313,13 @@ private ExprP createChain(AtomicReference<ExprP> pipedArg, ExprP chainHead,
313313
return result;
314314
}
315315

316-
private InstantiateP createAnonymousFunc(AnonymousFuncContext anonymousFunc) {
317-
var fullName = createFullName("^" + (++anonymousFuncCount));
318-
var params = createItems(fullName, anonymousFunc.itemList());
319-
var body = createExpr(anonymousFunc.expr());
320-
var location = fileLocation(filePath, anonymousFunc);
321-
var anonymousFuncP = new AnonymousFuncP(fullName, params, body, location);
322-
return new InstantiateP(anonymousFuncP, location);
316+
private InstantiateP createLambda(LambdaContext lambdaFunc) {
317+
var fullName = createFullName("^" + (++lambdaCount));
318+
var params = createItems(fullName, lambdaFunc.itemList());
319+
var body = createExpr(lambdaFunc.expr());
320+
var location = fileLocation(filePath, lambdaFunc);
321+
var lambdaFuncP = new LambdaP(fullName, params, body, location);
322+
return new InstantiateP(lambdaFuncP, location);
323323
}
324324

325325
private StringP createStringNode(ParserRuleContext expr, TerminalNode quotedString) {

src/app/src/main/java/org/smoothbuild/compile/fs/fp/FindSyntaxErrors.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@
1010
import static org.smoothbuild.compile.fs.ps.CompileError.compileError;
1111

1212
import org.smoothbuild.compile.fs.ps.ast.ModuleVisitorP;
13-
import org.smoothbuild.compile.fs.ps.ast.define.AnonymousFuncP;
1413
import org.smoothbuild.compile.fs.ps.ast.define.ImplicitTP;
1514
import org.smoothbuild.compile.fs.ps.ast.define.ItemP;
15+
import org.smoothbuild.compile.fs.ps.ast.define.LambdaP;
1616
import org.smoothbuild.compile.fs.ps.ast.define.ModuleP;
1717
import org.smoothbuild.compile.fs.ps.ast.define.NamedFuncP;
1818
import org.smoothbuild.compile.fs.ps.ast.define.NamedValueP;
@@ -34,7 +34,7 @@ public static LogBuffer findSyntaxErrors(ModuleP moduleP) {
3434
detectIllegalNames(logBuffer, moduleP);
3535
detectIllegalAnnotations(logBuffer, moduleP);
3636
detectStructFieldWithDefaultValue(logBuffer, moduleP);
37-
detectAnonymousFuncParamWithDefaultValue(logBuffer, moduleP);
37+
detectLambdaParamWithDefaultValue(logBuffer, moduleP);
3838
return logBuffer;
3939
}
4040

@@ -143,18 +143,18 @@ private void logErrorIfDefaultValuePresent(ItemP param) {
143143
}.visitModule(moduleP);
144144
}
145145

146-
private static void detectAnonymousFuncParamWithDefaultValue(LogBuffer logger, ModuleP moduleP) {
146+
private static void detectLambdaParamWithDefaultValue(LogBuffer logger, ModuleP moduleP) {
147147
new ModuleVisitorP() {
148148
@Override
149-
public void visitAnonymousFunc(AnonymousFuncP anonymousFuncP) {
150-
super.visitAnonymousFunc(anonymousFuncP);
151-
anonymousFuncP.params().forEach(this::logErrorIfDefaultValuePresent);
149+
public void visitLambda(LambdaP lambdaP) {
150+
super.visitLambda(lambdaP);
151+
lambdaP.params().forEach(this::logErrorIfDefaultValuePresent);
152152
}
153153

154154
private void logErrorIfDefaultValuePresent(ItemP param) {
155155
if (param.defaultValue().isPresent()) {
156156
logger.log(compileError(param.location(),
157-
"Parameter " + param.q() + " of anonymous function cannot have default value."));
157+
"Parameter " + param.q() + " of lambda cannot have default value."));
158158
}
159159
}
160160
}.visitModule(moduleP);

src/app/src/main/java/org/smoothbuild/compile/fs/lang/define/ExprFuncS.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@
22

33
public sealed interface ExprFuncS
44
extends FuncS
5-
permits AnonymousFuncS, NamedExprFuncS {
5+
permits LambdaS, NamedExprFuncS {
66
public ExprS body();
77
}

src/app/src/main/java/org/smoothbuild/compile/fs/lang/define/AnonymousFuncS.java renamed to src/app/src/main/java/org/smoothbuild/compile/fs/lang/define/LambdaS.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,17 @@
99
import org.smoothbuild.util.collect.NList;
1010

1111
/**
12-
* Anonymous function.
12+
* Lambda.
13+
*
1314
* This class is immutable.
1415
*/
15-
public final class AnonymousFuncS implements ExprFuncS, PolymorphicS {
16+
public final class LambdaS implements ExprFuncS, PolymorphicS {
1617
private final FuncSchemaS schema;
1718
private final NList<ItemS> params;
1819
private final ExprS body;
1920
private final Location location;
2021

21-
public AnonymousFuncS(FuncSchemaS schema, NList<ItemS> params, ExprS body, Location location) {
22+
public LambdaS(FuncSchemaS schema, NList<ItemS> params, ExprS body, Location location) {
2223
this.schema = schema;
2324
this.params = params;
2425
this.body = body;
@@ -51,7 +52,7 @@ public boolean equals(Object object) {
5152
if (this == object) {
5253
return true;
5354
}
54-
return object instanceof AnonymousFuncS that
55+
return object instanceof LambdaS that
5556
&& this.schema.equals(that.schema)
5657
&& this.params.equals(that.params)
5758
&& this.body.equals(that.body)
@@ -66,6 +67,6 @@ public int hashCode() {
6667
@Override
6768
public String toString() {
6869
var fields = fieldsToString() + "\nbody = " + body;
69-
return "AnonymousFuncS(\n" + indent(fields) + "\n)";
70+
return "LambdaS(\n" + indent(fields) + "\n)";
7071
}
7172
}

src/app/src/main/java/org/smoothbuild/compile/fs/lang/define/PolymorphicS.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* Polymorphic entity.
88
*/
99
public sealed interface PolymorphicS
10-
permits AnonymousFuncS, ReferenceS {
10+
permits LambdaS, ReferenceS {
1111
public SchemaS schema();
1212
public Location location();
1313
}

src/app/src/main/java/org/smoothbuild/compile/fs/ps/PsConverter.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
import org.smoothbuild.compile.fs.lang.define.AnnotatedFuncS;
1616
import org.smoothbuild.compile.fs.lang.define.AnnotatedValueS;
1717
import org.smoothbuild.compile.fs.lang.define.AnnotationS;
18-
import org.smoothbuild.compile.fs.lang.define.AnonymousFuncS;
1918
import org.smoothbuild.compile.fs.lang.define.BlobS;
2019
import org.smoothbuild.compile.fs.lang.define.CallS;
2120
import org.smoothbuild.compile.fs.lang.define.CombineS;
@@ -24,6 +23,7 @@
2423
import org.smoothbuild.compile.fs.lang.define.InstantiateS;
2524
import org.smoothbuild.compile.fs.lang.define.IntS;
2625
import org.smoothbuild.compile.fs.lang.define.ItemS;
26+
import org.smoothbuild.compile.fs.lang.define.LambdaS;
2727
import org.smoothbuild.compile.fs.lang.define.ModuleS;
2828
import org.smoothbuild.compile.fs.lang.define.NamedEvaluableS;
2929
import org.smoothbuild.compile.fs.lang.define.NamedExprFuncS;
@@ -41,7 +41,6 @@
4141
import org.smoothbuild.compile.fs.lang.type.SchemaS;
4242
import org.smoothbuild.compile.fs.lang.type.TupleTS;
4343
import org.smoothbuild.compile.fs.ps.ast.define.AnnotationP;
44-
import org.smoothbuild.compile.fs.ps.ast.define.AnonymousFuncP;
4544
import org.smoothbuild.compile.fs.ps.ast.define.BlobP;
4645
import org.smoothbuild.compile.fs.ps.ast.define.CallP;
4746
import org.smoothbuild.compile.fs.ps.ast.define.ConstructorP;
@@ -50,6 +49,7 @@
5049
import org.smoothbuild.compile.fs.ps.ast.define.InstantiateP;
5150
import org.smoothbuild.compile.fs.ps.ast.define.IntP;
5251
import org.smoothbuild.compile.fs.ps.ast.define.ItemP;
52+
import org.smoothbuild.compile.fs.ps.ast.define.LambdaP;
5353
import org.smoothbuild.compile.fs.ps.ast.define.ModuleP;
5454
import org.smoothbuild.compile.fs.ps.ast.define.NamedArgP;
5555
import org.smoothbuild.compile.fs.ps.ast.define.NamedFuncP;
@@ -184,10 +184,10 @@ private ExprS convertExpr(ExprP expr) {
184184
// @formatter:on
185185
}
186186

187-
private AnonymousFuncS convertAnonymousFunc(AnonymousFuncP anonymousFuncP) {
188-
var params = convertParams(anonymousFuncP.params());
189-
var body = convertFuncBody(anonymousFuncP, anonymousFuncP.bodyGet());
190-
return new AnonymousFuncS(anonymousFuncP.schemaS(), params, body, anonymousFuncP.location());
187+
private LambdaS convertLambda(LambdaP lambdaP) {
188+
var params = convertParams(lambdaP.params());
189+
var body = convertFuncBody(lambdaP, lambdaP.bodyGet());
190+
return new LambdaS(lambdaP.schemaS(), params, body, lambdaP.location());
191191
}
192192

193193
private BlobS convertBlob(BlobP blob) {
@@ -217,7 +217,7 @@ private IntS convertInt(IntP int_) {
217217

218218
private PolymorphicS convertPolymorphic(PolymorphicP polymorphicP) {
219219
return switch (polymorphicP) {
220-
case AnonymousFuncP anonymousFuncP -> convertAnonymousFunc(anonymousFuncP);
220+
case LambdaP lambdaP -> convertLambda(lambdaP);
221221
case ReferenceP referenceP -> convertReference(referenceP);
222222
};
223223
}

src/app/src/main/java/org/smoothbuild/compile/fs/ps/ast/ModuleVisitorP.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@
33
import java.util.List;
44

55
import org.smoothbuild.compile.fs.ps.ast.define.AnnotationP;
6-
import org.smoothbuild.compile.fs.ps.ast.define.AnonymousFuncP;
76
import org.smoothbuild.compile.fs.ps.ast.define.BlobP;
87
import org.smoothbuild.compile.fs.ps.ast.define.CallP;
98
import org.smoothbuild.compile.fs.ps.ast.define.ExprP;
109
import org.smoothbuild.compile.fs.ps.ast.define.FuncP;
1110
import org.smoothbuild.compile.fs.ps.ast.define.InstantiateP;
1211
import org.smoothbuild.compile.fs.ps.ast.define.IntP;
1312
import org.smoothbuild.compile.fs.ps.ast.define.ItemP;
13+
import org.smoothbuild.compile.fs.ps.ast.define.LambdaP;
1414
import org.smoothbuild.compile.fs.ps.ast.define.ModuleP;
1515
import org.smoothbuild.compile.fs.ps.ast.define.NamedArgP;
1616
import org.smoothbuild.compile.fs.ps.ast.define.NamedEvaluableP;
@@ -124,14 +124,14 @@ public void visitExpr(ExprP exprP) {
124124
// @formatter:on
125125
}
126126

127-
public void visitAnonymousFunc(AnonymousFuncP anonymousFuncP) {
128-
visitAnonymousFuncSignature(anonymousFuncP);
129-
visitFuncBody(anonymousFuncP);
127+
public void visitLambda(LambdaP lambdaP) {
128+
visitLambdaSignature(lambdaP);
129+
visitFuncBody(lambdaP);
130130
}
131131

132-
public void visitAnonymousFuncSignature(AnonymousFuncP anonymousFuncP) {
133-
visitType(anonymousFuncP.resultT());
134-
visitItems(anonymousFuncP.params());
132+
public void visitLambdaSignature(LambdaP lambdaP) {
133+
visitType(lambdaP.resultT());
134+
visitItems(lambdaP.params());
135135
}
136136

137137
public void visitArgs(List<ExprP> args) {
@@ -155,7 +155,7 @@ public void visitInt(IntP intP) {
155155

156156
private void visitPolymorphicP(PolymorphicP polymorphicP) {
157157
switch (polymorphicP) {
158-
case AnonymousFuncP anonymousFuncP -> visitAnonymousFunc(anonymousFuncP);
158+
case LambdaP lambdaP -> visitLambda(lambdaP);
159159
case ReferenceP referenceP -> visitReference(referenceP);
160160
}
161161
}

src/app/src/main/java/org/smoothbuild/compile/fs/ps/ast/ScopingModuleVisitorP.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package org.smoothbuild.compile.fs.ps.ast;
22

3-
import org.smoothbuild.compile.fs.ps.ast.define.AnonymousFuncP;
3+
import org.smoothbuild.compile.fs.ps.ast.define.LambdaP;
44
import org.smoothbuild.compile.fs.ps.ast.define.ModuleP;
55
import org.smoothbuild.compile.fs.ps.ast.define.NamedFuncP;
66
import org.smoothbuild.compile.fs.ps.ast.define.NamedValueP;
@@ -37,9 +37,9 @@ public final void visitNamedFunc(NamedFuncP namedFuncP) {
3737
}
3838

3939
@Override
40-
public final void visitAnonymousFunc(AnonymousFuncP anonymousFuncP) {
41-
visitAnonymousFuncSignature(anonymousFuncP);
42-
createVisitorForScopeOf(anonymousFuncP)
43-
.visitFuncBody(anonymousFuncP);
40+
public final void visitLambda(LambdaP lambdaP) {
41+
visitLambdaSignature(lambdaP);
42+
createVisitorForScopeOf(lambdaP)
43+
.visitFuncBody(lambdaP);
4444
}
4545
}

src/app/src/main/java/org/smoothbuild/compile/fs/ps/ast/define/FuncP.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
public sealed interface FuncP
1111
extends EvaluableP
12-
permits AnonymousFuncP, NamedFuncP {
12+
permits LambdaP, NamedFuncP {
1313
public TypeP resultT();
1414

1515
public NList<ItemP> params();

0 commit comments

Comments
 (0)