func capture_wrapper_target(source_id: Int, source: String, encoded: String, context_tag: Int, context: &SyntaxContext) -> SyntaxResult<Decl>Capture a wrapper's target declaration. The first application in a chain supplies the parser-recorded canonical tokens; a chained application supplies the previous replacement's rendered source instead, which scans deterministically because it was materialized from canonical tokens.
View Source
pub func capture_wrapper_target(source_id: Int, source: String, encoded: String, context_tag: Int, context: &SyntaxContext) -> SyntaxResult<Decl> {
if encoded.utf8().count() > 0 {
if let .some(tokens) = decode_token_records(encoded: encoded) {
if tokens.count == 0 {
return SyntaxResult<Decl>(value: .none, failure: .some(SyntaxFailure(code: "macro.invalid-input", message: "Wrapper target token records are empty", span: 0..<0)))
}
let span = tokens[0].span.lower..<tokens[tokens.count - 1].span.upper
return capture_decl_in(source_id: source_id, source: source, input: TokenRange(tokens: tokens, span: span), context_tag: context_tag, context: context)
}
return SyntaxResult<Decl>(value: .none, failure: .some(SyntaxFailure(code: "macro.invalid-input", message: "Wrapper target token records are invalid", span: 0..<0)))
}
let result = scan(source: source)
if let .some(message) = result.error {
return SyntaxResult<Decl>(value: .none, failure: .some(SyntaxFailure(code: "macro.invalid-input", message: message, span: 0..<0)))
}
let extent = source.utf8().count()
capture_decl_in(source_id: source_id, source: source, input: TokenRange(tokens: result.tokens, span: 0..<extent), context_tag: context_tag, context: context)
}