@bikky/compiler 0.0.8 → 0.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Libraries/BiscuitLibraries.d.ts +2 -2
- package/Libraries/BiscuitLibraries.js +2 -2
- package/Libraries/MixinCode.d.ts +13 -13
- package/Libraries/MixinCode.js +92 -92
- package/Source/ASTBuilder.d.ts +36 -0
- package/Source/ASTBuilder.d.ts.map +1 -0
- package/Source/ASTBuilder.js +180 -0
- package/Source/ASTHelper.d.ts +67 -73
- package/Source/ASTHelper.d.ts.map +1 -1
- package/Source/ASTHelper.js +320 -343
- package/Source/ASTInterface/Class.d.ts +38 -0
- package/Source/ASTInterface/Class.d.ts.map +1 -0
- package/Source/ASTInterface/Class.js +256 -0
- package/Source/ASTInterface/Crawler.d.ts +8 -0
- package/Source/ASTInterface/Crawler.d.ts.map +1 -0
- package/Source/ASTInterface/Crawler.js +55 -0
- package/Source/ASTInterface/Tokens.d.ts +78 -0
- package/Source/ASTInterface/Tokens.d.ts.map +1 -0
- package/Source/ASTInterface/Tokens.js +49 -0
- package/Source/ASTSearcher.d.ts +20 -0
- package/Source/ASTSearcher.d.ts.map +1 -0
- package/Source/ASTSearcher.js +116 -0
- package/Source/ASTTraverser.d.ts +10 -0
- package/Source/ASTTraverser.d.ts.map +1 -0
- package/Source/ASTTraverser.js +74 -0
- package/Source/TSPatchTypes.d.ts +17 -0
- package/Transformers/CompilerInsertions.js +23 -23
- package/Transformers/MacroTransformer.d.ts +2 -2
- package/Transformers/MacroTransformer.d.ts.map +1 -1
- package/Transformers/MacroTransformer.js +282 -281
- package/Transformers/MixinTransformer.d.ts +2 -3
- package/Transformers/MixinTransformer.d.ts.map +1 -1
- package/Transformers/MixinTransformer.js +320 -124
- package/Transformers/SuperTransformer.d.ts +2 -2
- package/Transformers/SuperTransformer.d.ts.map +1 -1
- package/Transformers/SuperTransformer.js +138 -117
- package/obj/Debug/BiscuitCompiler.njsproj.AssemblyReference.cache +0 -0
- package/package.json +6 -5
- package/tsconfig.build.libs.json +1 -1
- package/tsconfig.build.libs.tsbuildinfo +1 -1
- package/tsconfig.build.src.json +1 -1
- package/tsconfig.build.src.tsbuildinfo +1 -1
- package/tsconfig.json +10 -11
- package/tsconfig.tsbuildinfo +1 -0
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
/// <reference path="GlobalTypes.d.ts" />
|
|
2
|
-
import "./MixinCode.js";
|
|
1
|
+
/// <reference path="GlobalTypes.d.ts" />
|
|
2
|
+
import "./MixinCode.js";
|
|
3
3
|
//# sourceMappingURL=BiscuitLibraries.d.ts.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
/// <reference path="./GlobalTypes.d.ts" />
|
|
2
|
-
import "./MixinCode.js";
|
|
1
|
+
/// <reference path="./GlobalTypes.d.ts" />
|
|
2
|
+
import "./MixinCode.js";
|
|
3
3
|
//# sourceMappingURL=BiscuitLibraries.js.map
|
package/Libraries/MixinCode.d.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
type GetConstraints<Extras> = Extras extends (Function & {
|
|
2
|
-
prototype: infer Constraints;
|
|
3
|
-
})[] ? Constraints : never;
|
|
4
|
-
type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;
|
|
5
|
-
type AllConstraints<Super, Constraints> = UnionToIntersection<Constraints> extends never ? Super : Super & UnionToIntersection<Constraints>;
|
|
6
|
-
type Class<T> = (Function & {
|
|
7
|
-
prototype: T;
|
|
8
|
-
});
|
|
9
|
-
export declare function makeMixerFoo<Mixin extends Object, Super extends Object, Extras extends Class<any>[]>(mixin: Class<Mixin>, common: Class<Super>, ...constraints: Extras): <Core extends AllConstraints<Super, GetConstraints<Extras>>>(core: Function & {
|
|
10
|
-
prototype: Core;
|
|
11
|
-
}) => new (id: string, name: string, data: any, instance?: any) => Core & Mixin;
|
|
12
|
-
export declare function MixableClass<Base extends Class<Object>>(param: Base): Base;
|
|
13
|
-
export {};
|
|
1
|
+
type GetConstraints<Extras> = Extras extends (Function & {
|
|
2
|
+
prototype: infer Constraints;
|
|
3
|
+
})[] ? Constraints : never;
|
|
4
|
+
type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;
|
|
5
|
+
type AllConstraints<Super, Constraints> = UnionToIntersection<Constraints> extends never ? Super : Super & UnionToIntersection<Constraints>;
|
|
6
|
+
type Class<T> = (Function & {
|
|
7
|
+
prototype: T;
|
|
8
|
+
});
|
|
9
|
+
export declare function makeMixerFoo<Mixin extends Object, Super extends Object, Extras extends Class<any>[]>(mixin: Class<Mixin>, common: Class<Super>, ...constraints: Extras): <Core extends AllConstraints<Super, GetConstraints<Extras>>>(core: Function & {
|
|
10
|
+
prototype: Core;
|
|
11
|
+
}) => new (id: string, name: string, data: any, instance?: any) => Core & Mixin;
|
|
12
|
+
export declare function MixableClass<Base extends Class<Object>>(param: Base): Base;
|
|
13
|
+
export {};
|
|
14
14
|
//# sourceMappingURL=MixinCode.d.ts.map
|
package/Libraries/MixinCode.js
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
//Propertydescriptor is needed to preserve getters and setters, otherwise we trigger them.
|
|
2
|
-
// We assign functions directly though to preserve the prototype chain when using super() [it's not working].
|
|
3
|
-
function duplicatePrototype(prototype, parent) {
|
|
4
|
-
var names = Array.from(Object.getOwnPropertyNames(prototype));
|
|
5
|
-
names.push(...Object.getOwnPropertySymbols(prototype));
|
|
6
|
-
var result = { __proto__: parent };
|
|
7
|
-
for (let i = names.length - 1; i >= 0; i--) {
|
|
8
|
-
let name = names[i];
|
|
9
|
-
var descriptor = Object.getOwnPropertyDescriptor(prototype, name);
|
|
10
|
-
Object.defineProperty(result, name, descriptor);
|
|
11
|
-
}
|
|
12
|
-
return result;
|
|
13
|
-
}
|
|
14
|
-
var mixingObject = [];
|
|
15
|
-
var mixingBases = [];
|
|
16
|
-
var mixingBaseProtos = [];
|
|
17
|
-
//The following parameter type allows abstract classes, where as new () => Core doesn't.
|
|
18
|
-
export function makeMixerFoo(mixin, common, ...constraints) {
|
|
19
|
-
if (typeof mixin !== "function" || !mixin.prototype)
|
|
20
|
-
throw new Error("Can only mix classes into other classes.");
|
|
21
|
-
return function mix(core) {
|
|
1
|
+
//Propertydescriptor is needed to preserve getters and setters, otherwise we trigger them.
|
|
2
|
+
// We assign functions directly though to preserve the prototype chain when using super() [it's not working].
|
|
3
|
+
function duplicatePrototype(prototype, parent) {
|
|
4
|
+
var names = Array.from(Object.getOwnPropertyNames(prototype));
|
|
5
|
+
names.push(...Object.getOwnPropertySymbols(prototype));
|
|
6
|
+
var result = { __proto__: parent };
|
|
7
|
+
for (let i = names.length - 1; i >= 0; i--) {
|
|
8
|
+
let name = names[i];
|
|
9
|
+
var descriptor = Object.getOwnPropertyDescriptor(prototype, name);
|
|
10
|
+
Object.defineProperty(result, name, descriptor);
|
|
11
|
+
}
|
|
12
|
+
return result;
|
|
13
|
+
}
|
|
14
|
+
var mixingObject = [];
|
|
15
|
+
var mixingBases = [];
|
|
16
|
+
var mixingBaseProtos = [];
|
|
17
|
+
//The following parameter type allows abstract classes, where as new () => Core doesn't.
|
|
18
|
+
export function makeMixerFoo(mixin, common, ...constraints) {
|
|
19
|
+
if (typeof mixin !== "function" || !mixin.prototype)
|
|
20
|
+
throw new Error("Can only mix classes into other classes.");
|
|
21
|
+
return function mix(core) {
|
|
22
22
|
var newClass = eval(`
|
|
23
23
|
function Mixin_${mixin.name}(...args) {
|
|
24
24
|
//This allows us to change the prototype which the constructor uses for creating
|
|
@@ -35,75 +35,75 @@ export function makeMixerFoo(mixin, common, ...constraints) {
|
|
|
35
35
|
return object;
|
|
36
36
|
};
|
|
37
37
|
Mixin_${mixin.name}
|
|
38
|
-
`);
|
|
39
|
-
var originalPrototypes = [];
|
|
40
|
-
var current = mixin;
|
|
41
|
-
originalPrototypes.push(current.prototype);
|
|
42
|
-
current = current.prototype;
|
|
43
|
-
while (mixingBaseProtos.indexOf(current.__proto__) < 0 && current.__proto__ != Object.prototype) {
|
|
44
|
-
originalPrototypes.push(current.__proto__);
|
|
45
|
-
current = current.__proto__;
|
|
46
|
-
}
|
|
47
|
-
var newPrototypes = [];
|
|
48
|
-
while (originalPrototypes.length > 0) {
|
|
49
|
-
current = originalPrototypes.pop();
|
|
50
|
-
let originalClass = current;
|
|
51
|
-
var prototype = newPrototypes.length == 0 ? core.prototype : newPrototypes[0];
|
|
52
|
-
let newmix = duplicatePrototype(current, prototype);
|
|
53
|
-
var edits = {
|
|
54
|
-
//We override the original isA so that this class appears to be a movable as well as other types.
|
|
55
|
-
isA(other) {
|
|
56
|
-
if (other.prototype == originalClass) {
|
|
57
|
-
return true;
|
|
58
|
-
}
|
|
59
|
-
else {
|
|
60
|
-
return super.isA(other);
|
|
61
|
-
}
|
|
62
|
-
},
|
|
63
|
-
};
|
|
64
|
-
Object.assign(newmix, edits);
|
|
65
|
-
newmix.__proto__ = prototype;
|
|
66
|
-
//This ensures any super calls in the edits to the prototype resolve correctly, because
|
|
67
|
-
// they're based on the original object the function is defined in, not the prototype the
|
|
68
|
-
// function ends up on.
|
|
69
|
-
edits.__proto__ = prototype;
|
|
70
|
-
newPrototypes.unshift(newmix);
|
|
71
|
-
}
|
|
72
|
-
newClass.prototype = newPrototypes[0];
|
|
73
|
-
newClass.prototype.constructor = newClass;
|
|
74
|
-
//I wanted to do this on object creation rather than having it be inherited, but that caused a problem with the value
|
|
75
|
-
// not being accessible in the constructor, which is necessary because the constructor can call other functons.
|
|
76
|
-
if (mixin.Super) {
|
|
77
|
-
//console.log("Configuring", mixin.name, "to have a parent that is", newClass.prototype.__proto__.constructor.name);
|
|
78
|
-
newClass.prototype[mixin.Super] = core.prototype;
|
|
79
|
-
}
|
|
80
|
-
//newClass.__proto__ = newPrototypes[0];
|
|
81
|
-
return newClass;
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
export function MixableClass(param) {
|
|
85
|
-
//This is done to preserve super calls in mixins.
|
|
86
|
-
class Mixbase extends param {
|
|
87
|
-
//@ts-ignore we don't need to call super in this child class.
|
|
88
|
-
constructor(...args) {
|
|
89
|
-
//We can't override the class' object using .call or .apply, but we can override it in the base class.
|
|
90
|
-
var object = mixingObject[0];
|
|
91
|
-
return object;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
;
|
|
95
|
-
mixingBases.push(Mixbase);
|
|
96
|
-
mixingBaseProtos.push(Mixbase.prototype);
|
|
97
|
-
return Mixbase;
|
|
98
|
-
}
|
|
99
|
-
if (typeof global !== "undefined") {
|
|
100
|
-
global.Mixable = MixableClass;
|
|
101
|
-
global.makeMixer = makeMixerFoo;
|
|
102
|
-
}
|
|
103
|
-
else {
|
|
104
|
-
Mixable = MixableClass;
|
|
105
|
-
makeMixer = makeMixerFoo;
|
|
106
|
-
window.Mixable = MixableClass;
|
|
107
|
-
window.makeMixer = makeMixerFoo;
|
|
108
|
-
}
|
|
38
|
+
`);
|
|
39
|
+
var originalPrototypes = [];
|
|
40
|
+
var current = mixin;
|
|
41
|
+
originalPrototypes.push(current.prototype);
|
|
42
|
+
current = current.prototype;
|
|
43
|
+
while (mixingBaseProtos.indexOf(current.__proto__) < 0 && current.__proto__ != Object.prototype) {
|
|
44
|
+
originalPrototypes.push(current.__proto__);
|
|
45
|
+
current = current.__proto__;
|
|
46
|
+
}
|
|
47
|
+
var newPrototypes = [];
|
|
48
|
+
while (originalPrototypes.length > 0) {
|
|
49
|
+
current = originalPrototypes.pop();
|
|
50
|
+
let originalClass = current;
|
|
51
|
+
var prototype = newPrototypes.length == 0 ? core.prototype : newPrototypes[0];
|
|
52
|
+
let newmix = duplicatePrototype(current, prototype);
|
|
53
|
+
var edits = {
|
|
54
|
+
//We override the original isA so that this class appears to be a movable as well as other types.
|
|
55
|
+
isA(other) {
|
|
56
|
+
if (other.prototype == originalClass) {
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
return super.isA(other);
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
Object.assign(newmix, edits);
|
|
65
|
+
newmix.__proto__ = prototype;
|
|
66
|
+
//This ensures any super calls in the edits to the prototype resolve correctly, because
|
|
67
|
+
// they're based on the original object the function is defined in, not the prototype the
|
|
68
|
+
// function ends up on.
|
|
69
|
+
edits.__proto__ = prototype;
|
|
70
|
+
newPrototypes.unshift(newmix);
|
|
71
|
+
}
|
|
72
|
+
newClass.prototype = newPrototypes[0];
|
|
73
|
+
newClass.prototype.constructor = newClass;
|
|
74
|
+
//I wanted to do this on object creation rather than having it be inherited, but that caused a problem with the value
|
|
75
|
+
// not being accessible in the constructor, which is necessary because the constructor can call other functons.
|
|
76
|
+
if (mixin.Super) {
|
|
77
|
+
//console.log("Configuring", mixin.name, "to have a parent that is", newClass.prototype.__proto__.constructor.name);
|
|
78
|
+
newClass.prototype[mixin.Super] = core.prototype;
|
|
79
|
+
}
|
|
80
|
+
//newClass.__proto__ = newPrototypes[0];
|
|
81
|
+
return newClass;
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
export function MixableClass(param) {
|
|
85
|
+
//This is done to preserve super calls in mixins.
|
|
86
|
+
class Mixbase extends param {
|
|
87
|
+
//@ts-ignore we don't need to call super in this child class.
|
|
88
|
+
constructor(...args) {
|
|
89
|
+
//We can't override the class' object using .call or .apply, but we can override it in the base class.
|
|
90
|
+
var object = mixingObject[0];
|
|
91
|
+
return object;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
;
|
|
95
|
+
mixingBases.push(Mixbase);
|
|
96
|
+
mixingBaseProtos.push(Mixbase.prototype);
|
|
97
|
+
return Mixbase;
|
|
98
|
+
}
|
|
99
|
+
if (typeof global !== "undefined") {
|
|
100
|
+
global.Mixable = MixableClass;
|
|
101
|
+
global.makeMixer = makeMixerFoo;
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
Mixable = MixableClass;
|
|
105
|
+
makeMixer = makeMixerFoo;
|
|
106
|
+
window.Mixable = MixableClass;
|
|
107
|
+
window.makeMixer = makeMixerFoo;
|
|
108
|
+
}
|
|
109
109
|
//# sourceMappingURL=MixinCode.js.map
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import * as ts from "typescript";
|
|
2
|
+
import { ArithmeticSymbols, AssignmentSymbols, BitwiseOperators, ComparisonOperators, LogicalOperators } from "./ASTInterface/Tokens";
|
|
3
|
+
type AnyExpr = Expression | ts.Expression;
|
|
4
|
+
declare class Expression<NodeType extends ts.Node = ts.Expression> {
|
|
5
|
+
ast: NodeType;
|
|
6
|
+
constructor(ast: NodeType);
|
|
7
|
+
isExpression(): this is Expression<ts.Expression>;
|
|
8
|
+
getExpression(): ts.Expression;
|
|
9
|
+
DOT(other: string | ts.MemberName | Expression<ts.MemberName>): Expression<ts.Expression>;
|
|
10
|
+
LOOKUP(other: number | ts.Expression | Expression): Expression<ts.Expression>;
|
|
11
|
+
OP(op: keyof typeof ComparisonOperators | keyof typeof LogicalOperators | keyof typeof BitwiseOperators | keyof typeof ArithmeticSymbols, other: ts.Expression | Expression): Expression<ts.Expression>;
|
|
12
|
+
ASGN(op: keyof typeof AssignmentSymbols, other: ts.Expression | Expression): Expression<ts.AssignmentExpression<ts.EqualsToken>>;
|
|
13
|
+
toAST(): NodeType;
|
|
14
|
+
}
|
|
15
|
+
export declare function EXP(exp: ts.Expression | Expression): Expression<ts.Expression>;
|
|
16
|
+
export declare function VAR(id: string, val?: ts.Expression | Expression): Expression<ts.VariableStatement>;
|
|
17
|
+
export declare function LET(id: string, val?: ts.Expression | Expression): Expression<ts.VariableStatement>;
|
|
18
|
+
export declare function NOT(exp: Expression | ts.Expression): Expression<ts.Expression>;
|
|
19
|
+
export declare function SUPER(): Expression<ts.SuperExpression>;
|
|
20
|
+
export declare function THIS(): Expression<ts.ThisExpression>;
|
|
21
|
+
export declare function CALL(name: AnyExpr, ...args: AnyExpr[]): Expression<ts.CallExpression>;
|
|
22
|
+
export declare function METHOD_CALL(parent: AnyExpr, name: ts.MemberName | Expression<ts.MemberName>, ...args: AnyExpr[]): Expression;
|
|
23
|
+
export declare function FUNC_CALL(name: AnyExpr, ...args: AnyExpr[]): Expression;
|
|
24
|
+
export declare function FUNC_BIND(name: AnyExpr, newThis: AnyExpr): Expression<ts.Expression>;
|
|
25
|
+
export declare function TYPEOF(other: ts.Expression): Expression<ts.TypeOfExpression>;
|
|
26
|
+
export declare function ID(name: string): Expression<ts.Identifier>;
|
|
27
|
+
export declare function LITERAL(name: string): Expression<ts.StringLiteral>;
|
|
28
|
+
export declare function IF(ifs: ts.Expression | Expression, then: ts.Statement | Statement, elses?: ts.Statement | Statement): ts.IfStatement;
|
|
29
|
+
declare class Statement {
|
|
30
|
+
statements: (ts.Expression | Expression)[];
|
|
31
|
+
LINE(exp: ts.Expression | Expression): void;
|
|
32
|
+
toAST(): ts.Block;
|
|
33
|
+
}
|
|
34
|
+
export declare function STATEMENT(): Statement;
|
|
35
|
+
export {};
|
|
36
|
+
//# sourceMappingURL=ASTBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ASTBuilder.d.ts","sourceRoot":"","sources":["ASTBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.STATEMENT = exports.IF = exports.LITERAL = exports.ID = exports.TYPEOF = exports.FUNC_BIND = exports.FUNC_CALL = exports.METHOD_CALL = exports.CALL = exports.THIS = exports.SUPER = exports.NOT = exports.LET = exports.VAR = exports.EXP = void 0;
|
|
4
|
+
const ts = require("typescript");
|
|
5
|
+
const Tokens_1 = require("./ASTInterface/Tokens");
|
|
6
|
+
const Crawler_1 = require("./ASTInterface/Crawler");
|
|
7
|
+
`EXP(SUPER().ACCESS(Name)).OP(!==, "undefined")`;
|
|
8
|
+
function getAST(item) {
|
|
9
|
+
if (typeof item === "string")
|
|
10
|
+
return Crawler_1.Crawler.getContext().factory.createStringLiteral(item);
|
|
11
|
+
if (item instanceof Expression || item instanceof Statement)
|
|
12
|
+
return item.toAST();
|
|
13
|
+
return item;
|
|
14
|
+
}
|
|
15
|
+
class Expression {
|
|
16
|
+
constructor(ast) {
|
|
17
|
+
this.ast = ast;
|
|
18
|
+
}
|
|
19
|
+
isExpression() {
|
|
20
|
+
return ts.isExpression(this.ast);
|
|
21
|
+
}
|
|
22
|
+
getExpression() {
|
|
23
|
+
if (!ts.isExpression(this.ast))
|
|
24
|
+
throw new Error("Error, node requires expression but this is not.");
|
|
25
|
+
return this.ast;
|
|
26
|
+
}
|
|
27
|
+
DOT(other) {
|
|
28
|
+
if (!this.ast)
|
|
29
|
+
throw new Error("Can't dot access undefined.");
|
|
30
|
+
return new Expression(Crawler_1.Crawler.getContext().factory.createPropertyAccessExpression(this.getExpression(), getAST(other)));
|
|
31
|
+
}
|
|
32
|
+
LOOKUP(other) {
|
|
33
|
+
if (!this.ast)
|
|
34
|
+
throw new Error("Can't [] access undefined.");
|
|
35
|
+
return new Expression(Crawler_1.Crawler.getContext().factory.createElementAccessExpression(this.getExpression(), typeof other === "number" ? other : getAST(other)));
|
|
36
|
+
}
|
|
37
|
+
OP(op, other) {
|
|
38
|
+
other = getAST(other);
|
|
39
|
+
if (!this.ast)
|
|
40
|
+
throw new Error("Can't use nothing as lhs of operator expression..");
|
|
41
|
+
if (op in Tokens_1.ComparisonOperators) {
|
|
42
|
+
let opType = Tokens_1.ComparisonOperators[op];
|
|
43
|
+
return new Expression(Crawler_1.Crawler.getContext().factory.createBinaryExpression(this.getExpression(), opType, other));
|
|
44
|
+
}
|
|
45
|
+
if (op in Tokens_1.LogicalOperators) {
|
|
46
|
+
switch (op) {
|
|
47
|
+
case "||":
|
|
48
|
+
return new Expression(Crawler_1.Crawler.getContext().factory.createLogicalOr(this.getExpression(), other));
|
|
49
|
+
break;
|
|
50
|
+
case "&&":
|
|
51
|
+
return new Expression(Crawler_1.Crawler.getContext().factory.createLogicalAnd(this.getExpression(), other));
|
|
52
|
+
break;
|
|
53
|
+
case "!":
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return this;
|
|
58
|
+
}
|
|
59
|
+
ASGN(op, other) {
|
|
60
|
+
other = getAST(other);
|
|
61
|
+
if (ts.isVariableStatement(this.ast)) {
|
|
62
|
+
if (op != "=")
|
|
63
|
+
throw new Error("Cannot declare variable with assignment operator other than =.");
|
|
64
|
+
let dec = this.ast.declarationList.declarations[0];
|
|
65
|
+
ts.factory.updateVariableDeclaration(dec, dec.name, dec.exclamationToken, dec.type, other);
|
|
66
|
+
return this;
|
|
67
|
+
}
|
|
68
|
+
switch (op) {
|
|
69
|
+
case "=":
|
|
70
|
+
return new Expression(Crawler_1.Crawler.getContext().factory.createAssignment(this.getExpression(), other));
|
|
71
|
+
break;
|
|
72
|
+
default:
|
|
73
|
+
return new Expression(Crawler_1.Crawler.getContext().factory.createBinaryExpression(this.getExpression(), Tokens_1.AssignmentSymbols[op], other));
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
return this;
|
|
77
|
+
}
|
|
78
|
+
toAST() {
|
|
79
|
+
return this.ast;
|
|
80
|
+
}
|
|
81
|
+
;
|
|
82
|
+
}
|
|
83
|
+
function EXP(exp) {
|
|
84
|
+
if (exp instanceof Expression)
|
|
85
|
+
return exp;
|
|
86
|
+
return new Expression(exp);
|
|
87
|
+
}
|
|
88
|
+
exports.EXP = EXP;
|
|
89
|
+
function VAR(id, val) {
|
|
90
|
+
val = val instanceof Expression ? val.toAST() : val;
|
|
91
|
+
if (val && ts.isVariableStatement(val))
|
|
92
|
+
throw new Error("Can't use variable declaration as initialiser for another variable declaration.");
|
|
93
|
+
let dec = ts.factory.createVariableDeclaration(id, void 0, void 0, val);
|
|
94
|
+
let node = ts.factory.createVariableStatement([], ts.factory.createVariableDeclarationList([dec]));
|
|
95
|
+
return new Expression(node);
|
|
96
|
+
}
|
|
97
|
+
exports.VAR = VAR;
|
|
98
|
+
function LET(id, val) {
|
|
99
|
+
val = val instanceof Expression ? val.toAST() : val;
|
|
100
|
+
if (val && ts.isVariableStatement(val))
|
|
101
|
+
throw new Error("Can't use variable declaration as initialiser for another variable declaration.");
|
|
102
|
+
let dec = ts.factory.createVariableDeclaration(id, void 0, void 0, val);
|
|
103
|
+
let node = ts.factory.createVariableStatement([], ts.factory.createVariableDeclarationList([dec], ts.NodeFlags.Let));
|
|
104
|
+
return new Expression(node);
|
|
105
|
+
}
|
|
106
|
+
exports.LET = LET;
|
|
107
|
+
function NOT(exp) {
|
|
108
|
+
if (!(exp instanceof Expression))
|
|
109
|
+
exp = new Expression(exp);
|
|
110
|
+
if (ts.isVariableStatement(exp.ast))
|
|
111
|
+
throw new Error("Cannot NOT a variable declaration.");
|
|
112
|
+
exp.ast = Crawler_1.Crawler.getContext().factory.createLogicalNot(exp.ast);
|
|
113
|
+
return exp;
|
|
114
|
+
}
|
|
115
|
+
exports.NOT = NOT;
|
|
116
|
+
function SUPER() {
|
|
117
|
+
return new Expression(Crawler_1.Crawler.getContext().factory.createSuper());
|
|
118
|
+
}
|
|
119
|
+
exports.SUPER = SUPER;
|
|
120
|
+
function THIS() {
|
|
121
|
+
return new Expression(Crawler_1.Crawler.getContext().factory.createThis());
|
|
122
|
+
}
|
|
123
|
+
exports.THIS = THIS;
|
|
124
|
+
///Call a function.
|
|
125
|
+
function CALL(name, ...args) {
|
|
126
|
+
return new Expression(Crawler_1.Crawler.getContext().factory.createCallExpression(getAST(name), undefined, args.map((e) => getAST(e))));
|
|
127
|
+
}
|
|
128
|
+
exports.CALL = CALL;
|
|
129
|
+
///Call parent.method.call
|
|
130
|
+
function METHOD_CALL(parent, name, ...args) {
|
|
131
|
+
if (!(parent instanceof Expression))
|
|
132
|
+
parent = new Expression(parent);
|
|
133
|
+
return CALL(parent.DOT(name).DOT(ID("call")), ...args);
|
|
134
|
+
}
|
|
135
|
+
exports.METHOD_CALL = METHOD_CALL;
|
|
136
|
+
function FUNC_CALL(name, ...args) {
|
|
137
|
+
if (!(name instanceof Expression))
|
|
138
|
+
name = new Expression(name);
|
|
139
|
+
return CALL(name.DOT(ID("call")), ...args);
|
|
140
|
+
}
|
|
141
|
+
exports.FUNC_CALL = FUNC_CALL;
|
|
142
|
+
function FUNC_BIND(name, newThis) {
|
|
143
|
+
if (!(name instanceof Expression))
|
|
144
|
+
name = new Expression(name);
|
|
145
|
+
return FUNC_CALL(name, ID("bind"), newThis);
|
|
146
|
+
}
|
|
147
|
+
exports.FUNC_BIND = FUNC_BIND;
|
|
148
|
+
function TYPEOF(other) {
|
|
149
|
+
return new Expression(Crawler_1.Crawler.getContext().factory.createTypeOfExpression(other));
|
|
150
|
+
}
|
|
151
|
+
exports.TYPEOF = TYPEOF;
|
|
152
|
+
function ID(name) {
|
|
153
|
+
return new Expression(Crawler_1.Crawler.getContext().factory.createIdentifier(name));
|
|
154
|
+
}
|
|
155
|
+
exports.ID = ID;
|
|
156
|
+
function LITERAL(name) {
|
|
157
|
+
return new Expression(Crawler_1.Crawler.getContext().factory.createStringLiteral(name));
|
|
158
|
+
}
|
|
159
|
+
exports.LITERAL = LITERAL;
|
|
160
|
+
function IF(ifs, then, elses) {
|
|
161
|
+
return Crawler_1.Crawler.getContext().factory.createIfStatement(getAST(ifs), getAST(then), elses ? getAST(elses) : elses);
|
|
162
|
+
}
|
|
163
|
+
exports.IF = IF;
|
|
164
|
+
class Statement {
|
|
165
|
+
constructor() {
|
|
166
|
+
this.statements = [];
|
|
167
|
+
}
|
|
168
|
+
LINE(exp) {
|
|
169
|
+
this.statements.push(exp);
|
|
170
|
+
}
|
|
171
|
+
toAST() {
|
|
172
|
+
let statements = this.statements.map((e) => Crawler_1.Crawler.getContext().factory.createExpressionStatement(getAST(e)));
|
|
173
|
+
return Crawler_1.Crawler.getContext().factory.createBlock(statements);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
function STATEMENT() {
|
|
177
|
+
return new Statement;
|
|
178
|
+
}
|
|
179
|
+
exports.STATEMENT = STATEMENT;
|
|
180
|
+
//# sourceMappingURL=ASTBuilder.js.map
|
package/Source/ASTHelper.d.ts
CHANGED
|
@@ -1,74 +1,68 @@
|
|
|
1
|
-
import * as ts from "typescript";
|
|
2
|
-
export declare function
|
|
3
|
-
export
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
name: ts.Identifier;
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
value
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
static
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
}
|
|
69
|
-
export declare function logError(node: ts.Node, error: string): undefined;
|
|
70
|
-
export declare module Printer {
|
|
71
|
-
function printNode(node: ts.Node, sourceFile: ts.SourceFile): string;
|
|
72
|
-
function printNodeFirstLine(node: ts.Node, sourceFile: ts.SourceFile): string;
|
|
73
|
-
}
|
|
1
|
+
import * as ts from "typescript";
|
|
2
|
+
export declare function setContext(newContext: ts.TransformationContext): void;
|
|
3
|
+
export interface fromable {
|
|
4
|
+
from: (param: any) => any;
|
|
5
|
+
}
|
|
6
|
+
export declare function getNodeText(node: ts.Node, source: ts.SourceFile): string;
|
|
7
|
+
export declare class NamedExpression {
|
|
8
|
+
name: ts.Identifier;
|
|
9
|
+
constructor(name: ts.Identifier);
|
|
10
|
+
getName(): ts.Identifier;
|
|
11
|
+
rename(name: ts.Identifier): this;
|
|
12
|
+
}
|
|
13
|
+
export declare class VariableDeclaration extends NamedExpression {
|
|
14
|
+
modifiers?: ts.Modifier[];
|
|
15
|
+
value?: ts.Expression;
|
|
16
|
+
setValue(value: ts.Expression): this;
|
|
17
|
+
addModifier(modifier: ts.Modifier): this;
|
|
18
|
+
make(context: ts.TransformationContext): ts.Node;
|
|
19
|
+
}
|
|
20
|
+
export declare module VariableDeclaration {
|
|
21
|
+
function from(variable: ts.VariableDeclaration): VariableDeclaration;
|
|
22
|
+
}
|
|
23
|
+
export declare class PropertyDeclaration extends VariableDeclaration {
|
|
24
|
+
constructor(name: ts.Identifier | ts.ComputedPropertyName);
|
|
25
|
+
make(context: ts.TransformationContext): ts.PropertyDeclaration;
|
|
26
|
+
}
|
|
27
|
+
export declare module PropertyDeclaration {
|
|
28
|
+
function from(variable: ts.PropertyDeclaration | ts.VariableDeclaration): PropertyDeclaration;
|
|
29
|
+
}
|
|
30
|
+
export declare class AccessExpression {
|
|
31
|
+
start: ts.Expression | ts.Identifier;
|
|
32
|
+
chain: ts.AccessExpression;
|
|
33
|
+
constructor(start: ts.Expression | ts.Identifier);
|
|
34
|
+
access(node: ts.Expression | ts.Identifier | ts.ComputedPropertyName): this;
|
|
35
|
+
make(): ts.AccessExpression;
|
|
36
|
+
}
|
|
37
|
+
export declare class ClassDeclaration extends NamedExpression {
|
|
38
|
+
original?: ts.ClassDeclaration;
|
|
39
|
+
decorators: ts.Decorator[];
|
|
40
|
+
extends: ts.Expression | undefined;
|
|
41
|
+
members: (ts.ClassElement)[];
|
|
42
|
+
static from(oldClass: ts.ClassDeclaration): ClassDeclaration;
|
|
43
|
+
static getModifiers(node: ts.ClassDeclaration): ts.Modifier[];
|
|
44
|
+
static getDecorators(node: ts.ClassDeclaration): ts.Decorator[];
|
|
45
|
+
addMemberAtStart(member: ts.ClassElement): this;
|
|
46
|
+
addMember(member: ts.ClassElement): this;
|
|
47
|
+
hasDecorator(identifier: string | ts.Identifier): boolean;
|
|
48
|
+
removeDecorator(identifier: string | ts.Identifier): this;
|
|
49
|
+
hasExtends(): boolean;
|
|
50
|
+
getExtends(): ts.Expression | undefined;
|
|
51
|
+
setExtends(Extends: ts.Expression | undefined): this;
|
|
52
|
+
static eachContextualNode(Class: ts.ClassDeclaration, foo: ts.Visitor, context: ts.TransformationContext): ts.ClassDeclaration;
|
|
53
|
+
update(context: ts.TransformationContext): ts.ClassDeclaration | undefined;
|
|
54
|
+
}
|
|
55
|
+
export declare class SourceFile {
|
|
56
|
+
original?: ts.SourceFile;
|
|
57
|
+
statements: ts.Statement[];
|
|
58
|
+
static from(oldfile: ts.SourceFile): SourceFile;
|
|
59
|
+
replaceNode(oldNode: ts.Statement, newNode: ts.Statement): this;
|
|
60
|
+
insertUnderImports(node: ts.Statement): this;
|
|
61
|
+
update(context: ts.TransformationContext): ts.SourceFile;
|
|
62
|
+
}
|
|
63
|
+
export declare function logError(node: ts.Node, error: string): undefined;
|
|
64
|
+
export declare module Printer {
|
|
65
|
+
function printNode(node: ts.Node, sourceFile: ts.SourceFile): string;
|
|
66
|
+
function printNodeFirstLine(node: ts.Node, sourceFile: ts.SourceFile): string;
|
|
67
|
+
}
|
|
74
68
|
//# sourceMappingURL=ASTHelper.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ASTHelper.d.ts","sourceRoot":"","sources":["ASTHelper.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ASTHelper.d.ts","sourceRoot":"","sources":["ASTHelper.ts"],"names":[],"mappings":"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"}
|