feat(web)!: rewrite the library in TypeScript
This commit is contained in:
parent
07a86b1729
commit
2cae67892e
39 changed files with 7856 additions and 3629 deletions
50
lib/binding_web/src/lookahead_iterator.ts
Normal file
50
lib/binding_web/src/lookahead_iterator.ts
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
import { C, Internal, assertInternal } from './constants';
|
||||
import { Language } from './language';
|
||||
|
||||
export class LookaheadIterator implements Iterable<string> {
|
||||
private [0]: number; // Internal handle for WASM
|
||||
private language: Language;
|
||||
|
||||
constructor(internal: Internal, address: number, language: Language) {
|
||||
assertInternal(internal);
|
||||
this[0] = address;
|
||||
this.language = language;
|
||||
}
|
||||
|
||||
get currentTypeId(): number {
|
||||
return C._ts_lookahead_iterator_current_symbol(this[0]);
|
||||
}
|
||||
|
||||
get currentType(): string {
|
||||
return this.language.types[this.currentTypeId] || 'ERROR';
|
||||
}
|
||||
|
||||
delete(): void {
|
||||
C._ts_lookahead_iterator_delete(this[0]);
|
||||
this[0] = 0;
|
||||
}
|
||||
|
||||
resetState(stateId: number): boolean {
|
||||
return Boolean(C._ts_lookahead_iterator_reset_state(this[0], stateId));
|
||||
}
|
||||
|
||||
reset(language: Language, stateId: number): boolean {
|
||||
if (C._ts_lookahead_iterator_reset(this[0], language[0], stateId)) {
|
||||
this.language = language;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
[Symbol.iterator](): Iterator<string> {
|
||||
const self = this;
|
||||
return {
|
||||
next(): IteratorResult<string> {
|
||||
if (C._ts_lookahead_iterator_next(self[0])) {
|
||||
return { done: false, value: self.currentType };
|
||||
}
|
||||
return { done: true, value: '' };
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue