mlogjs 0.2.0 → 0.2.1

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.
Files changed (202) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +68 -18
  3. package/build/Compiler.d.ts +18 -18
  4. package/build/Compiler.js +99 -119
  5. package/build/Compiler.js.map +1 -1
  6. package/build/Scope.d.ts +26 -26
  7. package/build/Scope.js +60 -60
  8. package/build/Scope.js.map +1 -1
  9. package/build/bin.d.ts +2 -2
  10. package/build/bin.js +60 -41
  11. package/build/bin.js.map +1 -1
  12. package/build/handlers/BlockStatement.d.ts +2 -2
  13. package/build/handlers/BlockStatement.js +13 -13
  14. package/build/handlers/CallExpression.d.ts +3 -3
  15. package/build/handlers/CallExpression.js +19 -19
  16. package/build/handlers/ForStatement.d.ts +2 -2
  17. package/build/handlers/ForStatement.js +31 -31
  18. package/build/handlers/Function.d.ts +4 -4
  19. package/build/handlers/Function.js +35 -35
  20. package/build/handlers/Identifier.d.ts +2 -2
  21. package/build/handlers/Identifier.js +7 -7
  22. package/build/handlers/IfStatement.d.ts +2 -2
  23. package/build/handlers/IfStatement.js +24 -24
  24. package/build/handlers/Literal.d.ts +2 -2
  25. package/build/handlers/Literal.js +17 -17
  26. package/build/handlers/Object.d.ts +4 -4
  27. package/build/handlers/Object.js +43 -43
  28. package/build/handlers/OperationExpressions.d.ts +7 -7
  29. package/build/handlers/OperationExpressions.js +32 -32
  30. package/build/handlers/Program.d.ts +2 -2
  31. package/build/handlers/Program.js +8 -8
  32. package/build/handlers/Program.js.map +1 -1
  33. package/build/handlers/Statements.d.ts +5 -5
  34. package/build/handlers/Statements.js +29 -29
  35. package/build/handlers/TemplateExpression.d.ts +2 -2
  36. package/build/handlers/TemplateExpression.js +17 -17
  37. package/build/handlers/VariableDeclaration.d.ts +3 -3
  38. package/build/handlers/VariableDeclaration.js +55 -55
  39. package/build/handlers/WhileStatement.d.ts +2 -2
  40. package/build/handlers/WhileStatement.js +22 -22
  41. package/build/handlers/index.d.ts +14 -14
  42. package/build/handlers/index.js +30 -30
  43. package/build/index.d.ts +1 -1
  44. package/build/index.js +7 -7
  45. package/build/initScope.d.ts +2 -0
  46. package/build/initScope.js +40 -0
  47. package/build/initScope.js.map +1 -0
  48. package/build/instructions/AddressResolver.d.ts +12 -12
  49. package/build/instructions/AddressResolver.js +30 -30
  50. package/build/instructions/ControlInstructions.d.ts +11 -11
  51. package/build/instructions/ControlInstructions.js +22 -22
  52. package/build/instructions/EndInstruction.d.ts +4 -4
  53. package/build/instructions/EndInstruction.js +10 -10
  54. package/build/instructions/InstructionBase.d.ts +10 -10
  55. package/build/instructions/InstructionBase.js +20 -20
  56. package/build/instructions/JumpInstruction.d.ts +15 -15
  57. package/build/instructions/JumpInstruction.js +21 -21
  58. package/build/instructions/OperationInstruction.d.ts +5 -5
  59. package/build/instructions/OperationInstruction.js +10 -10
  60. package/build/instructions/SetCounterInstruction.d.ts +5 -5
  61. package/build/instructions/SetCounterInstruction.js +10 -10
  62. package/build/instructions/SetInstruction.d.ts +5 -5
  63. package/build/instructions/SetInstruction.js +10 -10
  64. package/build/instructions/ZeroSpaceInstruction.d.ts +4 -4
  65. package/build/instructions/ZeroSpaceInstruction.js +10 -10
  66. package/build/instructions/index.d.ts +9 -9
  67. package/build/instructions/index.js +25 -25
  68. package/build/macros/Building.d.ts +11 -11
  69. package/build/macros/Building.js +80 -80
  70. package/build/macros/Function.d.ts +12 -12
  71. package/build/macros/Function.js +19 -19
  72. package/build/macros/Math.d.ts +5 -5
  73. package/build/macros/Math.js +56 -56
  74. package/build/macros/Math.js.map +1 -1
  75. package/build/macros/Memory.d.ts +5 -5
  76. package/build/macros/Memory.js +60 -60
  77. package/build/macros/Namespace.d.ts +21 -21
  78. package/build/macros/Namespace.js +97 -97
  79. package/build/macros/Other.d.ts +5 -5
  80. package/build/macros/Other.js +19 -19
  81. package/build/macros/RawValue.d.ts +5 -5
  82. package/build/macros/RawValue.js +15 -15
  83. package/build/macros/commands/{control.d.ts → Control.d.ts} +5 -5
  84. package/build/macros/commands/{control.js → Control.js} +24 -24
  85. package/build/macros/commands/{control.js.map → Control.js.map} +0 -0
  86. package/build/macros/commands/Draw.d.ts +5 -5
  87. package/build/macros/commands/Draw.js +38 -38
  88. package/build/macros/commands/DrawFlush.d.ts +5 -5
  89. package/build/macros/commands/DrawFlush.js +16 -16
  90. package/build/macros/commands/GetLink.d.ts +5 -5
  91. package/build/macros/commands/GetLink.js +20 -20
  92. package/build/macros/commands/Lookup.d.ts +5 -5
  93. package/build/macros/commands/Lookup.js +23 -23
  94. package/build/macros/commands/Print.d.ts +5 -5
  95. package/build/macros/commands/Print.js +13 -13
  96. package/build/macros/commands/PrintFlush.d.ts +5 -5
  97. package/build/macros/commands/PrintFlush.js +16 -16
  98. package/build/macros/commands/Radar.d.ts +7 -7
  99. package/build/macros/commands/Radar.js +60 -60
  100. package/build/macros/commands/Sensor.d.ts +5 -5
  101. package/build/macros/commands/Sensor.js +19 -19
  102. package/build/macros/commands/UnitBind.d.ts +5 -5
  103. package/build/macros/commands/UnitBind.js +16 -16
  104. package/build/macros/commands/UnitControl.d.ts +5 -5
  105. package/build/macros/commands/UnitControl.js +67 -67
  106. package/build/macros/commands/UnitLocate.d.ts +5 -5
  107. package/build/macros/commands/UnitLocate.js +54 -54
  108. package/build/macros/commands/UnitRadar.d.ts +5 -5
  109. package/build/macros/commands/UnitRadar.js +40 -40
  110. package/build/macros/commands/Wait.d.ts +5 -5
  111. package/build/macros/commands/Wait.js +17 -17
  112. package/build/macros/commands/index.d.ts +14 -14
  113. package/build/macros/commands/index.js +32 -32
  114. package/build/macros/index.d.ts +7 -7
  115. package/build/macros/index.js +39 -39
  116. package/build/operators.d.ts +25 -25
  117. package/build/operators.js +101 -101
  118. package/build/types.d.ts +49 -49
  119. package/build/types.js +27 -27
  120. package/build/utils.d.ts +3 -3
  121. package/build/utils.js +12 -12
  122. package/build/values/BaseValue.d.ts +5 -5
  123. package/build/values/BaseValue.js +111 -111
  124. package/build/values/FunctionValue.d.ts +34 -34
  125. package/build/values/FunctionValue.js +103 -103
  126. package/build/values/LiteralValue.d.ts +12 -12
  127. package/build/values/LiteralValue.js +87 -87
  128. package/build/values/LiteralValue.js.map +1 -1
  129. package/build/values/ObjectValue.d.ts +17 -17
  130. package/build/values/ObjectValue.js +49 -49
  131. package/build/values/StoreValue.d.ts +11 -11
  132. package/build/values/StoreValue.js +30 -30
  133. package/build/values/TempValue.d.ts +12 -12
  134. package/build/values/TempValue.js +66 -66
  135. package/build/values/TempValue.js.map +1 -1
  136. package/build/values/VoidValue.d.ts +11 -11
  137. package/build/values/VoidValue.js +30 -30
  138. package/build/values/index.d.ts +6 -6
  139. package/build/values/index.js +22 -22
  140. package/dist/mlogjs.es.js +6366 -0
  141. package/dist/mlogjs.umd.js +8 -0
  142. package/lib/commands.d.ts +326 -326
  143. package/lib/eslib/index.d.ts +3 -3
  144. package/lib/eslib/lib.d.ts +9 -9
  145. package/lib/eslib/lib.es2015.collection.d.ts +89 -89
  146. package/lib/eslib/lib.es2015.core.d.ts +16 -16
  147. package/lib/eslib/lib.es2015.d.ts +30 -30
  148. package/lib/eslib/lib.es2015.generator.d.ts +79 -79
  149. package/lib/eslib/lib.es2015.iterable.d.ts +70 -70
  150. package/lib/eslib/lib.es5.d.ts +295 -295
  151. package/lib/eslib/lib.es6.d.ts +18 -18
  152. package/lib/globals.d.ts +328 -328
  153. package/lib/helpers.d.ts +23 -23
  154. package/lib/index.d.ts +7 -7
  155. package/lib/kinds.d.ts +36 -36
  156. package/lib/memory.d.ts +17 -17
  157. package/lib/traits.d.ts +121 -121
  158. package/lib/util.d.ts +32 -32
  159. package/package.json +73 -48
  160. package/build/macros/Blocks.d.ts +0 -5
  161. package/build/macros/Blocks.js +0 -143
  162. package/build/macros/Blocks.js.map +0 -1
  163. package/build/macros/Draw.d.ts +0 -5
  164. package/build/macros/Draw.js +0 -39
  165. package/build/macros/Draw.js.map +0 -1
  166. package/build/macros/Items.d.ts +0 -5
  167. package/build/macros/Items.js +0 -20
  168. package/build/macros/Items.js.map +0 -1
  169. package/build/macros/Liquids.d.ts +0 -5
  170. package/build/macros/Liquids.js +0 -18
  171. package/build/macros/Liquids.js.map +0 -1
  172. package/build/macros/Symbol.d.ts +0 -0
  173. package/build/macros/Symbol.js +0 -1
  174. package/build/macros/Symbol.js.map +0 -1
  175. package/build/macros/SymbolNamespace.d.ts +0 -0
  176. package/build/macros/SymbolNamespace.js +0 -1
  177. package/build/macros/SymbolNamespace.js.map +0 -1
  178. package/build/macros/TypeFactory.d.ts +0 -8
  179. package/build/macros/TypeFactory.js +0 -22
  180. package/build/macros/TypeFactory.js.map +0 -1
  181. package/build/macros/Units.d.ts +0 -5
  182. package/build/macros/Units.js +0 -18
  183. package/build/macros/Units.js.map +0 -1
  184. package/build/macros/Vars.d.ts +0 -5
  185. package/build/macros/Vars.js +0 -18
  186. package/build/macros/Vars.js.map +0 -1
  187. package/build/macros/commands/Asm.d.ts +0 -5
  188. package/build/macros/commands/Asm.js +0 -21
  189. package/build/macros/commands/Asm.js.map +0 -1
  190. package/build/macros/commands/io.d.ts +0 -8
  191. package/build/macros/commands/io.js +0 -47
  192. package/build/macros/commands/io.js.map +0 -1
  193. package/build/macros/helpers/GetBuilding.d.ts +0 -5
  194. package/build/macros/helpers/GetBuilding.js +0 -16
  195. package/build/macros/helpers/GetBuilding.js.map +0 -1
  196. package/build/macros/helpers/GetVar.d.ts +0 -5
  197. package/build/macros/helpers/GetVar.js +0 -16
  198. package/build/macros/helpers/GetVar.js.map +0 -1
  199. package/build/macros/helpers/index.d.ts +0 -2
  200. package/build/macros/helpers/index.js +0 -15
  201. package/build/macros/helpers/index.js.map +0 -1
  202. package/dist/bundle.js +0 -1
