From 5595b1d0e606fae6fe42b034b5a104b320961e9b Mon Sep 17 00:00:00 2001 From: cs01 Date: Mon, 9 Mar 2026 22:21:09 -0700 Subject: [PATCH] fix: add missing setvariabletype in array filter, map, reduce, some, every, includes, shift Co-Authored-By: Claude Opus 4.6 --- src/codegen/stdlib/response.ts | 4 +++- src/codegen/types/collections/array/iteration.ts | 5 +++-- src/codegen/types/collections/array/reorder.ts | 1 + src/codegen/types/collections/array/search-predicate.ts | 6 ++++++ 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/codegen/stdlib/response.ts b/src/codegen/stdlib/response.ts index d491334b..19f841b0 100644 --- a/src/codegen/stdlib/response.ts +++ b/src/codegen/stdlib/response.ts @@ -30,6 +30,7 @@ interface ResponseGeneratorContext { setVariableType(name: string, type: string): void; interfaceStructGen?: InterfaceStructGenerator; interfaceStructGenHasInterface(name: string): boolean; + setUsesJson(value: boolean): void; } export class ResponseGenerator { @@ -68,7 +69,7 @@ export class ResponseGenerator { * @param responsePtr - LLVM register holding Response* */ generateJson(responsePtr: string): string { - // Get the body string first + this.ctx.setUsesJson(true); const bodyPtr = this.generateText(responsePtr); // Parse JSON using cJSON library (same as JSON.parse()) @@ -117,6 +118,7 @@ export class ResponseGenerator { * @param interfaceDef - Interface definition with properties */ generateTypedJson(responsePtr: string, typeName: string, interfaceDef: InterfaceDefInfo): string { + this.ctx.setUsesJson(true); const alreadyDefined = this.ctx.interfaceStructGen?.hasInterface(typeName); if (!this.generatedStructs.has(typeName) && !alreadyDefined) { diff --git a/src/codegen/types/collections/array/iteration.ts b/src/codegen/types/collections/array/iteration.ts index 3fc5b5d6..9a687130 100644 --- a/src/codegen/types/collections/array/iteration.ts +++ b/src/codegen/types/collections/array/iteration.ts @@ -154,6 +154,7 @@ function generateNumericArrayFilter( gen.emitBr(checkLabel); gen.emitLabel(endLabel); + gen.setVariableType(resultArrayPtr, "%Array*"); return resultArrayPtr; } @@ -580,8 +581,7 @@ function generateStringArrayReduce( gen.emitBr(checkLabel); gen.emitLabel(endLabel); - const finalAcc = gen.nextTemp(); - gen.emit(`${finalAcc} = load i8*, i8** ${accPtr}`); + const finalAcc = gen.emitLoad("i8*", accPtr); return finalAcc; } @@ -737,6 +737,7 @@ function generateNumericArrayMap( gen.emitBr(checkLabel); gen.emitLabel(endLabel); + gen.setVariableType(resultArrayPtr, "%Array*"); return resultArrayPtr; } diff --git a/src/codegen/types/collections/array/reorder.ts b/src/codegen/types/collections/array/reorder.ts index 002fb96b..00b9873c 100644 --- a/src/codegen/types/collections/array/reorder.ts +++ b/src/codegen/types/collections/array/reorder.ts @@ -236,6 +236,7 @@ function generateNumericArrayShift(gen: IGeneratorContext, arrayPtr: string): st gen.emitLabel(endLabel); const result = gen.nextTemp(); gen.emit(`${result} = phi double [ 0.0, %${emptyLabel} ], [ ${firstElem}, %${notEmptyLabel} ]`); + gen.setVariableType(result, "double"); return result; } diff --git a/src/codegen/types/collections/array/search-predicate.ts b/src/codegen/types/collections/array/search-predicate.ts index 8aea656a..bcd10c6b 100644 --- a/src/codegen/types/collections/array/search-predicate.ts +++ b/src/codegen/types/collections/array/search-predicate.ts @@ -289,6 +289,7 @@ function generateNumericArraySome( const resultI32 = gen.emitLoad("i32", resultPtr); const result = gen.nextTemp(); gen.emit(`${result} = sitofp i32 ${resultI32} to double`); + gen.setVariableType(result, "double"); return result; } @@ -361,6 +362,7 @@ function generateStringArraySome( const resultI32 = gen.emitLoad("i32", resultPtr); const result = gen.nextTemp(); gen.emit(`${result} = sitofp i32 ${resultI32} to double`); + gen.setVariableType(result, "double"); return result; } @@ -463,6 +465,7 @@ function generateNumericArrayEvery( const resultI32 = gen.emitLoad("i32", resultPtr); const result = gen.nextTemp(); gen.emit(`${result} = sitofp i32 ${resultI32} to double`); + gen.setVariableType(result, "double"); return result; } @@ -535,6 +538,7 @@ function generateStringArrayEvery( const resultI32 = gen.emitLoad("i32", resultPtr); const result = gen.nextTemp(); gen.emit(`${result} = sitofp i32 ${resultI32} to double`); + gen.setVariableType(result, "double"); return result; } @@ -628,6 +632,7 @@ function generateIntArrayIncludes( gen.emit(`${resultI32} = phi i32 [ 0, %${checkLabel} ], [ 1, %${foundLabel} ]`); const result = gen.nextTemp(); gen.emit(`${result} = sitofp i32 ${resultI32} to double`); + gen.setVariableType(result, "double"); return result; } @@ -691,5 +696,6 @@ function generateStringArrayIncludes( gen.emit(`${resultI32} = phi i32 [ 0, %${checkLabel} ], [ 1, %${foundLabel} ]`); const result = gen.nextTemp(); gen.emit(`${result} = sitofp i32 ${resultI32} to double`); + gen.setVariableType(result, "double"); return result; }