                     }
                     --depth
                 case .EndOfFile:
-                    info = SourceInfo(lineNo: ctx.lineNo, charNo: ctx.charNo)
+                    info = SourceInfo(lineNo: ctx.lineNo(), charNo: ctx.charNo())
                     return produce(.Error(.UnexpectedEOF))
                 default:
                     // ignore comment characters

                prev = cc
            }
            for var i = 0; i < n; ++i {
                let c = cs.look()!
                if source == nil {
                    source = String(c)
                } else {
                    source!.append(c)
                }
                cs.consume()
            }
        }
    }

            ctx.reset()
            return load()
        case .BlockCommentTail:
            info = SourceInfo(lineNo: ctx.lineNo(), charNo: ctx.charNo())
            ctx.consume(n: 2)
            return produce(.Error(.ReservedToken))
        case .OperatorFollow, .IdentifierFollow, .Others:
            info = SourceInfo(lineNo: ctx.lineNo(), charNo: ctx.charNo())
            ctx.consume()
            return produce(.Error(.InvalidToken))
        case .LessThan, .GraterThan, .Ampersand, .Question, .Exclamation:
