mirror of
https://github.com/fluencelabs/assemblyscript
synced 2025-06-12 06:21:29 +00:00
Update dist files; Unify some examples
This commit is contained in:
@ -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;
|
||||
|
Reference in New Issue
Block a user