capture_wrapper_target

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)
}