mirror of
https://github.com/fluencelabs/assemblyscript
synced 2025-04-25 15:12:12 +00:00
Use the element type annotated on the setter when doing indexed sets
This commit is contained in:
parent
78a3dcfaf0
commit
88b00c1689
2
dist/assemblyscript.js
vendored
2
dist/assemblyscript.js
vendored
File diff suppressed because one or more lines are too long
2
dist/assemblyscript.js.map
vendored
2
dist/assemblyscript.js.map
vendored
File diff suppressed because one or more lines are too long
@ -39,7 +39,7 @@ function asmFunc(global, env, buffer) {
|
||||
}
|
||||
return 0 | 0;
|
||||
}
|
||||
|
||||
|
||||
function $lib_internal_arraybuffer_allocUnsafe($0) {
|
||||
$0 = $0 | 0;
|
||||
var $1 = 0;
|
||||
@ -48,7 +48,7 @@ function asmFunc(global, env, buffer) {
|
||||
HEAP32[$1 >> 2] = $0;
|
||||
return $1 | 0;
|
||||
}
|
||||
|
||||
|
||||
function $lib_array_Array_Body__constructor($0, $1) {
|
||||
$0 = $0 | 0;
|
||||
$1 = $1 | 0;
|
||||
@ -68,7 +68,7 @@ function asmFunc(global, env, buffer) {
|
||||
HEAP32[($0 + 4 | 0) >> 2] = $1;
|
||||
return $0 | 0;
|
||||
}
|
||||
|
||||
|
||||
function assembly_index_Body_constructor($0, $1, $2, $3, $4, $5, $6, $7) {
|
||||
$0 = $0 | 0;
|
||||
$1 = +$1;
|
||||
@ -92,7 +92,7 @@ function asmFunc(global, env, buffer) {
|
||||
}
|
||||
return $9 | 0;
|
||||
}
|
||||
|
||||
|
||||
function $lib_memory_set_memory($0, $1, $2) {
|
||||
$0 = $0 | 0;
|
||||
$1 = $1 | 0;
|
||||
@ -176,7 +176,7 @@ function asmFunc(global, env, buffer) {
|
||||
break continue_0;
|
||||
} while (1);
|
||||
}
|
||||
|
||||
|
||||
function $lib_memory_copy_memory($0, $1, $2) {
|
||||
$0 = $0 | 0;
|
||||
$1 = $1 | 0;
|
||||
@ -545,7 +545,7 @@ function asmFunc(global, env, buffer) {
|
||||
HEAP8[$44 >> 0] = HEAPU8[$3 >> 0] | 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function $lib_memory_move_memory($0, $1, $2) {
|
||||
$0 = $0 | 0;
|
||||
$1 = $1 | 0;
|
||||
@ -638,7 +638,7 @@ function asmFunc(global, env, buffer) {
|
||||
} while (1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function $lib_internal_arraybuffer_reallocUnsafe($0, $1) {
|
||||
$0 = $0 | 0;
|
||||
$1 = $1 | 0;
|
||||
@ -658,7 +658,7 @@ function asmFunc(global, env, buffer) {
|
||||
} else if (($1 | 0) < ($2 | 0)) HEAP32[$0 >> 2] = $1;;
|
||||
return $0 | 0;
|
||||
}
|
||||
|
||||
|
||||
function $lib_array_Array_Body__push($0, $1) {
|
||||
$0 = $0 | 0;
|
||||
$1 = $1 | 0;
|
||||
@ -678,7 +678,7 @@ function asmFunc(global, env, buffer) {
|
||||
HEAP32[(($4 + ($2 << 2 | 0) | 0) + 8 | 0) >> 2] = $1;
|
||||
return $3 | 0;
|
||||
}
|
||||
|
||||
|
||||
function $lib_array_Array_Body____get($0, $1) {
|
||||
$0 = $0 | 0;
|
||||
$1 = $1 | 0;
|
||||
@ -690,7 +690,7 @@ function asmFunc(global, env, buffer) {
|
||||
}
|
||||
return HEAPU32[(($2 + ($1 << 2 | 0) | 0) + 8 | 0) >> 2] | 0 | 0;
|
||||
}
|
||||
|
||||
|
||||
function assembly_index_NBodySystem_constructor($0, $1) {
|
||||
$0 = $0 | 0;
|
||||
$1 = $1 | 0;
|
||||
@ -722,7 +722,7 @@ function asmFunc(global, env, buffer) {
|
||||
HEAPF64[($1 + 40 | 0) >> 3] = -$7 / 39.47841760435743;
|
||||
return $0 | 0;
|
||||
}
|
||||
|
||||
|
||||
function assembly_index_init() {
|
||||
var $0 = 0;
|
||||
$argc = 0;
|
||||
@ -749,7 +749,7 @@ function asmFunc(global, env, buffer) {
|
||||
$lib_array_Array_Body__push($0 | 0, assembly_index_Body_constructor(0 | 0, +(15.379697114850917), +(-25.919314609987964), +(.17925877295037118), +(.979090732243898), +(.5946989986476762), +(-.034755955504078104), +(2.0336868699246304e-03)) | 0 | 0) | 0;
|
||||
assembly_index_system = assembly_index_NBodySystem_constructor(0 | 0, $0 | 0) | 0;
|
||||
}
|
||||
|
||||
|
||||
function assembly_index_getBody($0) {
|
||||
$0 = $0 | 0;
|
||||
var $1 = 0, $2 = 0;
|
||||
@ -757,7 +757,7 @@ function asmFunc(global, env, buffer) {
|
||||
if ($0 >>> 0 < (HEAP32[($1 + 4 | 0) >> 2] | 0) >>> 0) $2 = $lib_array_Array_Body____get($1 | 0, $0 | 0) | 0; else $2 = 0;
|
||||
return $2 | 0;
|
||||
}
|
||||
|
||||
|
||||
function assembly_index_NBodySystem_advance($0, $1) {
|
||||
$0 = $0 | 0;
|
||||
$1 = +$1;
|
||||
@ -810,7 +810,7 @@ function asmFunc(global, env, buffer) {
|
||||
break continue_0;
|
||||
} while (1);
|
||||
}
|
||||
|
||||
|
||||
function assembly_index_NBodySystem_energy($0) {
|
||||
$0 = $0 | 0;
|
||||
var $1 = 0.0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $10 = 0.0, $6 = 0.0, $7 = 0.0, $8 = 0.0, $9 = 0.0, $11 = 0.0, $12 = 0.0, $13 = 0.0, $14 = 0.0, $15 = 0.0;
|
||||
@ -853,12 +853,12 @@ function asmFunc(global, env, buffer) {
|
||||
} while (1);
|
||||
return +$1;
|
||||
}
|
||||
|
||||
|
||||
function assembly_index_step() {
|
||||
assembly_index_NBodySystem_advance(assembly_index_system | 0, +(.01));
|
||||
return +(+assembly_index_NBodySystem_energy(assembly_index_system | 0));
|
||||
}
|
||||
|
||||
|
||||
function assembly_index_bench($0) {
|
||||
$0 = $0 | 0;
|
||||
var $1 = 0;
|
||||
@ -871,19 +871,19 @@ function asmFunc(global, env, buffer) {
|
||||
break continue_0;
|
||||
} while (1);
|
||||
}
|
||||
|
||||
|
||||
function start() {
|
||||
$lib_allocator_arena_startOffset = (HEAP_BASE + 7 | 0) & 4294967288 | 0;
|
||||
$lib_allocator_arena_offset = $lib_allocator_arena_startOffset;
|
||||
}
|
||||
|
||||
|
||||
function __wasm_ctz_i32(x) {
|
||||
x = x | 0;
|
||||
var $1 = 0;
|
||||
if ((x | 0) == (0 | 0)) $1 = 32; else $1 = 31 - Math_clz32(x ^ (x - 1 | 0) | 0) | 0;
|
||||
return $1 | 0;
|
||||
}
|
||||
|
||||
|
||||
function __wasm_popcnt_i32(x) {
|
||||
x = x | 0;
|
||||
var count = 0, $2 = 0;
|
||||
@ -900,19 +900,19 @@ function asmFunc(global, env, buffer) {
|
||||
};
|
||||
return $2 | 0;
|
||||
}
|
||||
|
||||
|
||||
function __wasm_rotl_i32(x, k) {
|
||||
x = x | 0;
|
||||
k = k | 0;
|
||||
return ((4294967295 >>> (k & 31 | 0) | 0) & x | 0) << (k & 31 | 0) | 0 | (((4294967295 << (32 - (k & 31 | 0) | 0) | 0) & x | 0) >>> (32 - (k & 31 | 0) | 0) | 0) | 0 | 0;
|
||||
}
|
||||
|
||||
|
||||
function __wasm_rotr_i32(x, k) {
|
||||
x = x | 0;
|
||||
k = k | 0;
|
||||
return ((4294967295 << (k & 31 | 0) | 0) & x | 0) >>> (k & 31 | 0) | 0 | (((4294967295 >>> (32 - (k & 31 | 0) | 0) | 0) & x | 0) << (32 - (k & 31 | 0) | 0) | 0) | 0 | 0;
|
||||
}
|
||||
|
||||
|
||||
function __wasm_grow_memory(pagesToAdd) {
|
||||
pagesToAdd = pagesToAdd | 0;
|
||||
var oldPages = __wasm_current_memory() | 0;
|
||||
@ -933,25 +933,25 @@ function asmFunc(global, env, buffer) {
|
||||
}
|
||||
return oldPages;
|
||||
}
|
||||
|
||||
|
||||
function __wasm_current_memory() {
|
||||
return buffer.byteLength / 65536 | 0;
|
||||
}
|
||||
|
||||
|
||||
return {
|
||||
init: assembly_index_init,
|
||||
getBody: assembly_index_getBody,
|
||||
step: assembly_index_step,
|
||||
bench: assembly_index_bench,
|
||||
init: assembly_index_init,
|
||||
getBody: assembly_index_getBody,
|
||||
step: assembly_index_step,
|
||||
bench: assembly_index_bench,
|
||||
memory: Object.create(Object.prototype, {
|
||||
grow: {
|
||||
value: __wasm_grow_memory
|
||||
},
|
||||
},
|
||||
buffer: {
|
||||
get: function () {
|
||||
return buffer;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
})
|
||||
};
|
File diff suppressed because it is too large
Load Diff
@ -4,9 +4,11 @@
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"asbuild:untouched": "asc assembly/index.ts -b build/untouched.wasm -t build/untouched.wat --sourceMap --validate",
|
||||
"asbuild:optimized": "asc assembly/index.ts -b build/optimized.wasm -t build/optimized.wat -a build/optimized.asm.js -O3 --validate --noDebug --noAssert",
|
||||
"asbuild": "npm run asbuild:untouched && npm run asbuild:optimized",
|
||||
"asbuild:optimized": "asc assembly/index.ts -b build/optimized.wasm -t build/optimized.wat -O3 --validate --noDebug --noAssert",
|
||||
"asbuild:asmjs": "asc assembly/index.ts -a build/index.asm.js -O3 --validate --noDebug --noAssert",
|
||||
"asbuild": "npm run asbuild:untouched && npm run asbuild:optimized && npm run asbuild:asmjs",
|
||||
"tsbuild": "tsc -p assembly -t ES2017 -m commonjs --outDir build",
|
||||
"build": "npm run asbuild && npm run tsbuild",
|
||||
"server": "http-server . -o -c-1",
|
||||
"test": "node tests"
|
||||
},
|
||||
|
@ -4,7 +4,7 @@ const fs = require("fs");
|
||||
const nbodyWASM = require("../index.js");
|
||||
|
||||
// Load ASMJS version
|
||||
src = fs.readFileSync(__dirname + "/../build/optimized.asm.js", "utf8");
|
||||
src = fs.readFileSync(__dirname + "/../build/index.asm.js", "utf8");
|
||||
if (src.indexOf("var Math_sqrt =") < 0) { // currently missing in asm.js output
|
||||
let p = src.indexOf(" var abort = env.abort;");
|
||||
src = src.substring(0, p) + " var Math_sqrt = global.Math.sqrt;\n " + src.substring(p);
|
||||
|
@ -4281,15 +4281,24 @@ export class Compiler extends DiagnosticEmitter {
|
||||
}
|
||||
case ElementKind.CLASS: {
|
||||
if (program.resolvedElementExpression) { // indexed access
|
||||
let indexedGet = (<Class>target).lookupOverload(OperatorKind.INDEXED_GET);
|
||||
if (!indexedGet) {
|
||||
this.error(
|
||||
DiagnosticCode.Index_signature_is_missing_in_type_0,
|
||||
expression.range, (<Class>target).internalName
|
||||
);
|
||||
let indexedSet = (<Class>target).lookupOverload(OperatorKind.INDEXED_SET);
|
||||
if (!indexedSet) {
|
||||
let indexedGet = (<Class>target).lookupOverload(OperatorKind.INDEXED_GET);
|
||||
if (!indexedGet) {
|
||||
this.error(
|
||||
DiagnosticCode.Index_signature_is_missing_in_type_0,
|
||||
expression.range, (<Class>target).internalName
|
||||
);
|
||||
} else {
|
||||
this.error(
|
||||
DiagnosticCode.Index_signature_in_type_0_only_permits_reading,
|
||||
expression.range, (<Class>target).internalName
|
||||
);
|
||||
}
|
||||
return this.module.createUnreachable();
|
||||
}
|
||||
elementType = indexedGet.signature.returnType;
|
||||
assert(indexedSet.signature.parameterTypes.length == 2); // parser must guarantee this
|
||||
elementType = indexedSet.signature.parameterTypes[1]; // 2nd parameter is the element
|
||||
break;
|
||||
}
|
||||
// fall-through
|
||||
|
Loading…
x
Reference in New Issue
Block a user