mirror of
https://github.com/fluencelabs/assemblyscript
synced 2025-06-22 19:21:47 +00:00
Slight restructure
This commit is contained in:
122
std/assembly.d.ts
vendored
Normal file
122
std/assembly.d.ts
vendored
Normal file
@ -0,0 +1,122 @@
|
||||
// Definitions for the "AssemblyScript" subset.
|
||||
|
||||
// Types
|
||||
|
||||
/** An 8-bit signed integer. */
|
||||
declare type i8 = number;
|
||||
/** A 16-bit signed integer. */
|
||||
declare type i16 = number;
|
||||
/** A 32-bit signed integer. */
|
||||
declare type i32 = number;
|
||||
/** A 64-bit signed integer. */
|
||||
declare type i64 = number;
|
||||
/** A 32-bit signed integer when targeting 32-bit WebAssembly or a 64-bit signed integer when targeting 64-bit WebAssembly. */
|
||||
declare type isize = number;
|
||||
/** An 8-bit unsigned integer. */
|
||||
declare type u8 = number;
|
||||
/** A 16-bit unsigned integer. */
|
||||
declare type u16 = number;
|
||||
/** A 32-bit unsigned integer. */
|
||||
declare type u32 = number;
|
||||
/** A 64-bit unsigned integer. */
|
||||
declare type u64 = number;
|
||||
/** A 32-bit unsigned integer when targeting 32-bit WebAssembly or a 64-bit unsigned integer when targeting 64-bit WebAssembly. */
|
||||
declare type usize = number;
|
||||
/** A 1-bit unsigned integer. */
|
||||
declare type bool = any; // sic
|
||||
/** A 32-bit float. */
|
||||
declare type f32 = number;
|
||||
/** A 64-bit float. */
|
||||
declare type f64 = number;
|
||||
|
||||
// Built-ins
|
||||
|
||||
/** Performs the sign-agnostic count leading zero bits operation on a 32-bit or 64-bit integer. All zero bits are considered leading if the value is zero. */
|
||||
declare function clz<T = i32 | i64>(value: T): T;
|
||||
/** Performs the sign-agnostic count tailing zero bits operation on a 32-bit or 64-bit integer. All zero bits are considered trailing if the value is zero. */
|
||||
declare function ctz<T = i32 | i64>(value: T): T;
|
||||
/** Performs the sign-agnostic count number of one bits operation on a 32-bit or 64-bit integer. */
|
||||
declare function popcnt<T = i32 | i64>(value: T): T;
|
||||
/** Performs the sign-agnostic rotate left operation on a 32-bit or 64-bit integer. */
|
||||
declare function rotl<T = i32 | i64>(value: T, shift: T): T;
|
||||
/** Performs the sign-agnostic rotate right operation on a 32-bit or 64-bit integer. */
|
||||
declare function rotr<T = i32 | i64>(value: T, shift: T): T;
|
||||
/** Computes the absolute value of an integer or float. */
|
||||
declare function abs<T = i32 | i64 | f32 | f64>(value: T): T;
|
||||
/** Determines the maximum of two integers or floats. If either operand is `NaN`, returns `NaN`. */
|
||||
declare function max<T = i32 | i64 | f32 | f64>(left: T, right: T): T;
|
||||
/** Determines the minimum of two integers or floats. If either operand is `NaN`, returns `NaN`. */
|
||||
declare function min<T = i32 | i64 | f32 | f64>(left: T, right: T): T;
|
||||
/** Performs the ceiling operation on a 32-bit or 64-bit float. */
|
||||
declare function ceil<T = f32 | f64>(value: T): T;
|
||||
/** Composes a 32-bit or 64-bit float from the magnitude of `x` and the sign of `y`. */
|
||||
declare function copysign<T = f32 | f64>(x: T, y: T): T;
|
||||
/** Performs the floor operation on a 32-bit or 64-bit float. */
|
||||
declare function floor<T = f32 | f64>(value: T): T;
|
||||
/** Rounds to the nearest integer tied to even of a 32-bit or 64-bit float. */
|
||||
declare function nearest<T = f32 | f64>(value: T): T;
|
||||
/** Reinterprets the bits of a value of type `T1` as type `T2`. Valid reinterpretations are i32 to/from f32 and i64 to/from f64. */
|
||||
declare function reinterpret<T1 = i32 | i64 | f32 | f64, T2 = i32 | i64 | f32 | f64>(value: T1): T2;
|
||||
/** Selects one of two pre-evaluated values depending on the condition. */
|
||||
declare function select<T>(ifTrue: T, ifFalse: T, condition: bool): T;
|
||||
/** Calculates the square root of a 32-bit or 64-bit float. */
|
||||
declare function sqrt<T = f32 | f64>(value: T): T;
|
||||
/** Rounds to the nearest integer towards zero of a 32-bit or 64-bit float. */
|
||||
declare function trunc<T = f32 | f64>(value: T): T;
|
||||
/** Loads a value of the specified type from memory. */
|
||||
declare function load<T>(offset: usize): T;
|
||||
/** Stores a value of the specified type to memory. */
|
||||
declare function store<T>(offset: usize, value: T): void;
|
||||
/** Returns the current memory size in units of pages. One page is 64kb. */
|
||||
declare function current_memory(): i32;
|
||||
/** Grows linear memory by a given unsigned delta of pages. One page is 64kb. Returns the previous memory size in units of pages or `-1` on failure. */
|
||||
declare function grow_memory(value: i32): i32;
|
||||
/** Emits an unreachable operation that results in a runtime error when executed. */
|
||||
declare function unreachable(): any; // sic
|
||||
|
||||
/** NaN (not a number) as a 32-bit or 64-bit float depending on context. */
|
||||
declare const NaN: f32 | f64;
|
||||
/** Positive infinity as a 32-bit or 64-bit float depending on context. */
|
||||
declare const Infinity: f32 | f64;
|
||||
/** Heap start offset. */
|
||||
declare const HEAP_START: usize;
|
||||
/** Determines the byte size of the specified core or class type. Compiles to a constant. */
|
||||
declare function sizeof<T>(): usize;
|
||||
/** Changes the type of a value to another one. Useful for casting class instances to their pointer values and vice-versa. */
|
||||
declare function changetype<T1,T2>(value: T1): T2;
|
||||
/** Tests if a 32-bit or 64-bit float is NaN. */
|
||||
declare function isNaN<T = f32 | f64>(value: T): bool;
|
||||
/** Tests if a 32-bit or 64-bit float is finite, that is not NaN or +/-Infinity. */
|
||||
declare function isFinite<T = f32 | f64>(value: T): bool;
|
||||
/** Traps if the specified value evaluates to `false`. */
|
||||
declare function assert(isTrue: bool): void;
|
||||
/** Parses an integer string to a 64-bit float. */
|
||||
declare function parseInt(str: string, radix?: i32): f64;
|
||||
/** Parses a string to a 64-bit float. */
|
||||
declare function parseFloat(str: string): f64;
|
||||
|
||||
// Internal decorators (not yet implemented)
|
||||
|
||||
/** Annotates an element being part of the global namespace. */
|
||||
declare function global(): any;
|
||||
/** Annotates a function being always inlined. */
|
||||
declare function inline(): any;
|
||||
/** Annotates a class using a C-style memory layout. */
|
||||
declare function struct(): any;
|
||||
|
||||
// Standard library (not yet implemented)
|
||||
|
||||
interface Array<T> {}
|
||||
interface Boolean {}
|
||||
interface Function {}
|
||||
interface IArguments {}
|
||||
interface Number {}
|
||||
interface Object {}
|
||||
interface RegExp {}
|
||||
|
||||
declare class String {
|
||||
static fromCharCode(ls: i32, hs?: i32): string;
|
||||
static fromCharCodes(arr: u16[]): string;
|
||||
static fromCodePoint(cp: i32): string;
|
||||
static fromCodePoints(arr: i32[]): string;
|
||||
}
|
15
std/assembly.json
Normal file
15
std/assembly.json
Normal file
@ -0,0 +1,15 @@
|
||||
{
|
||||
"extends": "../tsconfig-base.json",
|
||||
"compilerOptions": {
|
||||
"target": "esnext",
|
||||
"noLib": true,
|
||||
"types": [],
|
||||
"rootDirs": [
|
||||
"./assembly"
|
||||
],
|
||||
"allowJs": false
|
||||
},
|
||||
"files": [
|
||||
"./assembly.d.ts"
|
||||
]
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"extends": "../../assembly.json",
|
||||
"extends": "../assembly.json",
|
||||
"compilerOptions": {
|
||||
"diagnostics": true
|
||||
},
|
||||
|
152
std/portable.d.ts
vendored
Normal file
152
std/portable.d.ts
vendored
Normal file
@ -0,0 +1,152 @@
|
||||
// Definitions for the "portable AssemblyScript" subset.
|
||||
|
||||
// Portable types
|
||||
|
||||
// Note that semantic differences require additional explicit conversions for full compatibility.
|
||||
// For example, when casting an i32 to an u8, doing `<u8>(someI32 & 0xff)` will yield the same
|
||||
// result when compiling to WebAssembly or JS while `<u8>someI32` alone does nothing in JS.
|
||||
|
||||
// Note that i64's are not portable (JS numbers are IEEE754 doubles with a maximum safe integer value
|
||||
// of 2^53-1) and instead require a compatibility layer to work in JS as well. See: src/util/i64.ts
|
||||
|
||||
declare type i8 = number;
|
||||
declare type u8 = number;
|
||||
declare type i16 = number;
|
||||
declare type u16 = number;
|
||||
declare type i32 = number;
|
||||
declare type u32 = number;
|
||||
declare type isize = number;
|
||||
declare type usize = number;
|
||||
declare type f32 = number;
|
||||
declare type f64 = number;
|
||||
declare type bool = boolean;
|
||||
|
||||
// Portable built-ins
|
||||
|
||||
/** Performs the sign-agnostic count leading zero bits operation on a 32-bit integer. All zero bits are considered leading if the value is zero. */
|
||||
declare function clz<T = i32>(value: T): T;
|
||||
/** Computes the absolute value of an integer or float. */
|
||||
declare function abs<T = i32 | f32 | f64>(value: T): T;
|
||||
/** Determines the maximum of two integers or floats. If either operand is `NaN`, returns `NaN`. */
|
||||
declare function max<T = i32 | f32 | f64>(left: T, right: T): T;
|
||||
/** Determines the minimum of two integers or floats. If either operand is `NaN`, returns `NaN`. */
|
||||
declare function min<T = i32 | f32 | f64>(left: T, right: T): T;
|
||||
/** Performs the ceiling operation on a 32-bit or 64-bit float. */
|
||||
declare function ceil<T = f32 | f64>(value: T): T;
|
||||
/** Performs the floor operation on a 32-bit or 64-bit float. */
|
||||
declare function floor<T = f32 | f64>(value: T): T;
|
||||
/** Selects one of two pre-evaluated values depending on the condition. */
|
||||
declare function select<T>(ifTrue: T, ifFalse: T, condition: bool): T;
|
||||
/** Calculates the square root of a 32-bit or 64-bit float. */
|
||||
declare function sqrt<T = f32 | f64>(value: T): T;
|
||||
/** Rounds to the nearest integer towards zero of a 32-bit or 64-bit float. */
|
||||
declare function trunc<T = f32 | f64>(value: T): T;
|
||||
/** Loads a value of the specified type from memory. Type must be `u8`. */
|
||||
declare function load<T = u8>(offset: usize): T;
|
||||
/** Stores a value of the specified type to memory. Type must be `u8`. */
|
||||
declare function store<T = u8>(offset: usize, value: T): void;
|
||||
/** Emits an unreachable operation that results in a runtime error when executed. */
|
||||
declare function unreachable(): any; // sic
|
||||
|
||||
/** Changes the type of a value to another one. Useful for casting class instances to their pointer values and vice-versa. */
|
||||
declare function changetype<T1,T2>(value: T1): T2;
|
||||
/** Traps if the specified value evaluates to `false`. */
|
||||
declare function assert(isTrue: bool): void;
|
||||
/** Parses an integer string to a 64-bit float. */
|
||||
declare function parseInt(str: string, radix?: i32): f64;
|
||||
/** Parses a floating point string to a 64-bit float. */
|
||||
declare function parseFloat(str: string): f64;
|
||||
|
||||
// Portable standard library
|
||||
// Everything marked @deprecated is a temporary filler. Do not use.
|
||||
|
||||
declare const NaN: f32 | f64;
|
||||
declare const Infinity: f32 | f64;
|
||||
|
||||
declare class Array<T> {
|
||||
[key: number]: T;
|
||||
length: i32;
|
||||
constructor(capacity?: i32);
|
||||
push(value: T): void;
|
||||
pop(): T;
|
||||
join(delim: string): string;
|
||||
slice(from: i32, to?: i32): T[];
|
||||
splice(index: i32, count: i32): T[];
|
||||
}
|
||||
|
||||
declare class Uint8Array extends Array<u8> {}
|
||||
declare class Uint16Array extends Array<u16> {}
|
||||
declare class Uint32Array extends Array<u32> {}
|
||||
declare class Int8Array extends Array<i8> {}
|
||||
declare class Int16Array extends Array<i16> {}
|
||||
declare class Int32Array extends Array<i32> {}
|
||||
|
||||
declare class String {
|
||||
static fromCharCode(ls: i32, hs?: i32): string;
|
||||
static fromCharCodes(arr: u16[]): string;
|
||||
static fromCodePoint(cp: i32): string;
|
||||
static fromCodePoints(arr: i32[]): string;
|
||||
readonly length: i32;
|
||||
indexOf(subject: string): i32;
|
||||
charCodeAt(index: i32): i32;
|
||||
substring(from: i32, to?: i32): string;
|
||||
startsWith(subject: string): bool;
|
||||
endsWith(subject: string): bool;
|
||||
replace(search: string, replacement: string): string;
|
||||
}
|
||||
|
||||
declare class Boolean {}
|
||||
|
||||
declare class Number {
|
||||
toString(radix: i32): string;
|
||||
}
|
||||
|
||||
declare class Object {}
|
||||
|
||||
declare class Function {
|
||||
/** @deprecated */
|
||||
apply(subject: any): any;
|
||||
}
|
||||
|
||||
declare class RegExp {}
|
||||
|
||||
declare interface IArguments {}
|
||||
|
||||
declare class Error {
|
||||
constructor(message: string);
|
||||
message: string;
|
||||
stack: string | null;
|
||||
}
|
||||
|
||||
declare class Symbol {
|
||||
static iterator: symbol;
|
||||
}
|
||||
|
||||
declare class Set<T> {
|
||||
constructor(entries?: T[]);
|
||||
add(value: T): void;
|
||||
has(value: T): bool;
|
||||
clear(): void;
|
||||
[Symbol.iterator](): Iterator<T>;
|
||||
}
|
||||
|
||||
declare class Map<K,V> {
|
||||
constructor(entries?: [K, V][]);
|
||||
set(key: K, value: V): void;
|
||||
has(key: K): bool;
|
||||
get(key: K): V | null;
|
||||
clear(): void;
|
||||
[Symbol.iterator](): Iterator<[K, V]>;
|
||||
}
|
||||
|
||||
declare interface Iterator<T> {}
|
||||
|
||||
declare namespace JSON {
|
||||
/** @deprecated */
|
||||
function stringify(subject: any): string;
|
||||
}
|
||||
|
||||
declare namespace console {
|
||||
/** @deprecated */
|
||||
function log(message: string): void;
|
||||
}
|
33
std/portable.js
Normal file
33
std/portable.js
Normal file
@ -0,0 +1,33 @@
|
||||
var globalScope = typeof window !== "undefined" && window || typeof global !== "undefined" && global || self;
|
||||
|
||||
globalScope["clz"] = Math.clz32;
|
||||
globalScope["abs"] = Math.abs;
|
||||
globalScope["max"] = Math.max;
|
||||
globalScope["min"] = Math.min;
|
||||
globalScope["ceil"] = Math.ceil;
|
||||
globalScope["floor"] = Math.floor;
|
||||
globalScope["select"] = function select(ifTrue, ifFalse, condition) { return condition ? ifTrue : ifFalse; };
|
||||
globalScope["sqrt"] = Math.sqrt;
|
||||
globalScope["trunc"] = Math.trunc;
|
||||
|
||||
function UnreachableError() {
|
||||
this.stack = new Error().stack;
|
||||
}
|
||||
UnreachableError.prototype = new Error;
|
||||
UnreachableError.prototype.name = "UnreachableError";
|
||||
UnreachableError.prototype.message = "unreachable";
|
||||
|
||||
globalScope["unreachable"] = function unreachable() { throw new UnreachableError(); };
|
||||
|
||||
function AssertionError() {
|
||||
this.stack = new Error().stack;
|
||||
}
|
||||
AssertionError.prototype = new Error;
|
||||
AssertionError.prototype.name = "AssertionError";
|
||||
AssertionError.prototype.message = "assertion failed";
|
||||
|
||||
globalScope["assert"] = function assert(isTrue) { if (!isTrue) throw new AssertionError(); };
|
||||
globalScope["changetype"] = function changetype(value) { return value; }
|
||||
|
||||
String["fromCharCodes"] = function fromCharCodes(arr) { return String.fromCharCode.apply(String, arr); }
|
||||
String["fromCodePoints"] = function fromCodePoints(arr) { return String.fromCodePoint.apply(String, arr); }
|
21
std/portable.json
Normal file
21
std/portable.json
Normal file
@ -0,0 +1,21 @@
|
||||
{
|
||||
"extends": "../tsconfig-base.json",
|
||||
"compilerOptions": {
|
||||
"target": "es5",
|
||||
"module": "commonjs",
|
||||
"downlevelIteration": true,
|
||||
"preserveConstEnums": true,
|
||||
"noLib": true,
|
||||
"types": [],
|
||||
"rootDirs": [
|
||||
"./portable"
|
||||
],
|
||||
"allowJs": true
|
||||
},
|
||||
"files": [
|
||||
"./portable.d.ts",
|
||||
"./portable.js",
|
||||
"./portable/heap.d.ts",
|
||||
"./portable/heap.js"
|
||||
]
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"extends": "../../portable.json",
|
||||
"extends": "../portable.json",
|
||||
"compilerOptions": {
|
||||
"diagnostics": true
|
||||
},
|
||||
|
Reference in New Issue
Block a user