@@ -1,112 +1,112 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.BaseValue = void 0;
4
- const instructions_1 = require("../instructions");
5
- const operators_1 = require("../operators");
6
- const _1 = require(".");
7
- class BaseValue extends _1.VoidValue {
8
- "u-"(scope) {
9
- const [that, inst] = this.eval(scope);
10
- const temp = new _1.TempValue(scope);
11
- return [
12
- temp,
13
- [
14
- ...inst,
15
- new instructions_1.OperationInstruction("sub", temp, new _1.LiteralValue(scope, 0), that),
16
- ],
17
- ];
18
- }
19
- }
20
- exports.BaseValue = BaseValue;
21
- const operatorMap = {
22
- "==": "equal",
23
- "===": "strictEqual",
24
- "!=": "notEqual",
25
- "!==": "notEqual",
26
- "<": "lessThan",
27
- ">": "greaterThan",
28
- "<=": "lessThanEq",
29
- ">=": "greaterThanEq",
30
- "+": "add",
31
- "-": "sub",
32
- "*": "mul",
33
- "/": "div",
34
- "%": "mod",
35
- "**": "pow",
36
- "|": "or",
37
- "&": "and",
38
- "^": "xor",
39
- ">>": "shr",
40
- ">>>": "shr",
41
- "<<": "shl",
42
- "&&": "land",
43
- "||": "or",
44
- };
45
- for (const key in operatorMap) {
46
- const kind = operatorMap[key];
47
- BaseValue.prototype[key] = function (scope, value) {
48
- const [left, leftInst] = this.eval(scope);
49
- const [right, rightInst] = value.eval(scope);
50
- const temp = new _1.TempValue(scope);
51
- return [
52
- temp,
53
- [
54
- ...leftInst,
55
- ...rightInst,
56
- new instructions_1.OperationInstruction(kind, temp, left, right),
57
- ],
58
- ];
59
- };
60
- }
61
- const unaryOperatorMap = {
62
- "!": "not",
63
- "~": "flip",
64
- };
65
- for (const key in unaryOperatorMap) {
66
- const name = unaryOperatorMap[key];
67
- BaseValue.prototype[key] = function (scope) {
68
- const [that, inst] = this.eval(scope);
69
- const temp = new _1.TempValue(scope);
70
- return [temp, [...inst, new instructions_1.OperationInstruction(name, temp, that)]];
71
- };
72
- }
73
- const assignmentToBinary = {
74
- "+=": "+",
75
- "-=": "-",
76
- "*=": "*",
77
- "/=": "/",
78
- "%=": "%",
79
- "**=": "**",
80
- "|=": "|",
81
- "&=": "&",
82
- "^=": "^",
83
- ">>=": ">>",
84
- ">>>=": ">>>",
85
- "<<=": "<<",
86
- "&&=": "&&",
87
- "||=": "||",
88
- };
89
- for (const op in assignmentToBinary) {
90
- BaseValue.prototype[op] = function (scope, value) {
91
- const [opValue, opInst] = this[assignmentToBinary[op]](scope, value);
92
- const [retValue, retInst] = this["="](scope, opValue);
93
- return [retValue, [...opInst, ...retInst]];
94
- };
95
- }
96
- for (const key of operators_1.updateOperators) {
97
- BaseValue.prototype[key] = function (scope, prefix) {
98
- let [ret, inst] = this.eval(scope);
99
- if (!prefix) {
100
- const temp = new _1.TempValue(scope);
101
- const [tempValue, tempInst] = temp["="](scope, ret);
102
- ret = tempValue;
103
- inst.push(...tempInst);
104
- }
105
- const kind = key === "++" ? "+=" : "-=";
106
- return [
107
- ret,
108
- [...inst, ...this[kind](scope, new _1.LiteralValue(scope, 1))[1]],
109
- ];
110
- };
111
- }
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseValue = void 0;
4
+ const instructions_1 = require("../instructions");
5
+ const operators_1 = require("../operators");
6
+ const _1 = require(".");
7
+ class BaseValue extends _1.VoidValue {
8
+ "u-"(scope) {
9
+ const [that, inst] = this.eval(scope);
10
+ const temp = new _1.TempValue(scope);
11
+ return [
12
+ temp,
13
+ [
14
+ ...inst,
15
+ new instructions_1.OperationInstruction("sub", temp, new _1.LiteralValue(scope, 0), that),
16
+ ],
17
+ ];
18
+ }
19
+ }
20
+ exports.BaseValue = BaseValue;
21
+ const operatorMap = {
22
+ "==": "equal",
23
+ "===": "strictEqual",
24
+ "!=": "notEqual",
25
+ "!==": "notEqual",
26
+ "<": "lessThan",
27
+ ">": "greaterThan",
28
+ "<=": "lessThanEq",
29
+ ">=": "greaterThanEq",
30
+ "+": "add",
31
+ "-": "sub",
32
+ "*": "mul",
33
+ "/": "div",
34
+ "%": "mod",
35
+ "**": "pow",
36
+ "|": "or",
37
+ "&": "and",
38
+ "^": "xor",
39
+ ">>": "shr",
40
+ ">>>": "shr",
41
+ "<<": "shl",
42
+ "&&": "land",
43
+ "||": "or",
44
+ };
45
+ for (const key in operatorMap) {
46
+ const kind = operatorMap[key];
47
+ BaseValue.prototype[key] = function (scope, value) {
48
+ const [left, leftInst] = this.eval(scope);
49
+ const [right, rightInst] = value.eval(scope);
50
+ const temp = new _1.TempValue(scope);
51
+ return [
52
+ temp,
53
+ [
54
+ ...leftInst,
55
+ ...rightInst,
56
+ new instructions_1.OperationInstruction(kind, temp, left, right),
57
+ ],
58
+ ];
59
+ };
60
+ }
61
+ const unaryOperatorMap = {
62
+ "!": "not",
63
+ "~": "flip",
64
+ };
65
+ for (const key in unaryOperatorMap) {
66
+ const name = unaryOperatorMap[key];
67
+ BaseValue.prototype[key] = function (scope) {
68
+ const [that, inst] = this.eval(scope);
69
+ const temp = new _1.TempValue(scope);
70
+ return [temp, [...inst, new instructions_1.OperationInstruction(name, temp, that)]];
71
+ };
72
+ }
73
+ const assignmentToBinary = {
74
+ "+=": "+",
75
+ "-=": "-",
76
+ "*=": "*",
77
+ "/=": "/",
78
+ "%=": "%",
79
+ "**=": "**",
80
+ "|=": "|",
81
+ "&=": "&",
82
+ "^=": "^",
83
+ ">>=": ">>",
84
+ ">>>=": ">>>",
85
+ "<<=": "<<",
86
+ "&&=": "&&",
87
+ "||=": "||",
88
+ };
89
+ for (const op in assignmentToBinary) {
90
+ BaseValue.prototype[op] = function (scope, value) {
91
+ const [opValue, opInst] = this[assignmentToBinary[op]](scope, value);
92
+ const [retValue, retInst] = this["="](scope, opValue);
93
+ return [retValue, [...opInst, ...retInst]];
94
+ };
95
+ }
96
+ for (const key of operators_1.updateOperators) {
97
+ BaseValue.prototype[key] = function (scope, prefix) {
98
+ let [ret, inst] = this.eval(scope);
99
+ if (!prefix) {
100
+ const temp = new _1.TempValue(scope);
101
+ const [tempValue, tempInst] = temp["="](scope, ret);
102
+ ret = tempValue;
103
+ inst.push(...tempInst);
104
+ }
105
+ const kind = key === "++" ? "+=" : "-=";
106
+ return [
107
+ ret,
108
+ [...inst, ...this[kind](scope, new _1.LiteralValue(scope, 1))[1]],
109
+ ];
110
+ };
111
+ }
112
112
  //# sourceMappingURL=BaseValue.js.map
