mlogjs 0.2.2 → 0.3.0-beta.0
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/LICENSE +1 -1
- package/README.md +2 -2
- package/build/Compiler.js +105 -0
- package/build/Compiler.js.map +1 -0
- package/build/CompilerError.js +11 -0
- package/build/CompilerError.js.map +1 -0
- package/build/Scope.js +71 -0
- package/build/Scope.js.map +1 -0
- package/build/bin.js +75 -0
- package/build/bin.js.map +1 -0
- package/build/handlers/BlockStatement.js +14 -0
- package/build/handlers/BlockStatement.js.map +1 -0
- package/build/handlers/CallExpression.js +20 -0
- package/build/handlers/CallExpression.js.map +1 -0
- package/build/handlers/File.js +9 -0
- package/build/handlers/File.js.map +1 -0
- package/build/handlers/ForStatement.js +32 -0
- package/build/handlers/ForStatement.js.map +1 -0
- package/build/handlers/Function.js +47 -0
- package/build/handlers/Function.js.map +1 -0
- package/build/handlers/Identifier.js +8 -0
- package/build/handlers/Identifier.js.map +1 -0
- package/build/handlers/IfStatement.js +25 -0
- package/build/handlers/IfStatement.js.map +1 -0
- package/build/handlers/Literal.js +15 -0
- package/build/handlers/Literal.js.map +1 -0
- package/build/handlers/Object.js +55 -0
- package/build/handlers/Object.js.map +1 -0
- package/build/handlers/OperationExpressions.js +38 -0
- package/build/handlers/OperationExpressions.js.map +1 -0
- package/build/handlers/Program.js +9 -0
- package/build/handlers/Program.js.map +1 -0
- package/build/handlers/Statements.js +30 -0
- package/build/handlers/Statements.js.map +1 -0
- package/build/handlers/TemplateExpression.js +18 -0
- package/build/handlers/TemplateExpression.js.map +1 -0
- package/build/handlers/VariableDeclaration.js +72 -0
- package/build/handlers/VariableDeclaration.js.map +1 -0
- package/build/handlers/WhileStatement.js +23 -0
- package/build/handlers/WhileStatement.js.map +1 -0
- package/build/handlers/index.js +32 -0
- package/build/handlers/index.js.map +1 -0
- package/build/index.js +8 -0
- package/build/index.js.map +1 -0
- package/build/initScope.js +40 -0
- package/build/initScope.js.map +1 -0
- package/build/instructions/AddressResolver.js +31 -0
- package/build/instructions/AddressResolver.js.map +1 -0
- package/build/instructions/ControlInstructions.js +23 -0
- package/build/instructions/ControlInstructions.js.map +1 -0
- package/build/instructions/EndInstruction.js +11 -0
- package/build/instructions/EndInstruction.js.map +1 -0
- package/build/instructions/InstructionBase.js +21 -0
- package/build/instructions/InstructionBase.js.map +1 -0
- package/build/instructions/JumpInstruction.js +22 -0
- package/build/instructions/JumpInstruction.js.map +1 -0
- package/build/instructions/OperationInstruction.js +11 -0
- package/build/instructions/OperationInstruction.js.map +1 -0
- package/build/instructions/SetCounterInstruction.js +11 -0
- package/build/instructions/SetCounterInstruction.js.map +1 -0
- package/build/instructions/SetInstruction.js +11 -0
- package/build/instructions/SetInstruction.js.map +1 -0
- package/build/instructions/ZeroSpaceInstruction.js +11 -0
- package/build/instructions/ZeroSpaceInstruction.js.map +1 -0
- package/build/instructions/index.js +26 -0
- package/build/instructions/index.js.map +1 -0
- package/build/macros/Building.js +89 -0
- package/build/macros/Building.js.map +1 -0
- package/build/macros/Function.js +20 -0
- package/build/macros/Function.js.map +1 -0
- package/build/macros/Math.js +62 -0
- package/build/macros/Math.js.map +1 -0
- package/build/macros/Memory.js +63 -0
- package/build/macros/Memory.js.map +1 -0
- package/build/macros/Namespace.js +111 -0
- package/build/macros/Namespace.js.map +1 -0
- package/build/macros/Other.js +21 -0
- package/build/macros/Other.js.map +1 -0
- package/build/macros/RawValue.js +17 -0
- package/build/macros/RawValue.js.map +1 -0
- package/build/macros/commands/Control.js +26 -0
- package/build/macros/commands/Control.js.map +1 -0
- package/build/macros/commands/Draw.js +40 -0
- package/build/macros/commands/Draw.js.map +1 -0
- package/build/macros/commands/DrawFlush.js +18 -0
- package/build/macros/commands/DrawFlush.js.map +1 -0
- package/build/macros/commands/GetLink.js +25 -0
- package/build/macros/commands/GetLink.js.map +1 -0
- package/build/macros/commands/Lookup.js +25 -0
- package/build/macros/commands/Lookup.js.map +1 -0
- package/build/macros/commands/Print.js +18 -0
- package/build/macros/commands/Print.js.map +1 -0
- package/build/macros/commands/PrintFlush.js +18 -0
- package/build/macros/commands/PrintFlush.js.map +1 -0
- package/build/macros/commands/Radar.js +65 -0
- package/build/macros/commands/Radar.js.map +1 -0
- package/build/macros/commands/Sensor.js +21 -0
- package/build/macros/commands/Sensor.js.map +1 -0
- package/build/macros/commands/UnitBind.js +18 -0
- package/build/macros/commands/UnitBind.js.map +1 -0
- package/build/macros/commands/UnitControl.js +73 -0
- package/build/macros/commands/UnitControl.js.map +1 -0
- package/build/macros/commands/UnitLocate.js +76 -0
- package/build/macros/commands/UnitLocate.js.map +1 -0
- package/build/macros/commands/UnitRadar.js +48 -0
- package/build/macros/commands/UnitRadar.js.map +1 -0
- package/build/macros/commands/Wait.js +19 -0
- package/build/macros/commands/Wait.js.map +1 -0
- package/build/macros/commands/index.js +33 -0
- package/build/macros/commands/index.js.map +1 -0
- package/build/macros/index.js +40 -0
- package/build/macros/index.js.map +1 -0
- package/build/operators.js +102 -0
- package/build/operators.js.map +1 -0
- package/build/types.js +28 -0
- package/build/types.js.map +1 -0
- package/build/utils.js +18 -0
- package/build/utils.js.map +1 -0
- package/build/values/BaseValue.js +112 -0
- package/build/values/BaseValue.js.map +1 -0
- package/build/values/FunctionValue.js +116 -0
- package/build/values/FunctionValue.js.map +1 -0
- package/build/values/LiteralValue.js +89 -0
- package/build/values/LiteralValue.js.map +1 -0
- package/build/values/ObjectValue.js +55 -0
- package/build/values/ObjectValue.js.map +1 -0
- package/build/values/StoreValue.js +32 -0
- package/build/values/StoreValue.js.map +1 -0
- package/build/values/TempValue.js +78 -0
- package/build/values/TempValue.js.map +1 -0
- package/build/values/VoidValue.js +32 -0
- package/build/values/VoidValue.js.map +1 -0
- package/build/values/index.js +23 -0
- package/build/values/index.js.map +1 -0
- package/dist/bin.cjs +17 -4
- package/dist/bin.cjs.map +1 -0
- package/dist/index.cjs +940 -570
- package/dist/index.cjs.map +1 -0
- package/dist/index.mjs +918 -569
- package/dist/index.mjs.map +1 -0
- package/dist/types/Compiler.d.ts +11 -3
- package/dist/types/CompilerError.d.ts +9 -0
- package/dist/types/Scope.d.ts +10 -9
- package/dist/types/handlers/File.d.ts +2 -0
- package/dist/types/handlers/Function.d.ts +1 -0
- package/dist/types/handlers/Literal.d.ts +4 -1
- package/dist/types/handlers/Object.d.ts +2 -0
- package/dist/types/handlers/OperationExpressions.d.ts +1 -0
- package/dist/types/handlers/Typescript.d.ts +7 -0
- package/dist/types/handlers/VariableDeclaration.d.ts +2 -2
- package/dist/types/handlers/WhileStatement.d.ts +1 -0
- package/dist/types/handlers/index.d.ts +2 -0
- package/dist/types/index.d.ts +2 -1
- package/dist/types/initScope.d.ts +3 -0
- package/dist/types/instructions/ControlInstructions.d.ts +0 -3
- package/dist/types/instructions/InstructionBase.d.ts +2 -2
- package/dist/types/instructions/SetInstruction.d.ts +1 -0
- package/dist/types/macros/Building.d.ts +1 -2
- package/dist/types/macros/Entities.d.ts +11 -0
- package/dist/types/macros/Function.d.ts +2 -1
- package/dist/types/macros/GetGlobal.d.ts +5 -0
- package/dist/types/macros/Namespace.d.ts +0 -5
- package/dist/types/macros/commands/End.d.ts +5 -0
- package/dist/types/macros/commands/index.d.ts +1 -0
- package/dist/types/macros/index.d.ts +0 -1
- package/dist/types/operators.d.ts +1 -1
- package/dist/types/types.d.ts +121 -12
- package/dist/types/utils.d.ts +22 -1
- package/dist/types/values/BaseValue.d.ts +3 -1
- package/dist/types/values/DestructuringValue.d.ts +17 -0
- package/dist/types/values/FunctionValue.d.ts +21 -8
- package/dist/types/values/LiteralValue.d.ts +2 -1
- package/dist/types/values/ObjectValue.d.ts +5 -1
- package/dist/types/values/SenseableValue.d.ts +23 -0
- package/dist/types/values/StackValue.d.ts +16 -0
- package/dist/types/values/StoreValue.d.ts +7 -3
- package/dist/types/values/TempValue.d.ts +9 -2
- package/dist/types/values/ValueOwner.d.ts +27 -0
- package/dist/types/values/VoidValue.d.ts +8 -5
- package/dist/types/values/index.d.ts +2 -1
- package/lib/commands.d.ts +242 -36
- package/lib/globals.d.ts +172 -159
- package/lib/helpers.d.ts +2 -2
- package/lib/memory.d.ts +1 -1
- package/lib/traits.d.ts +130 -109
- package/package.json +23 -18
- package/build/bin.cjs +0 -69
- package/doc/README.md +0 -9
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FunctionValue = void 0;
|
|
4
|
+
const utils_1 = require("src/utils");
|
|
5
|
+
const CompilerError_1 = require("../CompilerError");
|
|
6
|
+
const instructions_1 = require("../instructions");
|
|
7
|
+
const LiteralValue_1 = require("./LiteralValue");
|
|
8
|
+
const StoreValue_1 = require("./StoreValue");
|
|
9
|
+
const TempValue_1 = require("./TempValue");
|
|
10
|
+
const VoidValue_1 = require("./VoidValue");
|
|
11
|
+
class FunctionValue extends VoidValue_1.VoidValue {
|
|
12
|
+
constructor({ scope, name, paramNames, paramStores, body, c, renameable = false, }) {
|
|
13
|
+
super(scope);
|
|
14
|
+
this.constant = true;
|
|
15
|
+
this.macro = true;
|
|
16
|
+
this.bundled = false;
|
|
17
|
+
this.initialized = false;
|
|
18
|
+
this.name = name;
|
|
19
|
+
this.paramNames = paramNames;
|
|
20
|
+
this.paramStores = paramStores;
|
|
21
|
+
this.body = body;
|
|
22
|
+
this.c = c;
|
|
23
|
+
this.renameable = renameable;
|
|
24
|
+
this.callSize = paramStores.length + 2;
|
|
25
|
+
scope.function = this;
|
|
26
|
+
}
|
|
27
|
+
typeof(scope) {
|
|
28
|
+
return [new LiteralValue_1.LiteralValue(scope, "function"), []];
|
|
29
|
+
}
|
|
30
|
+
ensureInit() {
|
|
31
|
+
if (this.initialized)
|
|
32
|
+
return;
|
|
33
|
+
this.initialized = true;
|
|
34
|
+
this.addr = new LiteralValue_1.LiteralValue(this.scope, null);
|
|
35
|
+
this.temp = new StoreValue_1.StoreValue(this.scope, `${utils_1.internalPrefix}f${this.name}`);
|
|
36
|
+
this.ret = new StoreValue_1.StoreValue(this.scope, `${utils_1.internalPrefix}r${this.name}`);
|
|
37
|
+
this.inst = [
|
|
38
|
+
new instructions_1.AddressResolver(this.addr),
|
|
39
|
+
...this.c.handle(this.scope, this.body)[1],
|
|
40
|
+
];
|
|
41
|
+
this.inst.push(new instructions_1.SetCounterInstruction(this.ret));
|
|
42
|
+
}
|
|
43
|
+
normalReturn(scope, arg) {
|
|
44
|
+
const argInst = arg ? this.temp["="](scope, arg)[1] : [];
|
|
45
|
+
return [null, [...argInst, new instructions_1.SetCounterInstruction(this.ret)]];
|
|
46
|
+
}
|
|
47
|
+
normalCall(scope, args) {
|
|
48
|
+
if (!this.bundled)
|
|
49
|
+
this.scope.inst.push(...this.inst);
|
|
50
|
+
this.bundled = true;
|
|
51
|
+
const callAddressLiteral = new LiteralValue_1.LiteralValue(scope, null);
|
|
52
|
+
const inst = this.paramStores
|
|
53
|
+
.map((param, i) => param["="](scope, args[i])[1])
|
|
54
|
+
.reduce((s, c) => s.concat(c), [])
|
|
55
|
+
.concat(...this.ret["="](scope, callAddressLiteral)[1], new instructions_1.JumpInstruction(this.addr, instructions_1.EJumpKind.Always), new instructions_1.AddressResolver(callAddressLiteral));
|
|
56
|
+
return [this.temp, inst];
|
|
57
|
+
}
|
|
58
|
+
inlineReturn(scope, arg) {
|
|
59
|
+
const argInst = arg ? this.inlineTemp["="](scope, arg)[1] : [];
|
|
60
|
+
return [null, [...argInst, new instructions_1.ReturnInstruction(this.inlineEnd)]];
|
|
61
|
+
}
|
|
62
|
+
inlineCall(scope, args) {
|
|
63
|
+
// create return value
|
|
64
|
+
this.inlineTemp = new TempValue_1.TempValue({ scope });
|
|
65
|
+
this.inlineEnd = new LiteralValue_1.LiteralValue(scope, null);
|
|
66
|
+
// make a copy of the function scope
|
|
67
|
+
const fnScope = this.scope.copy();
|
|
68
|
+
// hard set variables within the function scope
|
|
69
|
+
this.paramNames.forEach((name, i) => fnScope.hardSet(name, args[i]));
|
|
70
|
+
this.tryingInline = true;
|
|
71
|
+
const inst = this.c.handle(fnScope, this.body)[1];
|
|
72
|
+
this.tryingInline = false;
|
|
73
|
+
// removing useless instruction
|
|
74
|
+
// get the last instructions
|
|
75
|
+
// const [jump] = inst.slice(-1);
|
|
76
|
+
// if (jump instanceof JumpInstruction) {
|
|
77
|
+
// // remove useless jump
|
|
78
|
+
// if (jump.args[1] === this.inlineEnd) inst.pop();
|
|
79
|
+
// }
|
|
80
|
+
inst.push(new instructions_1.AddressResolver(this.inlineEnd));
|
|
81
|
+
// return the function value
|
|
82
|
+
return [this.inlineTemp, inst];
|
|
83
|
+
}
|
|
84
|
+
call(scope, args) {
|
|
85
|
+
this.ensureInit();
|
|
86
|
+
if (args.length !== this.paramStores.length)
|
|
87
|
+
throw new CompilerError_1.CompilerError("Cannot call: argument count not matching.");
|
|
88
|
+
const inlineCall = this.inlineCall(scope, args);
|
|
89
|
+
const inlineSize = inlineCall[1].filter(i => !i.hidden).length;
|
|
90
|
+
if (this.inline || inlineSize <= this.callSize)
|
|
91
|
+
return inlineCall;
|
|
92
|
+
return this.normalCall(scope, args);
|
|
93
|
+
}
|
|
94
|
+
return(scope, arg) {
|
|
95
|
+
this.ensureInit();
|
|
96
|
+
if (arg && arg.macro) {
|
|
97
|
+
this.inline = true;
|
|
98
|
+
return [null, []];
|
|
99
|
+
}
|
|
100
|
+
if (this.inline || this.tryingInline)
|
|
101
|
+
return this.inlineReturn(scope, arg);
|
|
102
|
+
return this.normalReturn(scope, arg);
|
|
103
|
+
}
|
|
104
|
+
eval(_scope) {
|
|
105
|
+
return [this, []];
|
|
106
|
+
}
|
|
107
|
+
rename(name) {
|
|
108
|
+
if (!this.renameable)
|
|
109
|
+
return;
|
|
110
|
+
this.name = name;
|
|
111
|
+
this.scope.name = name;
|
|
112
|
+
this.renameable = false;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
exports.FunctionValue = FunctionValue;
|
|
116
|
+
//# sourceMappingURL=FunctionValue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FunctionValue.js","sourceRoot":"","sources":["../../src/values/FunctionValue.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LiteralValue = void 0;
|
|
4
|
+
const _1 = require(".");
|
|
5
|
+
const CompilerError_1 = require("../CompilerError");
|
|
6
|
+
const literalMethods = {
|
|
7
|
+
length: function (scope) {
|
|
8
|
+
if (typeof this.data !== "string")
|
|
9
|
+
throw new CompilerError_1.CompilerError("Length method only works on string literal values.");
|
|
10
|
+
return new LiteralValue(scope, this.data.length);
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
class LiteralValue extends _1.BaseValue {
|
|
14
|
+
constructor(scope, data) {
|
|
15
|
+
super(scope);
|
|
16
|
+
this.constant = true;
|
|
17
|
+
this.data = data;
|
|
18
|
+
}
|
|
19
|
+
eval(_scope) {
|
|
20
|
+
return [this, []];
|
|
21
|
+
}
|
|
22
|
+
toString() {
|
|
23
|
+
return JSON.stringify(this.data);
|
|
24
|
+
}
|
|
25
|
+
get(scope, name) {
|
|
26
|
+
if (!(name instanceof LiteralValue && typeof name.data === "string"))
|
|
27
|
+
return super.get(scope, name);
|
|
28
|
+
const method = literalMethods[name.data];
|
|
29
|
+
if (!method)
|
|
30
|
+
throw new CompilerError_1.CompilerError(`Method ${name.data} does not exist on literal values.`);
|
|
31
|
+
return [method.apply(this, [scope]), []];
|
|
32
|
+
}
|
|
33
|
+
get num() {
|
|
34
|
+
if (this.data === null)
|
|
35
|
+
return 0;
|
|
36
|
+
if (typeof this.data === "string")
|
|
37
|
+
return 1;
|
|
38
|
+
return this.data;
|
|
39
|
+
}
|
|
40
|
+
typeof(scope) {
|
|
41
|
+
return [new LiteralValue(scope, "literal"), []];
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.LiteralValue = LiteralValue;
|
|
45
|
+
const operatorMap = {
|
|
46
|
+
"==": (a, b) => +(a == b),
|
|
47
|
+
"===": (a, b) => +(a === b),
|
|
48
|
+
"!=": (a, b) => +(a != b),
|
|
49
|
+
"!==": (a, b) => +(a !== b),
|
|
50
|
+
"<": (a, b) => +(a < b),
|
|
51
|
+
">": (a, b) => +(a > b),
|
|
52
|
+
"<=": (a, b) => +(a <= b),
|
|
53
|
+
">=": (a, b) => +(a >= b),
|
|
54
|
+
"+": (a, b) => a + b,
|
|
55
|
+
"-": (a, b) => a - b,
|
|
56
|
+
"*": (a, b) => a * b,
|
|
57
|
+
"/": (a, b) => a / b,
|
|
58
|
+
"%": (a, b) => a % b,
|
|
59
|
+
"**": (a, b) => a ** b,
|
|
60
|
+
"|": (a, b) => a | b,
|
|
61
|
+
"&": (a, b) => a & b,
|
|
62
|
+
"^": (a, b) => a ^ b,
|
|
63
|
+
">>": (a, b) => a >> b,
|
|
64
|
+
">>>": (a, b) => a >> b,
|
|
65
|
+
"<<": (a, b) => a << b,
|
|
66
|
+
"&&": (a, b) => +(a && b),
|
|
67
|
+
"||": (a, b) => +(a || b),
|
|
68
|
+
};
|
|
69
|
+
for (const key in operatorMap) {
|
|
70
|
+
const fn = operatorMap[key];
|
|
71
|
+
LiteralValue.prototype[key] = function (scope, value) {
|
|
72
|
+
if (!(value instanceof LiteralValue)) {
|
|
73
|
+
return _1.BaseValue.prototype[key].apply(this, [scope, value]);
|
|
74
|
+
}
|
|
75
|
+
return [new LiteralValue(scope, fn(this.num, value.num)), []];
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
const unaryOperatorMap = {
|
|
79
|
+
"!": v => +!v,
|
|
80
|
+
"~": v => ~v,
|
|
81
|
+
"u-": v => -v,
|
|
82
|
+
};
|
|
83
|
+
for (const key in unaryOperatorMap) {
|
|
84
|
+
LiteralValue.prototype[key] = function (scope) {
|
|
85
|
+
const fn = unaryOperatorMap[key];
|
|
86
|
+
return [new LiteralValue(scope, fn(this.num)), []];
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=LiteralValue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LiteralValue.js","sourceRoot":"","sources":["../../src/values/LiteralValue.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ObjectValue = void 0;
|
|
4
|
+
const CompilerError_1 = require("../CompilerError");
|
|
5
|
+
const operators_1 = require("../operators");
|
|
6
|
+
const LiteralValue_1 = require("./LiteralValue");
|
|
7
|
+
const VoidValue_1 = require("./VoidValue");
|
|
8
|
+
class ObjectValue extends VoidValue_1.VoidValue {
|
|
9
|
+
constructor(scope, data = {}) {
|
|
10
|
+
super(scope);
|
|
11
|
+
this.constant = true;
|
|
12
|
+
this.macro = true;
|
|
13
|
+
this.data = data;
|
|
14
|
+
}
|
|
15
|
+
typeof(scope) {
|
|
16
|
+
return [new LiteralValue_1.LiteralValue(scope, "object"), []];
|
|
17
|
+
}
|
|
18
|
+
get(scope, key) {
|
|
19
|
+
// avoids naming collisions with keys like
|
|
20
|
+
// constructor or toString
|
|
21
|
+
if (Object.prototype.hasOwnProperty.call(this.data, key.data)) {
|
|
22
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
23
|
+
const member = this.data[key.data];
|
|
24
|
+
return [member, []];
|
|
25
|
+
}
|
|
26
|
+
const { $get } = this.data;
|
|
27
|
+
if (!$get)
|
|
28
|
+
throw new CompilerError_1.CompilerError("Cannot get undefined member.");
|
|
29
|
+
return $get.call(scope, [key]);
|
|
30
|
+
}
|
|
31
|
+
eval(scope) {
|
|
32
|
+
const { $eval } = this.data;
|
|
33
|
+
if (!$eval)
|
|
34
|
+
return [this, []];
|
|
35
|
+
return $eval.call(scope, []);
|
|
36
|
+
}
|
|
37
|
+
call(scope, args) {
|
|
38
|
+
const { $call } = this.data;
|
|
39
|
+
if (!$call)
|
|
40
|
+
return super.call(scope, args);
|
|
41
|
+
return $call.call(scope, args);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.ObjectValue = ObjectValue;
|
|
45
|
+
for (const op of operators_1.operators) {
|
|
46
|
+
ObjectValue.prototype[op] = function (...args) {
|
|
47
|
+
const $ = this.data[`$${op}`];
|
|
48
|
+
// eslint-disable-next-line @typescript-eslint/ban-types, @typescript-eslint/no-unsafe-return
|
|
49
|
+
if (!$)
|
|
50
|
+
return VoidValue_1.VoidValue.prototype[op].apply(this, args);
|
|
51
|
+
const [scope, ...fnArgs] = args;
|
|
52
|
+
return $.call(scope, fnArgs);
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=ObjectValue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ObjectValue.js","sourceRoot":"","sources":["../../src/values/ObjectValue.ts"],"names":[],"mappings":";;;AAAA,oDAAiD;AAEjD,4CAAyC;AAOzC,iDAA8C;AAC9C,2CAAwC;AAOxC,MAAa,WAAY,SAAQ,qBAAS;IAKxC,YAAY,KAAa,EAAE,OAAyB,EAAE;QACpD,KAAK,CAAC,KAAK,CAAC,CAAC;QALf,aAAQ,GAAG,IAAI,CAAC;QAChB,UAAK,GAAG,IAAI,CAAC;QAKX,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,MAAM,CAAC,KAAa;QAClB,OAAO,CAAC,IAAI,2BAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,GAAG,CAAC,KAAa,EAAE,GAAiB;QAClC,0CAA0C;QAC1C,0BAA0B;QAC1B,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE;YAC7D,oEAAoE;YACpE,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC;YACpC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;SACrB;QACD,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;QAC3B,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,6BAAa,CAAC,8BAA8B,CAAC,CAAC;QACnE,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACjC,CAAC;IAED,IAAI,CAAC,KAAa;QAChB,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;QAC5B,IAAI,CAAC,KAAK;YAAE,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC9B,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,CAAC,KAAa,EAAE,IAAc;QAChC,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;QAC5B,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC3C,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACjC,CAAC;CACF;AAtCD,kCAsCC;AAED,KAAK,MAAM,EAAE,IAAI,qBAAS,EAAE;IAC1B,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,UAE1B,GAAG,IAA0B;QAE7B,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC9B,6FAA6F;QAC7F,IAAI,CAAC,CAAC;YAAE,OAAQ,qBAAS,CAAC,SAAS,CAAC,EAAE,CAAc,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACvE,MAAM,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC;QAChC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC/B,CAAC,CAAC;CACH"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StoreValue = void 0;
|
|
4
|
+
const _1 = require(".");
|
|
5
|
+
const CompilerError_1 = require("../CompilerError");
|
|
6
|
+
const instructions_1 = require("../instructions");
|
|
7
|
+
class StoreValue extends _1.BaseValue {
|
|
8
|
+
constructor(scope, name) {
|
|
9
|
+
super(scope);
|
|
10
|
+
this.constant = false;
|
|
11
|
+
this.name = name;
|
|
12
|
+
}
|
|
13
|
+
typeof(scope) {
|
|
14
|
+
return [new _1.LiteralValue(scope, "store"), []];
|
|
15
|
+
}
|
|
16
|
+
"="(scope, value) {
|
|
17
|
+
if (this.constant)
|
|
18
|
+
throw new CompilerError_1.CompilerError(`Cannot assign to unmutable store '${this.name}'.`);
|
|
19
|
+
if (value instanceof _1.TempValue && value.canProxy)
|
|
20
|
+
return value.proxy(this);
|
|
21
|
+
const [evalValue, evalInst] = value.eval(scope);
|
|
22
|
+
return [this, [...evalInst, new instructions_1.SetInstruction(this, evalValue)]];
|
|
23
|
+
}
|
|
24
|
+
eval(_scope) {
|
|
25
|
+
return [this, []];
|
|
26
|
+
}
|
|
27
|
+
toString() {
|
|
28
|
+
return this.name;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
exports.StoreValue = StoreValue;
|
|
32
|
+
//# sourceMappingURL=StoreValue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StoreValue.js","sourceRoot":"","sources":["../../src/values/StoreValue.ts"],"names":[],"mappings":";;;AAAA,wBAAuD;AACvD,oDAAiD;AACjD,kDAAiD;AAGjD,MAAa,UAAW,SAAQ,YAAS;IAGvC,YAAY,KAAa,EAAE,IAAY;QACrC,KAAK,CAAC,KAAK,CAAC,CAAC;QAFf,aAAQ,GAAG,KAAK,CAAC;QAGf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,MAAM,CAAC,KAAa;QAClB,OAAO,CAAC,IAAI,eAAY,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,GAAG,CAAC,KAAa,EAAE,KAAa;QAC9B,IAAI,IAAI,CAAC,QAAQ;YACf,MAAM,IAAI,6BAAa,CACrB,qCAAqC,IAAI,CAAC,IAAI,IAAI,CACnD,CAAC;QACJ,IAAI,KAAK,YAAY,YAAS,IAAI,KAAK,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3E,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChD,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,QAAQ,EAAE,IAAI,6BAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,CAAC,MAAc;QACjB,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACpB,CAAC;IACD,QAAQ;QACN,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;CACF;AA3BD,gCA2BC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TempValue = void 0;
|
|
4
|
+
const CompilerError_1 = require("../CompilerError");
|
|
5
|
+
const instructions_1 = require("../instructions");
|
|
6
|
+
const operators_1 = require("../operators");
|
|
7
|
+
const _1 = require("./");
|
|
8
|
+
const LiteralValue_1 = require("./LiteralValue");
|
|
9
|
+
class TempValue extends _1.StoreValue {
|
|
10
|
+
constructor({ scope, name, renameable = true }) {
|
|
11
|
+
super(scope, name ?? scope.makeTempName());
|
|
12
|
+
this.canProxy = true;
|
|
13
|
+
this.renameable = renameable;
|
|
14
|
+
}
|
|
15
|
+
eval(scope) {
|
|
16
|
+
return super.eval(scope);
|
|
17
|
+
}
|
|
18
|
+
"="(scope, value) {
|
|
19
|
+
if (this.proxied) {
|
|
20
|
+
this.noProxy();
|
|
21
|
+
return [this, [new instructions_1.SetInstruction(this, value)]];
|
|
22
|
+
}
|
|
23
|
+
if (value instanceof LiteralValue_1.LiteralValue && this.canProxy) {
|
|
24
|
+
return this.proxy(value);
|
|
25
|
+
}
|
|
26
|
+
return super["="](scope, value);
|
|
27
|
+
}
|
|
28
|
+
proxy(value) {
|
|
29
|
+
if (!this.canProxy) {
|
|
30
|
+
console.log(this.proxied);
|
|
31
|
+
throw new CompilerError_1.CompilerError("Cannot proxy (canProxy = false).");
|
|
32
|
+
}
|
|
33
|
+
if (this.proxied)
|
|
34
|
+
throw new CompilerError_1.CompilerError("Cannot proxy multiple times.");
|
|
35
|
+
this.proxied = value;
|
|
36
|
+
this.canProxy = false;
|
|
37
|
+
for (const key of [
|
|
38
|
+
...operators_1.operators,
|
|
39
|
+
"eval",
|
|
40
|
+
"get",
|
|
41
|
+
"call",
|
|
42
|
+
"toString",
|
|
43
|
+
"proxy",
|
|
44
|
+
"rename",
|
|
45
|
+
]) {
|
|
46
|
+
if (key !== "=" && key in value)
|
|
47
|
+
this[key] = (...args) => {
|
|
48
|
+
// eslint-disable-next-line @typescript-eslint/ban-types, @typescript-eslint/no-unsafe-return
|
|
49
|
+
return value[key].apply(value, args);
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
this.setInst = new instructions_1.SetInstruction(this, value);
|
|
53
|
+
this.setInst.hidden = true;
|
|
54
|
+
return [this, [this.setInst]];
|
|
55
|
+
}
|
|
56
|
+
noProxy() {
|
|
57
|
+
this.setInst.hidden = false;
|
|
58
|
+
for (const key of [
|
|
59
|
+
...operators_1.operators,
|
|
60
|
+
"eval",
|
|
61
|
+
"get",
|
|
62
|
+
"call",
|
|
63
|
+
"toString",
|
|
64
|
+
"proxy",
|
|
65
|
+
"rename",
|
|
66
|
+
]) {
|
|
67
|
+
this[key] = TempValue.prototype[key];
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
rename(name) {
|
|
71
|
+
if (!this.renameable)
|
|
72
|
+
return;
|
|
73
|
+
this.name = name;
|
|
74
|
+
this.renameable = false;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
exports.TempValue = TempValue;
|
|
78
|
+
//# sourceMappingURL=TempValue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TempValue.js","sourceRoot":"","sources":["../../src/values/TempValue.ts"],"names":[],"mappings":";;;AAAA,oDAAiD;AACjD,kDAAiD;AACjD,4CAAyC;AAEzC,yBAAgC;AAChC,iDAA8C;AAQ9C,MAAa,SAAU,SAAQ,aAAU;IAMvC,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,EAAoB;QAC9D,KAAK,CAAC,KAAK,EAAE,IAAI,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;QAL7C,aAAQ,GAAG,IAAI,CAAC;QAMd,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,IAAI,CAAC,KAAa;QAChB,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAED,GAAG,CAAC,KAAa,EAAE,KAAa;QAC9B,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,6BAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;SAClD;QACD,IAAI,KAAK,YAAY,2BAAY,IAAI,IAAI,CAAC,QAAQ,EAAE;YAClD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;SAC1B;QACD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,KAAa;QACjB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1B,MAAM,IAAI,6BAAa,CAAC,kCAAkC,CAAC,CAAC;SAC7D;QACD,IAAI,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,6BAAa,CAAC,8BAA8B,CAAC,CAAC;QAC1E,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,KAAK,MAAM,GAAG,IAAI;YAChB,GAAG,qBAAS;YACZ,MAAM;YACN,KAAK;YACL,MAAM;YACN,UAAU;YACV,OAAO;YACP,QAAQ;SACA,EAAE;YACV,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,KAAK;gBAC7B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAa,EAAE,EAAE;oBAC/B,6FAA6F;oBAC7F,OAAQ,KAAK,CAAC,GAAmB,CAAc,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBACrE,CAAC,CAAC;SACL;QACD,IAAI,CAAC,OAAO,GAAG,IAAI,6BAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;QAC3B,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAChC,CAAC;IAED,OAAO;QACL,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC;QAC5B,KAAK,MAAM,GAAG,IAAI;YAChB,GAAG,qBAAS;YACZ,MAAM;YACN,KAAK;YACL,MAAM;YACN,UAAU;YACV,OAAO;YACP,QAAQ;SACA,EAAE;YACV,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,GAAG,CAAU,CAAC;SAC/C;IACH,CAAC;IAED,MAAM,CAAC,IAAY;QACjB,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IAC1B,CAAC;CACF;AA1ED,8BA0EC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.VoidValue = void 0;
|
|
4
|
+
const operators_1 = require("../operators");
|
|
5
|
+
const CompilerError_1 = require("../CompilerError");
|
|
6
|
+
class VoidValue {
|
|
7
|
+
constructor(scope) {
|
|
8
|
+
this.constant = false;
|
|
9
|
+
this.macro = false;
|
|
10
|
+
this.scope = scope;
|
|
11
|
+
}
|
|
12
|
+
eval(_scope) {
|
|
13
|
+
throw new CompilerError_1.CompilerError(`${this} cannot eval.`);
|
|
14
|
+
}
|
|
15
|
+
call(_scope, _args) {
|
|
16
|
+
throw new CompilerError_1.CompilerError(`${this} cannot call.`);
|
|
17
|
+
}
|
|
18
|
+
get(_scope, _name) {
|
|
19
|
+
throw new CompilerError_1.CompilerError(`${this} cannot get.`);
|
|
20
|
+
}
|
|
21
|
+
toString() {
|
|
22
|
+
return "void";
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
exports.VoidValue = VoidValue;
|
|
26
|
+
for (const key of operators_1.operators) {
|
|
27
|
+
VoidValue.prototype[key] = function () {
|
|
28
|
+
console.log(this);
|
|
29
|
+
throw new CompilerError_1.CompilerError(`${this} cannot '${key}' operation.`);
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=VoidValue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VoidValue.js","sourceRoot":"","sources":["../../src/values/VoidValue.ts"],"names":[],"mappings":";;;AACA,4CAAyC;AACzC,oDAAiD;AAEjD,MAAa,SAAS;IAIpB,YAAY,KAAa;QAFzB,aAAQ,GAAG,KAAK,CAAC;QACjB,UAAK,GAAG,KAAK,CAAC;QAEZ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IACD,IAAI,CAAC,MAAc;QACjB,MAAM,IAAI,6BAAa,CAAC,GAAG,IAAI,eAAe,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,CAAC,MAAc,EAAE,KAAe;QAClC,MAAM,IAAI,6BAAa,CAAC,GAAG,IAAI,eAAe,CAAC,CAAC;IAClD,CAAC;IACD,GAAG,CAAC,MAAc,EAAE,KAAa;QAC/B,MAAM,IAAI,6BAAa,CAAC,GAAG,IAAI,cAAc,CAAC,CAAC;IACjD,CAAC;IACD,QAAQ;QACN,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAnBD,8BAmBC;AAKD,KAAK,MAAM,GAAG,IAAI,qBAAS,EAAE;IAC3B,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG;QACzB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,MAAM,IAAI,6BAAa,CAAC,GAAG,IAAI,YAAY,GAAG,cAAc,CAAC,CAAC;IAChE,CAAC,CAAC;CACH"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./VoidValue"), exports);
|
|
18
|
+
__exportStar(require("./BaseValue"), exports);
|
|
19
|
+
__exportStar(require("./LiteralValue"), exports);
|
|
20
|
+
__exportStar(require("./StoreValue"), exports);
|
|
21
|
+
__exportStar(require("./TempValue"), exports);
|
|
22
|
+
__exportStar(require("./ObjectValue"), exports);
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/values/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,8CAA4B;AAC5B,iDAA+B;AAC/B,+CAA6B;AAC7B,8CAA4B;AAC5B,gDAA8B"}
|
package/dist/bin.cjs
CHANGED
|
@@ -24,6 +24,11 @@ yargs__default["default"](helpers.hideBin(process.argv))
|
|
|
24
24
|
.positional("out", {
|
|
25
25
|
describe: "path of the output file",
|
|
26
26
|
type: "string",
|
|
27
|
+
})
|
|
28
|
+
.option("compact-names", {
|
|
29
|
+
type: "boolean",
|
|
30
|
+
default: false,
|
|
31
|
+
describe: "Wether the compiler should preserve or compact variable and function names",
|
|
27
32
|
});
|
|
28
33
|
}, argv => {
|
|
29
34
|
const path$1 = argv.path;
|
|
@@ -34,21 +39,29 @@ yargs__default["default"](helpers.hideBin(process.argv))
|
|
|
34
39
|
const out = argv.out ?? defaultOutPath(path$1);
|
|
35
40
|
if (path$1 == out)
|
|
36
41
|
return console.log("The out path cannot be the same as the input path");
|
|
42
|
+
const compiler = new index_cjs.Compiler({
|
|
43
|
+
compactNames: argv["compact-names"],
|
|
44
|
+
});
|
|
37
45
|
const code = fs.readFileSync(path$1, "utf8");
|
|
38
|
-
const [output, error, [node]] =
|
|
46
|
+
const [output, error, [node]] = compiler.compile(code);
|
|
39
47
|
if (error) {
|
|
40
|
-
|
|
41
|
-
|
|
48
|
+
if (!(error instanceof index_cjs.CompilerError)) {
|
|
49
|
+
console.error(error);
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
let start = error.loc;
|
|
42
53
|
let end = start;
|
|
43
54
|
if (node) {
|
|
55
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
44
56
|
start = node.loc.start;
|
|
57
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
45
58
|
end = node.loc.end;
|
|
46
59
|
}
|
|
47
60
|
const lines = code.split("\n");
|
|
48
61
|
console.log(chalk__default["default"].cyanBright([path.resolve(path$1), start.line, start.column].join(":")));
|
|
49
62
|
for (let i = Math.max(start.line - 3, 0); i < Math.min(end.line + 2, lines.length); i++) {
|
|
50
63
|
const n = i + 1;
|
|
51
|
-
const head = chalk__default["default"].gray(
|
|
64
|
+
const head = chalk__default["default"].gray(`${n} | `.padStart(6, " "));
|
|
52
65
|
console.log(head + cliHighlight.highlight(lines[i], { language: "js" }));
|
|
53
66
|
if (n === start.line) {
|
|
54
67
|
console.log(chalk__default["default"].red(" ".repeat(6 + start.column) + "^ " + error.message));
|
package/dist/bin.cjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bin.cjs","sources":["../src/bin.ts"],"sourcesContent":[null],"names":["yargs","hideBin","path","existsSync","Compiler","readFileSync","CompilerError","chalk","resolve","highlight","writeFileSync","parse","join"],"mappings":"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"}
|