Rework resolver (#489)

* Rework IR and resolver to use nested lookup tables
* Integrate types into IR
* Make components prefer IR, slimmed down AST
* Implement `export *`
* Add `@lazy` annotation and remove `--noTreeShaking`
* Add `@start` annotation and remove magic `main`
* Related refactoring, cleanup and docs
This commit is contained in:
Daniel Wirtz
2019-02-21 00:11:22 +01:00
committed by GitHub
parent e623786b42
commit 0c64f21250
234 changed files with 16949 additions and 37871 deletions

View File

@ -11,8 +11,8 @@ import {
@sealed
export abstract class I8 {
static readonly MIN_VALUE: i8 = i8.MIN_VALUE;
static readonly MAX_VALUE: i8 = i8.MAX_VALUE;
@lazy static readonly MIN_VALUE: i8 = i8.MIN_VALUE;
@lazy static readonly MAX_VALUE: i8 = i8.MAX_VALUE;
static parseInt(value: string, radix: i32 = 0): i8 {
return <i8>parseI32(value, radix);
@ -27,8 +27,8 @@ export abstract class I8 {
@sealed
export abstract class I16 {
static readonly MIN_VALUE: i16 = i16.MIN_VALUE;
static readonly MAX_VALUE: i16 = i16.MAX_VALUE;
@lazy static readonly MIN_VALUE: i16 = i16.MIN_VALUE;
@lazy static readonly MAX_VALUE: i16 = i16.MAX_VALUE;
static parseInt(value: string, radix: i32 = 0): i16 {
return <i16>parseI32(value, radix);
@ -43,8 +43,8 @@ export abstract class I16 {
@sealed
export abstract class I32 {
static readonly MIN_VALUE: i32 = i32.MIN_VALUE;
static readonly MAX_VALUE: i32 = i32.MAX_VALUE;
@lazy static readonly MIN_VALUE: i32 = i32.MIN_VALUE;
@lazy static readonly MAX_VALUE: i32 = i32.MAX_VALUE;
static parseInt(value: string, radix: i32 = 0): i32 {
return <i32>parseI32(value, radix);
@ -59,8 +59,8 @@ export abstract class I32 {
@sealed
export abstract class I64 {
static readonly MIN_VALUE: i64 = i64.MIN_VALUE;
static readonly MAX_VALUE: i64 = i64.MAX_VALUE;
@lazy static readonly MIN_VALUE: i64 = i64.MIN_VALUE;
@lazy static readonly MAX_VALUE: i64 = i64.MAX_VALUE;
static parseInt(value: string, radix: i32 = 0): i64 {
return <i64>parseI64(value, radix);
@ -75,8 +75,8 @@ export abstract class I64 {
@sealed
export abstract class Isize {
static readonly MIN_VALUE: isize = isize.MIN_VALUE;
static readonly MAX_VALUE: isize = isize.MAX_VALUE;
@lazy static readonly MIN_VALUE: isize = isize.MIN_VALUE;
@lazy static readonly MAX_VALUE: isize = isize.MAX_VALUE;
static parseInt(value: string, radix: i32 = 0): isize {
return <isize>parseI64(value, radix);
@ -91,8 +91,8 @@ export abstract class Isize {
@sealed
export abstract class U8 {
static readonly MIN_VALUE: u8 = u8.MIN_VALUE;
static readonly MAX_VALUE: u8 = u8.MAX_VALUE;
@lazy static readonly MIN_VALUE: u8 = u8.MIN_VALUE;
@lazy static readonly MAX_VALUE: u8 = u8.MAX_VALUE;
static parseInt(value: string, radix: i32 = 0): u8 {
return <u8>parseI32(value, radix);
@ -107,8 +107,8 @@ export abstract class U8 {
@sealed
export abstract class U16 {
static readonly MIN_VALUE: u16 = u16.MIN_VALUE;
static readonly MAX_VALUE: u16 = u16.MAX_VALUE;
@lazy static readonly MIN_VALUE: u16 = u16.MIN_VALUE;
@lazy static readonly MAX_VALUE: u16 = u16.MAX_VALUE;
static parseInt(value: string, radix: i32 = 0): u16 {
return <u16>parseI32(value, radix);
@ -123,8 +123,8 @@ export abstract class U16 {
@sealed
export abstract class U32 {
static readonly MIN_VALUE: u32 = u32.MIN_VALUE;
static readonly MAX_VALUE: u32 = u32.MAX_VALUE;
@lazy static readonly MIN_VALUE: u32 = u32.MIN_VALUE;
@lazy static readonly MAX_VALUE: u32 = u32.MAX_VALUE;
static parseInt(value: string, radix: i32 = 0): u32 {
return <u32>parseI32(value, radix);
@ -139,8 +139,8 @@ export abstract class U32 {
@sealed
export abstract class U64 {
static readonly MIN_VALUE: u64 = u64.MIN_VALUE;
static readonly MAX_VALUE: u64 = u64.MAX_VALUE;
@lazy static readonly MIN_VALUE: u64 = u64.MIN_VALUE;
@lazy static readonly MAX_VALUE: u64 = u64.MAX_VALUE;
static parseInt(value: string, radix: i32 = 0): u64 {
return <u64>parseI64(value, radix);
@ -155,8 +155,8 @@ export abstract class U64 {
@sealed
export abstract class Usize {
static readonly MIN_VALUE: usize = usize.MIN_VALUE;
static readonly MAX_VALUE: usize = usize.MAX_VALUE;
@lazy static readonly MIN_VALUE: usize = usize.MIN_VALUE;
@lazy static readonly MAX_VALUE: usize = usize.MAX_VALUE;
static parseInt(value: string, radix: i32 = 0): usize {
return <usize>parseI64(value, radix);
@ -171,8 +171,8 @@ export abstract class Usize {
@sealed
export abstract class Bool {
static readonly MIN_VALUE: bool = bool.MIN_VALUE;
static readonly MAX_VALUE: bool = bool.MAX_VALUE;
@lazy static readonly MIN_VALUE: bool = bool.MIN_VALUE;
@lazy static readonly MAX_VALUE: bool = bool.MAX_VALUE;
toString(this: bool): String {
// TODO: radix?
@ -180,20 +180,19 @@ export abstract class Bool {
}
}
@sealed
export abstract class Boolean extends Bool {}
export { Bool as Boolean };
@sealed
export abstract class F32 {
static readonly EPSILON: f32 = f32.EPSILON;
static readonly MIN_VALUE: f32 = f32.MIN_VALUE;
static readonly MAX_VALUE: f32 = f32.MAX_VALUE;
static readonly MIN_SAFE_INTEGER: f32 = f32.MIN_SAFE_INTEGER;
static readonly MAX_SAFE_INTEGER: f32 = f32.MAX_SAFE_INTEGER;
static readonly POSITIVE_INFINITY: f32 = Infinity;
static readonly NEGATIVE_INFINITY: f32 = -Infinity;
static readonly NaN: f32 = NaN;
@lazy static readonly EPSILON: f32 = f32.EPSILON;
@lazy static readonly MIN_VALUE: f32 = f32.MIN_VALUE;
@lazy static readonly MAX_VALUE: f32 = f32.MAX_VALUE;
@lazy static readonly MIN_SAFE_INTEGER: f32 = f32.MIN_SAFE_INTEGER;
@lazy static readonly MAX_SAFE_INTEGER: f32 = f32.MAX_SAFE_INTEGER;
@lazy static readonly POSITIVE_INFINITY: f32 = Infinity;
@lazy static readonly NEGATIVE_INFINITY: f32 = -Infinity;
@lazy static readonly NaN: f32 = NaN;
static isNaN(value: f32): bool {
return isNaN<f32>(value);
@ -228,14 +227,14 @@ export abstract class F32 {
@sealed
export abstract class F64 {
static readonly EPSILON: f64 = f64.EPSILON;
static readonly MIN_VALUE: f64 = f64.MIN_VALUE;
static readonly MAX_VALUE: f64 = f64.MAX_VALUE;
static readonly MIN_SAFE_INTEGER: f64 = f64.MIN_SAFE_INTEGER;
static readonly MAX_SAFE_INTEGER: f64 = f64.MAX_SAFE_INTEGER;
static readonly POSITIVE_INFINITY: f64 = Infinity;
static readonly NEGATIVE_INFINITY: f64 = -Infinity;
static readonly NaN: f64 = NaN;
@lazy static readonly EPSILON: f64 = f64.EPSILON;
@lazy static readonly MIN_VALUE: f64 = f64.MIN_VALUE;
@lazy static readonly MAX_VALUE: f64 = f64.MAX_VALUE;
@lazy static readonly MIN_SAFE_INTEGER: f64 = f64.MIN_SAFE_INTEGER;
@lazy static readonly MAX_SAFE_INTEGER: f64 = f64.MAX_SAFE_INTEGER;
@lazy static readonly POSITIVE_INFINITY: f64 = Infinity;
@lazy static readonly NEGATIVE_INFINITY: f64 = -Infinity;
@lazy static readonly NaN: f64 = NaN;
static isNaN(value: f64): bool {
return builtin_isNaN<f64>(value);
@ -267,5 +266,4 @@ export abstract class F64 {
}
}
@sealed
export abstract class Number extends F64 {}
export { F64 as Number };