@@ -1,34 +1,34 @@
1
- import { Compiler } from "../Compiler";
2
- import { es, IFunctionValue, IScope, IValue, TValueInstructions } from "../types";
3
- import { StoreValue } from "./StoreValue";
4
- import { VoidValue } from "./VoidValue";
5
- export declare class FunctionValue extends VoidValue implements IFunctionValue {
6
- constant: boolean;
7
- macro: boolean;
8
- private paramStores;
9
- private paramNames;
10
- private inst;
11
- private addr;
12
- private temp;
13
- private ret;
14
- private inline;
15
- private tryingInline;
16
- private body;
17
- private name;
18
- private c;
19
- private callSize;
20
- private inlineTemp;
21
- private inlineEnd;
22
- private bundled;
23
- private createValues;
24
- typeof(scope: IScope): TValueInstructions;
25
- private createInst;
26
- constructor(scope: IScope, name: string, paramNames: string[], paramStores: StoreValue[], body: es.BlockStatement, c: Compiler);
27
- private normalReturn;
28
- private normalCall;
29
- private inlineReturn;
30
- private inlineCall;
31
- call(scope: IScope, args: IValue[]): TValueInstructions;
32
- return(scope: IScope, arg: IValue): TValueInstructions;
33
- eval(scope: IScope): TValueInstructions;
34
- }
1
+ import { Compiler } from "../Compiler";
2
+ import { es, IFunctionValue, IScope, IValue, TValueInstructions } from "../types";
3
+ import { StoreValue } from "./StoreValue";
4
+ import { VoidValue } from "./VoidValue";
5
+ export declare class FunctionValue extends VoidValue implements IFunctionValue {
6
+ constant: boolean;
7
+ macro: boolean;
8
+ private paramStores;
9
+ private paramNames;
10
+ private inst;
11
+ private addr;
12
+ private temp;
13
+ private ret;
14
+ private inline;
15
+ private tryingInline;
16
+ private body;
17
+ private name;
18
+ private c;
19
+ private callSize;
20
+ private inlineTemp;
21
+ private inlineEnd;
22
+ private bundled;
23
+ private createValues;
24
+ typeof(scope: IScope): TValueInstructions;
25
+ private createInst;
26
+ constructor(scope: IScope, name: string, paramNames: string[], paramStores: StoreValue[], body: es.BlockStatement, c: Compiler);
27
+ private normalReturn;
28
+ private normalCall;
29
+ private inlineReturn;
30
+ private inlineCall;
31
+ call(scope: IScope, args: IValue[]): TValueInstructions;
32
+ return(scope: IScope, arg: IValue): TValueInstructions;
33
+ eval(scope: IScope): TValueInstructions;
34
+ }
@@ -1,104 +1,104 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FunctionValue = void 0;
4
- const instructions_1 = require("../instructions");
5
- const LiteralValue_1 = require("./LiteralValue");
6
- const StoreValue_1 = require("./StoreValue");
7
- const TempValue_1 = require("./TempValue");
8
- const VoidValue_1 = require("./VoidValue");
9
- class FunctionValue extends VoidValue_1.VoidValue {
10
- constructor(scope, name, paramNames, paramStores, body, c) {
11
- super(scope);
12
- this.constant = true;
13
- this.macro = true;
14
- this.bundled = false;
15
- this.name = name;
16
- this.paramNames = paramNames;
17
- this.paramStores = paramStores;
18
- this.body = body;
19
- this.c = c;
20
- this.callSize = paramStores.length + 2;
21
- scope.function = this;
22
- this.createValues();
23
- this.createInst();
24
- }
25
- createValues() {
26
- this.addr = new LiteralValue_1.LiteralValue(this.scope, null);
27
- this.temp = new StoreValue_1.StoreValue(this.scope, "f" + this.name);
28
- this.ret = new StoreValue_1.StoreValue(this.scope, "r" + this.name);
29
- }
30
- typeof(scope) {
31
- return [new LiteralValue_1.LiteralValue(scope, "function"), []];
32
- }
33
- createInst() {
34
- this.inst = [
35
- new instructions_1.AddressResolver(this.addr),
36
- ...this.c.handle(this.scope, this.body)[1],
37
- ];
38
- this.inst.push(new instructions_1.SetCounterInstruction(this.ret));
39
- }
40
- normalReturn(scope, arg) {
41
- const argInst = arg ? this.temp["="](scope, arg)[1] : [];
42
- return [null, [...argInst, new instructions_1.SetCounterInstruction(this.ret)]];
43
- }
44
- normalCall(scope, args) {
45
- if (!this.bundled)
46
- this.scope.inst.push(...this.inst);
47
- this.bundled = true;
48
- const callAddressLiteral = new LiteralValue_1.LiteralValue(scope, null);
49
- const inst = this.paramStores
50
- .map((param, i) => param["="](scope, args[i])[1])
51
- .reduce((s, c) => s.concat(c), [])
52
- .concat(...this.ret["="](scope, callAddressLiteral)[1], new instructions_1.JumpInstruction(this.addr, instructions_1.EJumpKind.Always), new instructions_1.AddressResolver(callAddressLiteral));
53
- return [this.temp, inst];
54
- }
55
- inlineReturn(scope, arg) {
56
- const argInst = arg ? this.inlineTemp["="](scope, arg)[1] : [];
57
- return [null, [...argInst, new instructions_1.ReturnInstruction(this.inlineEnd)]];
58
- }
59
- inlineCall(scope, args) {
60
- // create return value
61
- this.inlineTemp = new TempValue_1.TempValue(scope);
62
- this.inlineEnd = new LiteralValue_1.LiteralValue(scope, null);
63
- // make a copy of the function scope
64
- const fnScope = this.scope.copy();
65
- // hard set variables within the function scope
66
- this.paramNames.forEach((name, i) => fnScope.hardSet(name, args[i]));
67
- this.tryingInline = true;
68
- let inst = this.c.handle(fnScope, this.body)[1];
69
- this.tryingInline = false;
70
- // removing useless instruction
71
- // get the last instructions
72
- // const [jump] = inst.slice(-1);
73
- // if (jump instanceof JumpInstruction) {
74
- // // remove useless jump
75
- // if (jump.args[1] === this.inlineEnd) inst.pop();
76
- // }
77
- inst.push(new instructions_1.AddressResolver(this.inlineEnd));
78
- // return the function value
79
- return [this.inlineTemp, inst];
80
- }
81
- call(scope, args) {
82
- if (args.length !== this.paramStores.length)
83
- throw new Error("Cannot call: argument count not matching.");
84
- const inlineCall = this.inlineCall(scope, args);
85
- const inlineSize = inlineCall[1].filter(i => !i.hidden).length;
86
- if (this.inline || inlineSize <= this.callSize)
87
- return inlineCall;
88
- return this.normalCall(scope, args);
89
- }
90
- return(scope, arg) {
91
- if (arg && arg.macro) {
92
- this.inline = true;
93
- return [null, []];
94
- }
95
- if (this.inline || this.tryingInline)
96
- return this.inlineReturn(scope, arg);
97
- return this.normalReturn(scope, arg);
98
- }
99
- eval(scope) {
100
- return [this, []];
101
- }
102
- }
103
- exports.FunctionValue = FunctionValue;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FunctionValue = void 0;
4
+ const instructions_1 = require("../instructions");
5
+ const LiteralValue_1 = require("./LiteralValue");
6
+ const StoreValue_1 = require("./StoreValue");
7
+ const TempValue_1 = require("./TempValue");
8
+ const VoidValue_1 = require("./VoidValue");
9
+ class FunctionValue extends VoidValue_1.VoidValue {
10
+ constructor(scope, name, paramNames, paramStores, body, c) {
11
+ super(scope);
12
+ this.constant = true;
13
+ this.macro = true;
14
+ this.bundled = false;
15
+ this.name = name;
16
+ this.paramNames = paramNames;
17
+ this.paramStores = paramStores;
18
+ this.body = body;
19
+ this.c = c;
20
+ this.callSize = paramStores.length + 2;
21
+ scope.function = this;
22
+ this.createValues();
23
+ this.createInst();
24
+ }
25
+ createValues() {
26
+ this.addr = new LiteralValue_1.LiteralValue(this.scope, null);
27
+ this.temp = new StoreValue_1.StoreValue(this.scope, "f" + this.name);
28
+ this.ret = new StoreValue_1.StoreValue(this.scope, "r" + this.name);
29
+ }
30
+ typeof(scope) {
31
+ return [new LiteralValue_1.LiteralValue(scope, "function"), []];
32
+ }
33
+ createInst() {
34
+ this.inst = [
35
+ new instructions_1.AddressResolver(this.addr),
36
+ ...this.c.handle(this.scope, this.body)[1],
37
+ ];
38
+ this.inst.push(new instructions_1.SetCounterInstruction(this.ret));
39
+ }
40
+ normalReturn(scope, arg) {
41
+ const argInst = arg ? this.temp["="](scope, arg)[1] : [];
42
+ return [null, [...argInst, new instructions_1.SetCounterInstruction(this.ret)]];
43
+ }
44
+ normalCall(scope, args) {
45
+ if (!this.bundled)
46
+ this.scope.inst.push(...this.inst);
47
+ this.bundled = true;
48
+ const callAddressLiteral = new LiteralValue_1.LiteralValue(scope, null);
49
+ const inst = this.paramStores
50
+ .map((param, i) => param["="](scope, args[i])[1])
51
+ .reduce((s, c) => s.concat(c), [])
52
+ .concat(...this.ret["="](scope, callAddressLiteral)[1], new instructions_1.JumpInstruction(this.addr, instructions_1.EJumpKind.Always), new instructions_1.AddressResolver(callAddressLiteral));
53
+ return [this.temp, inst];
54
+ }
55
+ inlineReturn(scope, arg) {
56
+ const argInst = arg ? this.inlineTemp["="](scope, arg)[1] : [];
57
+ return [null, [...argInst, new instructions_1.ReturnInstruction(this.inlineEnd)]];
58
+ }
59
+ inlineCall(scope, args) {
60
+ // create return value
61
+ this.inlineTemp = new TempValue_1.TempValue(scope);
62
+ this.inlineEnd = new LiteralValue_1.LiteralValue(scope, null);
63
+ // make a copy of the function scope
64
+ const fnScope = this.scope.copy();
65
+ // hard set variables within the function scope
66
+ this.paramNames.forEach((name, i) => fnScope.hardSet(name, args[i]));
67
+ this.tryingInline = true;
68
+ let inst = this.c.handle(fnScope, this.body)[1];
69
+ this.tryingInline = false;
70
+ // removing useless instruction
71
+ // get the last instructions
72
+ // const [jump] = inst.slice(-1);
73
+ // if (jump instanceof JumpInstruction) {
74
+ // // remove useless jump
75
+ // if (jump.args[1] === this.inlineEnd) inst.pop();
76
+ // }
77
+ inst.push(new instructions_1.AddressResolver(this.inlineEnd));
78
+ // return the function value
79
+ return [this.inlineTemp, inst];
80
+ }
81
+ call(scope, args) {
82
+ if (args.length !== this.paramStores.length)
83
+ throw new Error("Cannot call: argument count not matching.");
84
+ const inlineCall = this.inlineCall(scope, args);
85
+ const inlineSize = inlineCall[1].filter(i => !i.hidden).length;
86
+ if (this.inline || inlineSize <= this.callSize)
87
+ return inlineCall;
88
+ return this.normalCall(scope, args);
89
+ }
90
+ return(scope, arg) {
91
+ if (arg && arg.macro) {
92
+ this.inline = true;
93
+ return [null, []];
94
+ }
95
+ if (this.inline || this.tryingInline)
96
+ return this.inlineReturn(scope, arg);
97
+ return this.normalReturn(scope, arg);
98
+ }
99
+ eval(scope) {
100
+ return [this, []];
101
+ }
102
+ }
103
+ exports.FunctionValue = FunctionValue;
104
104
  //# sourceMappingURL=FunctionValue.js.map
@@ -1,12 +1,12 @@
1
- import { IScope, IBindableValue, TLiteral, TValueInstructions, IValue } from "../types";
2
- import { BaseValue } from ".";
3
- export declare class LiteralValue extends BaseValue implements IBindableValue {
4
- data: TLiteral;
5
- constant: boolean;
6
- constructor(scope: IScope, data: TLiteral);
7
- eval(scope: IScope): TValueInstructions;
8
- toString(): string;
9
- get(scope: IScope, name: IValue): TValueInstructions;
10
- get num(): number;
11
- typeof(scope: IScope): TValueInstructions;
12
- }
1
+ import { IScope, IBindableValue, TLiteral, TValueInstructions, IValue } from "../types";
2
+ import { BaseValue } from ".";
3
+ export declare class LiteralValue extends BaseValue implements IBindableValue {
4
+ data: TLiteral;
5
+ constant: boolean;
6
+ constructor(scope: IScope, data: TLiteral);
7
+ eval(scope: IScope): TValueInstructions;
8
+ toString(): string;
9
+ get(scope: IScope, name: IValue): TValueInstructions;
10
+ get num(): number;
11
+ typeof(scope: IScope): TValueInstructions;
12
+ }