1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.millscript.millscript.syntax;
22
23 import org.millscript.millscript.expr.CheckNoneExpr;
24 import org.millscript.millscript.expr.Expr;
25 import org.millscript.millscript.expr.LambdaExpr;
26 import org.millscript.millscript.expr.NameExpr;
27 import org.millscript.millscript.expr.SpiceClassInitExpr;
28 import org.millscript.millscript.expr.VarExpr;
29
30 /**
31 * This class implements the syntax for an <code>init</code>.
32 */
33 public final class SpiceClassInitSyntax extends ProcedureSyntax {
34
35 /**
36 * Constructs a new init syntax parser instance, with the specified closing
37 * character sequence.
38 *
39 * @param x the closing character sequence for this init syntax parser
40 * instance
41 */
42 public SpiceClassInitSyntax( final String x ) {
43 super( x, true );
44 }
45
46 /**
47 * @see org.millscript.millscript.syntax.ProcedureSyntax#procedure(org.millscript.millscript.syntax.FunctionHeader, org.millscript.millscript.expr.Expr, org.millscript.millscript.syntax.Parser)
48 */
49 @Override
50 public VarExpr procedure( final FunctionHeader header, final Expr body, final Parser parser ) {
51
52 header.getArglist().addLast( new NameExpr( "this" ) );
53 return new VarExpr(
54 false,
55 header.getName(),
56 new SpiceClassInitExpr(
57 parser.getEnclosingClass(),
58 new LambdaExpr(
59 header.getSymbol(),
60 header.getArglist(),
61 null,
62 CheckNoneExpr.make( body )
63 )
64 )
65 );
66 }
67
68 }