47 lines
1.3 KiB
JavaScript
47 lines
1.3 KiB
JavaScript
|
|
'use strict';
|
||
|
|
|
||
|
|
Object.defineProperty(exports, '__esModule', { value: true });
|
||
|
|
|
||
|
|
class Type {
|
||
|
|
constructor(major, name, terminal) {
|
||
|
|
this.major = major;
|
||
|
|
this.majorEncoded = major << 5;
|
||
|
|
this.name = name;
|
||
|
|
this.terminal = terminal;
|
||
|
|
}
|
||
|
|
toString() {
|
||
|
|
return `Type[${ this.major }].${ this.name }`;
|
||
|
|
}
|
||
|
|
compare(typ) {
|
||
|
|
return this.major < typ.major ? -1 : this.major > typ.major ? 1 : 0;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
Type.uint = new Type(0, 'uint', true);
|
||
|
|
Type.negint = new Type(1, 'negint', true);
|
||
|
|
Type.bytes = new Type(2, 'bytes', true);
|
||
|
|
Type.string = new Type(3, 'string', true);
|
||
|
|
Type.array = new Type(4, 'array', false);
|
||
|
|
Type.map = new Type(5, 'map', false);
|
||
|
|
Type.tag = new Type(6, 'tag', false);
|
||
|
|
Type.float = new Type(7, 'float', true);
|
||
|
|
Type.false = new Type(7, 'false', true);
|
||
|
|
Type.true = new Type(7, 'true', true);
|
||
|
|
Type.null = new Type(7, 'null', true);
|
||
|
|
Type.undefined = new Type(7, 'undefined', true);
|
||
|
|
Type.break = new Type(7, 'break', true);
|
||
|
|
class Token {
|
||
|
|
constructor(type, value, encodedLength) {
|
||
|
|
this.type = type;
|
||
|
|
this.value = value;
|
||
|
|
this.encodedLength = encodedLength;
|
||
|
|
this.encodedBytes = undefined;
|
||
|
|
this.byteValue = undefined;
|
||
|
|
}
|
||
|
|
toString() {
|
||
|
|
return `Token[${ this.type }].${ this.value }`;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
exports.Token = Token;
|
||
|
|
exports.Type = Type;
|