Skip to content

Commit 0cb66bf

Browse files
committed
Fix bootstrap
1 parent 2109851 commit 0cb66bf

File tree

6 files changed

+195
-175
lines changed

6 files changed

+195
-175
lines changed

bootstrap/ir.ot

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ function lowerProgramToIr(ast: any): IrModule {
208208

209209
let ra = createRegisterAllocator();
210210
let entry = createIrBlock("entry");
211-
211+
212212
// Process top-level statements
213213
let i = 0;
214214
while (i < ast.body.length) {
@@ -309,21 +309,21 @@ function lowerExpression(block: IrBlock, node: any, ra: RegisterAllocator, dest:
309309
emitConst(block, dest, node.value);
310310
return dest;
311311
}
312-
312+
313313
if (node.type == "Identifier") {
314314
// For now, just load from slot 0 (simplified)
315315
emitLoadLocal(block, dest, 0);
316316
return dest;
317317
}
318-
318+
319319
if (node.type == "BinaryExpression") {
320320
let left = lowerExpression(block, node.left, ra, null);
321321
let right = lowerExpression(block, node.right, ra, null);
322322
let opcode = getOpCodeForBinaryOp(node.operator);
323323
emitBinaryOp(block, opcode as IrOpCode, dest, left, right);
324324
return dest;
325325
}
326-
326+
327327
if (node.type == "CallExpression") {
328328
let argc = node.arguments.length;
329329
let i = 0;
@@ -335,7 +335,7 @@ function lowerExpression(block: IrBlock, node: any, ra: RegisterAllocator, dest:
335335
emitCall(block, dest, callee, argc);
336336
return dest;
337337
}
338-
338+
339339
return dest;
340340
}
341341

bootstrap/pipeline.ot

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ function computeBytecodeHash(code: ByteStream | { bytecode: ByteStream }): numbe
180180
// ============================================================================
181181

182182
function measureCompilation(source: string): { lexerTime: number, parserTime: number, irTime: number, codegenTime: number, totalTime: number, bytecodeSize: number } {
183-
let metrics: { lexerTime: number, parserTime: number, irTime: number, codegenTime: number, totalTime: number, bytecodeSize: number };
183+
let metrics: { lexerTime: number, parserTime: number, irTime: number, codegenTime: number, totalTime: number, bytecodeSize: number } = { lexerTime: 0, parserTime: 0, irTime: 0, codegenTime: 0, totalTime: 0, bytecodeSize: 0 };
184184

185185
let t0: number = Date.now();
186186
let tokens: Array<Token> = tokenize(source);

scripts/bootstrap_verify.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ verify_bytecode_determinism() {
103103

104104
# Run the existing test suite which verifies hash determinism
105105
cd "$PROJECT_ROOT"
106-
"$OITE_BIN" tests/compiler/test_pipeline.ot 2>&1 | tee "$stage_dir/test_output.log"
106+
"$OITE_BIN" tests/test_pipeline.ot 2>&1 | tee "$stage_dir/test_output.log"
107107

108108
# Check if the test passed
109109
if grep -q "Hash Match Verification: PASS" "$stage_dir/test_output.log"; then

src/compiler/mod.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2207,6 +2207,18 @@ impl Codegen {
22072207
}
22082208
}
22092209
}
2210+
Expr::TsAs(ts_as) => {
2211+
// TypeScript `as` type assertion - evaluate inner expression (no runtime effect)
2212+
self.gen_expr(&ts_as.expr);
2213+
}
2214+
Expr::TsTypeAssertion(ts_assert) => {
2215+
// TypeScript type assertion `<Type>expr` - evaluate inner expression
2216+
self.gen_expr(&ts_assert.expr);
2217+
}
2218+
Expr::TsNonNull(ts_non_null) => {
2219+
// TypeScript non-null assertion `expr!` - evaluate inner expression
2220+
self.gen_expr(&ts_non_null.expr);
2221+
}
22102222
_ => {}
22112223
}
22122224
}

tests/test_compile_types.ot

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
require("../bootstrap/pipeline");
2+
3+
// Test modules without require statements
4+
let modules = [
5+
"bootstrap/types.ot",
6+
"bootstrap/ir.ot",
7+
"bootstrap/lexer.ot"
8+
];
9+
10+
let i = 0;
11+
while (i < modules.length) {
12+
let source = fs.readFileSync(modules[i], "utf8");
13+
console.log("Compiling " + modules[i] + " (" + source.length + " chars)...");
14+
let result = compileToBytecode(source);
15+
if (result == null) {
16+
console.log(" FAIL: returned null");
17+
} else {
18+
console.log(" PASS: " + result.length + " bytes");
19+
}
20+
i = i + 1;
21+
}
22+
console.log("Done");

0 commit comments

Comments
 (0)