Update dist files; Unify some examples

This commit is contained in:
dcodeIO
2018-05-06 01:32:58 +02:00
parent 50f6c1c460
commit 2f8f477ab0
23 changed files with 777 additions and 677 deletions

View File

@ -40,10 +40,8 @@ var offset: usize = 0;
export function decode(length: usize): void {
offset = 0;
while (offset < length) {
decodeValue();
}
assert(offset == length);
while (offset < length) decodeValue();
if (offset != length) unreachable();
}
function decodeValue(): void {
@ -51,96 +49,94 @@ function decodeValue(): void {
var size: u32;
var long: u64;
switch (token) {
case Token.NULL:
case Token.NULL: {
pson.onNull();
break;
case Token.TRUE:
}
case Token.TRUE: {
pson.onTrue();
break;
case Token.FALSE:
}
case Token.FALSE: {
pson.onFalse();
break;
case Token.EOBJECT:
}
case Token.EOBJECT: {
pson.onEObject();
break;
case Token.EARRAY:
}
case Token.EARRAY: {
pson.onEArray();
break;
case Token.ESTRING:
}
case Token.ESTRING: {
pson.onEString();
break;
case Token.OBJECT:
}
case Token.OBJECT: {
pson.onObject(size = readVarint32());
while (size--) {
decodeValue();
decodeValue();
}
break;
case Token.ARRAY:
}
case Token.ARRAY: {
pson.onArray(size = readVarint32());
while (size--) {
decodeValue();
}
while (size--) decodeValue();
break;
case Token.INTEGER:
}
case Token.INTEGER: {
pson.onInteger(((size = readVarint32()) >> 1) ^ -(size & 1));
break;
case Token.LONG:
}
case Token.LONG: {
long = ((long = readVarint64()) >> 1) ^ -(long & 1);
pson.onLong(<i32>long, <i32>(long >>> 32));
break;
case Token.FLOAT:
}
case Token.FLOAT: {
pson.onFloat(load<f32>(offset));
offset += 4;
break;
case Token.DOUBLE:
}
case Token.DOUBLE: {
pson.onDouble(load<f64>(offset));
offset += 8;
break;
case Token.STRING:
}
case Token.STRING: {
size = readVarint32();
pson.onString(offset, size);
offset += size;
break;
}
case Token.STRING_ADD:
case Token.STRING_GET:
case Token.STRING_GET: {
// could be implemented via imports as well, but isn't necessary for this example
throw new Error("not implemented");
case Token.BINARY:
unreachable();
break;
}
case Token.BINARY: {
size = readVarint32();
pson.onBinary(offset, size);
offset += size;
break;
default: // small integer?
if (token > <u32>Token.MAX) {
throw new Error("unexpected token");
}
}
default: { // small integer?
if (token > <u32>Token.MAX) unreachable();
pson.onInteger((token >> 1) ^ -(token & 1));
break;
}
}
}
function readVarint32(): u32 {
var value: u32 = 0;
var shift: u32 = 0;
var b: u8;
do {
var b = load<u8>(offset++);
b = load<u8>(offset++);
value |= <u32>(b & 0x7f) << (7 * shift++);
} while (b & 0x80);
return value;
@ -149,8 +145,9 @@ function readVarint32(): u32 {
function readVarint64(): u64 {
var value: u64 = 0;
var shift: u64 = 0;
var b: u8;
do {
var b = load<u8>(offset++);
b = load<u8>(offset++);
value |= <u64>(b & 0x7f) << (7 * shift++);
} while (b & 0x80);
return value;