imxc 0.6.10 → 0.6.11
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/dist/init.js +1 -1
- package/dist/lowering.d.ts +1 -0
- package/dist/lowering.js +28 -0
- package/dist/templates/custom.js +1 -1
- package/dist/templates/hotreload.js +1 -1
- package/dist/templates/index.js +1 -1
- package/package.json +2 -2
package/dist/init.js
CHANGED
|
@@ -39,7 +39,7 @@ export function addToProject(projectDir) {
|
|
|
39
39
|
console.log(' include(FetchContent)');
|
|
40
40
|
console.log(' FetchContent_Declare(imx');
|
|
41
41
|
console.log(' GIT_REPOSITORY https://github.com/bgocumlu/imx.git');
|
|
42
|
-
console.log(' GIT_TAG v0.6.
|
|
42
|
+
console.log(' GIT_TAG v0.6.11');
|
|
43
43
|
console.log(' )');
|
|
44
44
|
console.log(' FetchContent_MakeAvailable(imx)');
|
|
45
45
|
console.log(' include(ImxCompile)');
|
package/dist/lowering.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ import type { IRComponent, IRStateSlot } from './ir.js';
|
|
|
5
5
|
interface LoweringContext {
|
|
6
6
|
stateVars: Map<string, IRStateSlot>;
|
|
7
7
|
setterMap: Map<string, string>;
|
|
8
|
+
localAliases: Map<string, ts.Expression>;
|
|
8
9
|
propsParam: string | null;
|
|
9
10
|
propsFieldTypes: Map<string, string | 'callback'>;
|
|
10
11
|
externalInterfaces?: Map<string, Map<string, string | 'callback'>>;
|
package/dist/lowering.js
CHANGED
|
@@ -62,6 +62,7 @@ export function lowerComponent(parsed, validation, externalInterfaces) {
|
|
|
62
62
|
const ctx = {
|
|
63
63
|
stateVars,
|
|
64
64
|
setterMap,
|
|
65
|
+
localAliases: new Map(),
|
|
65
66
|
propsParam,
|
|
66
67
|
propsFieldTypes,
|
|
67
68
|
externalInterfaces,
|
|
@@ -73,6 +74,7 @@ export function lowerComponent(parsed, validation, externalInterfaces) {
|
|
|
73
74
|
// Find return statement and lower its JSX
|
|
74
75
|
const body = [];
|
|
75
76
|
if (func.body) {
|
|
77
|
+
collectLocalAliases(func.body, ctx);
|
|
76
78
|
const returnStmt = func.body.statements.find(ts.isReturnStatement);
|
|
77
79
|
if (returnStmt && returnStmt.expression) {
|
|
78
80
|
lowerJsxExpression(returnStmt.expression, body, ctx);
|
|
@@ -87,6 +89,25 @@ export function lowerComponent(parsed, validation, externalInterfaces) {
|
|
|
87
89
|
body,
|
|
88
90
|
};
|
|
89
91
|
}
|
|
92
|
+
function collectLocalAliases(body, ctx) {
|
|
93
|
+
for (const stmt of body.statements) {
|
|
94
|
+
if (ts.isReturnStatement(stmt)) {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
if (!ts.isVariableStatement(stmt)) {
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
if ((stmt.declarationList.flags & ts.NodeFlags.Const) === 0) {
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
for (const decl of stmt.declarationList.declarations) {
|
|
104
|
+
if (!ts.isIdentifier(decl.name) || !decl.initializer) {
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
ctx.localAliases.set(decl.name.text, decl.initializer);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
90
111
|
function normalizePropTypeText(typeText) {
|
|
91
112
|
const trimmed = typeText.trim().replace(/\s*\|\s*undefined$/, '');
|
|
92
113
|
if (trimmed === 'number')
|
|
@@ -209,6 +230,10 @@ export function exprToCpp(node, ctx) {
|
|
|
209
230
|
if (ctx.stateVars.has(name)) {
|
|
210
231
|
return `${name}.get()`;
|
|
211
232
|
}
|
|
233
|
+
const alias = ctx.localAliases.get(name);
|
|
234
|
+
if (alias) {
|
|
235
|
+
return exprToCpp(alias, ctx);
|
|
236
|
+
}
|
|
212
237
|
if (name === 'resetLayout') {
|
|
213
238
|
return 'imx_reset_layout';
|
|
214
239
|
}
|
|
@@ -1264,6 +1289,9 @@ function inferExprType(expr, ctx) {
|
|
|
1264
1289
|
const slot = ctx.stateVars.get(expr.text);
|
|
1265
1290
|
if (slot)
|
|
1266
1291
|
return slot.type;
|
|
1292
|
+
const alias = ctx.localAliases.get(expr.text);
|
|
1293
|
+
if (alias)
|
|
1294
|
+
return inferExprType(alias, ctx);
|
|
1267
1295
|
}
|
|
1268
1296
|
// Property access: props.name -> look up field type if available
|
|
1269
1297
|
if (ts.isPropertyAccessExpression(expr)) {
|
package/dist/templates/custom.js
CHANGED
package/dist/templates/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "imxc",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.11",
|
|
4
4
|
"description": "Compiler for IMX — compiles React-like .tsx to native Dear ImGui C++",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"test:watch": "vitest",
|
|
16
16
|
"prepublishOnly": "npm run build"
|
|
17
17
|
},
|
|
18
|
-
"keywords": ["imgui", "react", "tsx", "native", "gui", "compiler", "codegen"],
|
|
18
|
+
"keywords": ["imgui", "react", "tsx", "native", "gui", "compiler", "codegen"],
|
|
19
19
|
"license": "MIT",
|
|
20
20
|
"dependencies": {
|
|
21
21
|
"typescript": "^5.8.0"
|