fromRootCitrusSyntax static method

Safety<Finish> fromRootCitrusSyntax(
  1. RootCitrusSyntax rootCitrusSyntax
)

Implementation

static Safety<Finish> fromRootCitrusSyntax(RootCitrusSyntax rootCitrusSyntax) {

    final log = Log(classLocation: Finish, functionLocation: 'fromRootCitrusSyntax');

    final List<AheadCitrusSemantic> aheadList = [];
    final List<FinishCitrusSemantic> finishList = [];

    for (final syntax in rootCitrusSyntax.derivationCitrusSyntaxList) {

        switch (syntax) {
        case CurlyBind():

            final result = Bind.fromCurlyBind(syntax);
            log.add(result);

            finishList.add(result.wrapped);

        case BlockSandwich():

            final blockTypeKeyword = syntax.first.second.second;

            switch (blockTypeKeyword) {
            case For():
                final result = ForBlockSandwich.fromBlockSandwich(syntax);
                log.add(result);
                if (result is! Success<ForBlockSandwich, CitrusSemanticException>) continue constant;
                finishList.add(result.wrapped);
            case BooleanKeyword():
                final result = IfBlockSandwich.fromBlockSandwich(syntax);
                log.add(result);
                if (result is! Success<IfBlockSandwich, CitrusSemanticException>) continue constant;
                finishList.add(result.wrapped);
            case Protect():
                final result = ProtectBlockSandwich.fromBlockSandwich(syntax);
                log.add(result);
                if (result is! Success<ProtectBlockSandwich, CitrusSemanticException>) continue constant;
                finishList.add(result.wrapped);
            case DefineKeyword():
                final result = Define.fromBlockSandwich(syntax);
                log.add(result);
                if (result is! Success<Define, CitrusSemanticException>) continue constant;
                aheadList.add(result.wrapped);
            }

        constant:
        case _:

            final result = ConstantPart.fromDerivationCitrusSyntax(syntax);
            log.add(result);

            finishList.add(result.wrapped);

        }

    }

    final result = Finish.fromIterable(aheadList, finishList);

    return Safety(result, log);

}