fromAloneBlock static method
Implementation
static Danger<ForAloneBlock, CitrusSemanticException> fromAloneBlock(AloneBlock aloneBlock) {
final log = Log(classLocation: ForAloneBlock, functionLocation: 'fromAloneBlock');
final blockTypeKeyword = aloneBlock.second;
if (blockTypeKeyword is! For) return Failure(ForAloneBlockExceptionA(), log.monitor({
'invalid block type keyword': blockTypeKeyword.runtimeType,
}));
final aloneBlockArgumentable = aloneBlock.fourth;
switch (aloneBlockArgumentable) {
case InExpression():
final temporarySymbolAccesserResult = SingleAccesser.fromAccesserableCollection(aloneBlockArgumentable.first);
log.add(temporarySymbolAccesserResult);
if (temporarySymbolAccesserResult is! Success<SingleAccesser, AccesserException>) return Failure(temporarySymbolAccesserResult.asException, log);
final arrayAccesserResult = Accesser.fromAccesserableCollection(aloneBlockArgumentable.fifth);
log.add(arrayAccesserResult);
if (arrayAccesserResult is! Success<Accesser, AccesserException>) return Failure(arrayAccesserResult.asException, log);
// 必ず return
final result = ForAloneBlock(aloneBlock.source, temporarySymbolAccesserResult.wrapped, arrayAccesserResult.wrapped);
return Success(result, log);
case _:
return Failure(ForAloneBlockExceptionB(), log.monitor({
'invalid alone block argumentable': aloneBlockArgumentable.runtimeType,
}));
}
}