@@ -70,7 +70,7 @@ function parsePrefix(s: ITokenStream, minBp: number): Ast.Node {
7070 if ( expr . type === 'num' ) {
7171 return NODE ( 'num' , { value : expr . value } , loc ) ;
7272 } else {
73- throw new AiScriptSyntaxError ( 'currently, sign is only supported for number literal.' ) ;
73+ throw new AiScriptSyntaxError ( 'currently, sign is only supported for number literal.' , loc ) ;
7474 }
7575 // TODO: 将来的にサポートされる式を拡張
7676 // return NODE('plus', { expr }, loc);
@@ -80,7 +80,7 @@ function parsePrefix(s: ITokenStream, minBp: number): Ast.Node {
8080 if ( expr . type === 'num' ) {
8181 return NODE ( 'num' , { value : - 1 * expr . value } , loc ) ;
8282 } else {
83- throw new AiScriptSyntaxError ( 'currently, sign is only supported for number literal.' ) ;
83+ throw new AiScriptSyntaxError ( 'currently, sign is only supported for number literal.' , loc ) ;
8484 }
8585 // TODO: 将来的にサポートされる式を拡張
8686 // return NODE('minus', { expr }, loc);
@@ -89,7 +89,7 @@ function parsePrefix(s: ITokenStream, minBp: number): Ast.Node {
8989 return NODE ( 'not' , { expr } , loc ) ;
9090 }
9191 default : {
92- throw new AiScriptSyntaxError ( `unexpected token: ${ TokenKind [ op ] } ` ) ;
92+ throw new AiScriptSyntaxError ( `unexpected token: ${ TokenKind [ op ] } ` , loc ) ;
9393 }
9494 }
9595}
@@ -161,7 +161,7 @@ function parseInfix(s: ITokenStream, left: Ast.Node, minBp: number): Ast.Node {
161161 return NODE ( 'or' , { left, right } , loc ) ;
162162 }
163163 default : {
164- throw new AiScriptSyntaxError ( `unexpected token: ${ TokenKind [ op ] } ` ) ;
164+ throw new AiScriptSyntaxError ( `unexpected token: ${ TokenKind [ op ] } ` , loc ) ;
165165 }
166166 }
167167 }
@@ -186,7 +186,7 @@ function parsePostfix(s: ITokenStream, expr: Ast.Node): Ast.Node {
186186 } , loc ) ;
187187 }
188188 default : {
189- throw new AiScriptSyntaxError ( `unexpected token: ${ TokenKind [ op ] } ` ) ;
189+ throw new AiScriptSyntaxError ( `unexpected token: ${ TokenKind [ op ] } ` , loc ) ;
190190 }
191191 }
192192}
@@ -231,13 +231,13 @@ function parseAtom(s: ITokenStream, isStatic: boolean): Ast.Node {
231231 const exprStream = new TokenStream ( element . children ! ) ;
232232 const expr = parseExpr ( exprStream , false ) ;
233233 if ( exprStream . kind !== TokenKind . EOF ) {
234- throw new AiScriptSyntaxError ( `unexpected token: ${ TokenKind [ exprStream . token . kind ] } ` ) ;
234+ throw new AiScriptSyntaxError ( `unexpected token: ${ TokenKind [ exprStream . token . kind ] } ` , exprStream . token . loc ) ;
235235 }
236236 values . push ( expr ) ;
237237 break ;
238238 }
239239 default : {
240- throw new AiScriptSyntaxError ( `unexpected token: ${ TokenKind [ element . kind ] } ` ) ;
240+ throw new AiScriptSyntaxError ( `unexpected token: ${ TokenKind [ element . kind ] } ` , element . loc ) ;
241241 }
242242 }
243243 }
@@ -283,7 +283,7 @@ function parseAtom(s: ITokenStream, isStatic: boolean): Ast.Node {
283283 return expr ;
284284 }
285285 }
286- throw new AiScriptSyntaxError ( `unexpected token: ${ TokenKind [ s . kind ] } ` ) ;
286+ throw new AiScriptSyntaxError ( `unexpected token: ${ TokenKind [ s . kind ] } ` , loc ) ;
287287}
288288
289289/**
@@ -301,7 +301,7 @@ function parseCall(s: ITokenStream, target: Ast.Node): Ast.Node {
301301 if ( s . kind === TokenKind . Comma ) {
302302 s . next ( ) ;
303303 } else if ( ! s . token . hasLeftSpacing ) {
304- throw new AiScriptSyntaxError ( 'separator expected' ) ;
304+ throw new AiScriptSyntaxError ( 'separator expected' , s . token . loc ) ;
305305 }
306306 }
307307
@@ -451,11 +451,11 @@ function parseReference(s: ITokenStream): Ast.Node {
451451 if ( segs . length > 0 ) {
452452 if ( s . kind === TokenKind . Colon ) {
453453 if ( s . token . hasLeftSpacing ) {
454- throw new AiScriptSyntaxError ( 'Cannot use spaces in a reference.' ) ;
454+ throw new AiScriptSyntaxError ( 'Cannot use spaces in a reference.' , s . token . loc ) ;
455455 }
456456 s . next ( ) ;
457457 if ( s . token . hasLeftSpacing ) {
458- throw new AiScriptSyntaxError ( 'Cannot use spaces in a reference.' ) ;
458+ throw new AiScriptSyntaxError ( 'Cannot use spaces in a reference.' , s . token . loc ) ;
459459 }
460460 } else {
461461 break ;
@@ -505,7 +505,7 @@ function parseObject(s: ITokenStream, isStatic: boolean): Ast.Node {
505505 // noop
506506 } else {
507507 if ( ! s . token . hasLeftSpacing ) {
508- throw new AiScriptSyntaxError ( 'separator expected' ) ;
508+ throw new AiScriptSyntaxError ( 'separator expected' , s . token . loc ) ;
509509 }
510510 }
511511
@@ -546,7 +546,7 @@ function parseArray(s: ITokenStream, isStatic: boolean): Ast.Node {
546546 // noop
547547 } else {
548548 if ( ! s . token . hasLeftSpacing ) {
549- throw new AiScriptSyntaxError ( 'separator expected' ) ;
549+ throw new AiScriptSyntaxError ( 'separator expected' , s . token . loc ) ;
550550 }
551551 }
552552
0 commit comments