Closed
Description
Compiler version
3.1.0-RC2
Minimized example
package ips.clang
trait LongCompilation {
def toCastExpression(expr: Expression): CastExpression =
expr match
case cExpr: CastExpression => cExpr
case _ => WrappedExpression(expr)
}
sealed trait C_Ast
sealed trait Expression extends C_Ast
sealed trait PrimaryExpression extends PostfixExpression
case class Identifier(value:String) extends PrimaryExpression
case class IntConstant(value: Int) extends PrimaryExpression
case class CharConstant(value: Char) extends PrimaryExpression
case class StringLiteral(value: String) extends PrimaryExpression
case class WrappedExpression(value: Expression) extends PrimaryExpression
case class GenericSelection( qualifier: PrecAssigmentExpression, associations: List[Int] )
sealed trait PostfixExpression extends UnaryExpression
case class ArrayIndexExpression(base: PostfixExpression, index: Expression) extends PostfixExpression
case class FunctionCallExpression(fun: PostfixExpression, arguments: List[PrecAssigmentExpression]) extends PostfixExpression
case class DotSelectExpression(qualifier: PostfixExpression, select: Identifier) extends PostfixExpression
case class ArrowSelectExpression(qualifier: PostfixExpression, select: Identifier) extends PostfixExpression
case class PostfixIncrementExpression(base: PostfixExpression) extends PostfixExpression
case class PostfixDecrementExpression(base: PostfixExpression) extends PostfixExpression
case class CompoundLiteral(typeName: TypeName, initializers: List[Int]) extends PostfixExpression
sealed trait UnaryExpression extends CastExpression
case class PrefixIncrementExpression(base: UnaryExpression) extends UnaryExpression
case class PrefixDecrementExpression(base: UnaryExpression) extends UnaryExpression
case class UnaryOperatorExpression(op: String, argument: CastExpression) extends UnaryExpression
case class SizeofConstExpression(expression: UnaryExpression) extends UnaryExpression
case class SizeofTypeExpression(typeName: TypeName) extends UnaryExpression
// each AdditionalUnaryExpressionX increase compilation time
sealed trait AdditionalUnaryExpression1 extends UnaryExpression
sealed trait AdditionalUnaryExpression2 extends UnaryExpression
sealed trait AdditionalUnaryExpression3 extends UnaryExpression
sealed trait AdditionalUnaryExpression4 extends UnaryExpression
sealed trait AdditionalUnaryExpression5 extends UnaryExpression
sealed trait CastExpression extends MultiplicativeExpression
case class Cast(typeName: TypeName, argument: CastExpression) extends CastExpression
sealed trait BinaryExpression {
def op: String
def frs: Expression
def snd: Expression
}
sealed trait MultiplicativeExpression extends AdditiveExpression
case class MultiplicativeBinaryExpression(op: String,
frs: MultiplicativeExpression,
snd: CastExpression) extends MultiplicativeExpression
with BinaryExpression
sealed trait AdditiveExpression extends ShiftExpression
case class AdditiveBinaryExpression(op: String,
frs: MultiplicativeExpression,
snd: CastExpression) extends MultiplicativeExpression with BinaryExpression
sealed trait ShiftExpression extends RelationalExpression
case class ShiftBinaryExpression(op: String,
frs: MultiplicativeExpression, snd: CastExpression) extends MultiplicativeExpression with BinaryExpression
sealed trait RelationalExpression extends EqualityExpression
case class RelationalBinaryExpression(op: String,
frs: RelationalExpression, snd: ShiftExpression) extends RelationalExpression with BinaryExpression
sealed trait EqualityExpression extends PrecAndExpression
case class EqualityBinaryExpression(op: String,
frs: RelationalExpression, snd: ShiftExpression) extends EqualityExpression with BinaryExpression
sealed trait PrecAndExpression extends PrecExclusiveOrExpression
case class AndBinaryExpression(op: String,
frs: PrecAndExpression, snd: EqualityExpression) extends PrecAndExpression with BinaryExpression
sealed trait PrecExclusiveOrExpression extends PrecInclusiveOrExpression
case class ExclusiveOrBinaryExpression(
op: String,
frs: PrecExclusiveOrExpression,
snd: PrecAndExpression) extends PrecExclusiveOrExpression with BinaryExpression
sealed trait PrecInclusiveOrExpression extends PrecLogicalAndExpression
case class InclusiveOrBinaryExpression(op: String,
frs: PrecExclusiveOrExpression,
snd: PrecAndExpression) extends PrecInclusiveOrExpression with BinaryExpression
sealed trait PrecLogicalAndExpression extends PrecLogicalOrExpression
case class LogicalAndBinaryExpression(op: String,
frs: PrecLogicalAndExpression,
snd: PrecInclusiveOrExpression) extends PrecLogicalAndExpression with BinaryExpression
sealed trait PrecLogicalOrExpression extends PrecConditionalExpression
case class LogicalOrBinaryExpression(op: String,
frs: PrecLogicalAndExpression,
snd: PrecInclusiveOrExpression) extends PrecLogicalOrExpression with BinaryExpression
sealed trait PrecConditionalExpression extends PrecAssigmentExpression
case class ConditionalExpression(
cond: PrecLogicalOrExpression,
frs: Expression,
snd: PrecConditionalExpression) extends PrecConditionalExpression
sealed trait PrecAssigmentExpression extends Expression
case class AssigmentExpression(
op: String,
frs: UnaryExpression,
snd: PrecAssigmentExpression) extends PrecAssigmentExpression
case class CommaExpression(frs: Expression, snd: Expression) extends Expression
case class CommaExpression2(frs: Expression, snd: Expression) extends Expression
case class Declarator(pointer: Option[Pointer], base: String)
case class TypeName(specifiers: List[DeclarationSpecifier], declarator: Option[AbstractDeclarator])
sealed trait AbstractDeclarator
case class Pointer( typeQual: List[DeclarationSpecifier], pointer: Option[Pointer]) extends AbstractDeclarator
sealed trait DeclarationSpecifier
Output
info] compiling 1 Scala source to /Users/rssh/work/oss/algorithmic-algebras-embedding/target/scala-3.1.0-RC2/classes ...
[success] Total time: 151 s (02:31), completed 20 Sept 2021, 07:38:15
Expectation
compilation speed should be significantly faster.