(s: ITokenStream)
| 380 | * ``` |
| 381 | */ |
| 382 | export function parseStatementWithAttr(s: ITokenStream): Ast.Definition { |
| 383 | const attrs: Ast.Attribute[] = []; |
| 384 | while (s.is(TokenKind.OpenSharpBracket)) { |
| 385 | attrs.push(parseAttr(s) as Ast.Attribute); |
| 386 | s.expect(TokenKind.NewLine); |
| 387 | s.next(); |
| 388 | } |
| 389 | |
| 390 | const statement = parseStatement(s); |
| 391 | |
| 392 | if (statement.type !== 'def') { |
| 393 | throw new AiScriptSyntaxError('invalid attribute.', statement.loc.start); |
| 394 | } |
| 395 | if (statement.attr != null) { |
| 396 | statement.attr.push(...attrs); |
| 397 | } else { |
| 398 | statement.attr = attrs; |
| 399 | } |
| 400 | |
| 401 | return statement; |
| 402 | } |
| 403 | |
| 404 | /** |
| 405 | * ```abnf |
no test coverage detected