canonical type resolver, handler dispatch, file-scoped mangling#17
Open
canonical type resolver, handler dispatch, file-scoped mangling#17
Conversation
7b5e2e3 to
6694473
Compare
6694473 to
6db7223
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Architecture improvements: canonical type resolver, handler dispatch, file-scoped mangling
Summary
Three independent improvements to the codegen infrastructure:
Canonical type resolver — Replace 8+ divergent TS-to-LLVM type mapping functions with one
canonicalTypeToLlvmfunction. FixparamIsInterfacebeing hardcoded tofalseat call sites andgetClassTypereturningi32*instead ofi8*.Handler dispatch refactor — Extract the
generate()method's dispatch logic into a separatedispatchHandlers()method with documented priority ordering.File-scoped function mangling — Add
sourceFiletoFunctionNode/ClassNodeAST nodes. Non-exported functions in multi-file native compilation get file-scoped names (_cs_filename_func) to prevent cross-file collisions.Changes
Shard 1: Canonical Type Resolver
canonicalTypeToLlvm(tsType, mode, isEnum, isInterface, fieldName)totype-system.tstsTypeToLlvm,mapParamTypeToLLVM,mapReturnTypeToLLVM,tsTypeToLlvmJsonas thin wrappersparamIsInterface: falsehardcoding incalls.ts(3 call sites) — now usesinterfaceStructGenHasInterface()getClassType()returningi32*instead ofi8*intype-context.tsShard 2: Handler Dispatch
generate()intodispatchHandlers()inmember.tsShard 3: File-Scoped Mangling
sourceFile?: stringtoFunctionNodeandClassNodeinast/types.tssourceFilein native parser (parser-native/transformer.ts)exportedNames: Set<string>fromast.exportsinLLVMGeneratormangleUserName(name, sourceFile?)— non-exported functions get_cs_${fileSlug}_${name}sourceFilethroughfunction-generator.tsandcalls.tsKnown limitations
class.tsdon't threadsourceFileyetsourceFile(only matters for multi-file native compilation)handlers[i](...))Test plan