{"id":13568321,"url":"https://github.com/ASDAlexander77/TypeScriptCompiler","last_synced_at":"2025-04-04T04:31:00.743Z","repository":{"id":37741082,"uuid":"326540525","full_name":"ASDAlexander77/TypeScriptCompiler","owner":"ASDAlexander77","description":"TypeScript Compiler (by LLVM)","archived":false,"fork":false,"pushed_at":"2025-03-13T18:08:24.000Z","size":9363,"stargazers_count":676,"open_issues_count":3,"forks_count":35,"subscribers_count":16,"default_branch":"main","last_synced_at":"2025-03-13T18:43:20.947Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ASDAlexander77.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["ASDAlexander77"],"custom":["https://www.paypal.com/donate/?hosted_button_id=BBJ4SQYLA6D2L"]}},"created_at":"2021-01-04T01:45:14.000Z","updated_at":"2025-03-13T18:40:12.000Z","dependencies_parsed_at":"2023-12-16T20:24:16.294Z","dependency_job_id":"8627cfe4-ea3c-4267-ad92-b6da3a57bdfd","html_url":"https://github.com/ASDAlexander77/TypeScriptCompiler","commit_stats":null,"previous_names":[],"tags_count":72,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ASDAlexander77%2FTypeScriptCompiler","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ASDAlexander77%2FTypeScriptCompiler/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ASDAlexander77%2FTypeScriptCompiler/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ASDAlexander77%2FTypeScriptCompiler/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ASDAlexander77","download_url":"https://codeload.github.com/ASDAlexander77/TypeScriptCompiler/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247123072,"owners_count":20887259,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-01T14:00:23.481Z","updated_at":"2025-04-04T04:30:55.734Z","avatar_url":"https://github.com/ASDAlexander77.png","language":"C++","readme":"# TypeScript Native Compiler\n###### Powered by [![LLVM|MLIR](https://llvm.org/img/LLVM-Logo-Derivative-1.png)](https://llvm.org/)\n\n[![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/donate/?hosted_button_id=BBJ4SQYLA6D2L)\n\n# Build\n\n[![Test Build (Windows)](https://github.com/ASDAlexander77/TypeScriptCompiler/actions/workflows/cmake-test-release-win.yml/badge.svg)](https://github.com/ASDAlexander77/TypeScriptCompiler/actions/workflows/cmake-test-release-win.yml)\n[![Test Build (Linux)](https://github.com/ASDAlexander77/TypeScriptCompiler/actions/workflows/cmake-test-release-linux.yml/badge.svg)](https://github.com/ASDAlexander77/TypeScriptCompiler/actions/workflows/cmake-test-release-linux.yml)\n\n# What's new \n- Migrated to LLVM 19.1.3\n\n- improved ```generating debug information``` more info here: [Wiki:How-To](https://github.com/ASDAlexander77/TypeScriptCompiler/wiki/How-To#compile-and-debug-with-visual-studio-code)\n```cmd\ntsc --di --opt_level=0 --emit=exe example.ts\n```\n\n- cast from Union Types\n```TypeScript\nlet a: string | number = 5;\nlet b: string = a; // b is \"5\"\n```\n\n- All functions without types are generics\n```TypeScript\nstatic class Array {\n    public of(...arg) {\n        return arg;\n    }\n\n    public from(arrayLike) {\n        return [...arrayLike];\n    }       \n}\n```\n\n- Native types aliases\n```TypeScript\n// byte, short, ushort, int, uint, long, ulong, char, i8, i16, i32, i64,\n// u8, u16, u32, u64, s8, s16, s32, s64, f16, f32, f64, f128, half, float, double, index\n\nconst s1: s8 = -1;\nconst s2: u16 = 2;\nconst s3: i32 = 3;\nconst s4: f64 = 1.0;\n```\n- Reference types (aka pointers)\n```TypeScript\nlet a = [1, 2, 3];\nconst view: Reference\u003cTypeOf\u003c1\u003e\u003e = ReferenceOf(a[1]);\nconst data = LoadReference(view);\nconst data1 = LoadReference(view[1]);\n```\n- Accessor\n```TypeScript\nclass Person {\n    static accessor sname: string;\n    accessor name = \"no value\";\n    constructor(name: string) {\n        this.name = name;\n    }\n}\n```\n\n- Explicit Resource Management \n```TypeScript\nfunction main()\n{\n    using file = new TempFile(\".some_temp_file\");\n    print(\"done.\");\n}\n\nclass TempFile {\n    #path: string;\n    #handle: number;\n    constructor(path: string) {\n        this.#path = path;\n        this.#handle = 1;\n    }\n    // other methods\n    [Symbol.dispose]() {\n        // Close the file and delete it.\n        this.#handle = 0;\n        print(\"dispose\");\n    }\n}\n```\n\n- [more...](https://github.com/ASDAlexander77/TypeScriptCompiler/wiki/What's-new)\n\n# Planning\n- [x] Migrating to LLVM 17.0.2\n- [x] Shared libraries\n- [ ] JavaScript Built-in classes library\n\n# Demo \n[(click here)](https://github.com/ASDAlexander77/TypeScriptCompiler/releases/)\n\n[![Demo](https://raw.githubusercontent.com/ASDAlexander77/ASDAlexander77.github.io/main/img/tsc_emit.gif)](https://github.com/ASDAlexander77/TypeScriptCompiler/releases/)\n\n\n# Try it \n[(click here)](https://godbolt.org/#z:OYLghAFBqd5TKALEBjA9gEwKYFFMCWALugE4A0BIEAZgQDbYB2AhgLbYgDkAjF%2BTXRMiAZVQtGIHgA4BQogFUAztgAKAD24AGfgCsp5eiyagiATwAO2JalIELRcisaoiBIdWaYAwunoBXNiYQACZyLwAZAiZsADlAgCNsUhAAZh5yC3QlYncmXwCg0Mzs3KEomPi2JJT0p2wXNyERIhZSIgLA4LDnbFc8lraiCrjE5LSMpVb2zqKe6eHo0erx9IBKJ3R/UlROLhYEqdIWVwBqVCMlJVOAEWwLIY5hU4BSAHYAIRetAEFT//OQiO/lcZAgFn8CXoBFQp1YHBApyO0WAa1en3eN2%2BP2xANOFjswli7GwEDWiIAbugCJh0V9fni8QTokQIC8QiE7g92k8iHCSYj2SFXiEPqciEgCEoAHTw7BrF6pel/AGY7G4gEHI4nPnM4QAWWw2DcJjJlOpmEVYoA9NbTmx/FNTklTgQ2BZGLzsLToqccHYKd7zpcVEp1W8sb9sRcWFdTj9UBh/MIUVzHsw%2Bdh1EQvNc0zyM3SNf8MExgaDSGSiwzGf8lP4rJWhQmkymTKdjLSfv5CCbgEKFUrTrbAWWiKQQSRSNdff6CIHaTGrtZ7Y6%2BeJ6PQkQ3kmTi%2BjIzia/89URDcaUWbTlSadWVbXT2yOQAVJDYeOJrZt4C3e7p54cMa1zYCcSCnPqQiYCwZgdnyPBaOw0oDla%2B5qlGx6nMAzDJCwOYAEr3GQRBKFeN60u8yq1iehKskKADi2HHH2HafsmzGkIR7QytKSEcoOlGqhG4aHtiNDJv0Qj2iw0RVhR%2B6MHyODckQvKIvmKkZlaw52ugADW4roOcHG4e%2BLCnBxNDJMwuwGR2TAdoc446uKljYPuSn/nyio3HC2AAO4fq2fbqbye5DiOem2bYIE5nZtKxjkwD2WZTBCAAtFqTlnPWCRLmGGEeQWwjSqexIcGFAn/IVGnFae559hV%2B62tVvLSlhMRMdgBFZFxFXaacySkGQiItYWUpwugfLoDQLlWIFX7BX%2BRWOOcxipXyJy7HG7U4fhnHEcJXAbPQ3AAKz8MEXA6OQ6DcM%2BrliHYDinMSbiBkiWw7O%2B7LpPwRDaEdGy6WkqTSqk4MQ5DkMAGyGNwAAs/BsCAbzw2DqTSJjqTw/DbzQ1oWjw%2BQl3XbdXD8EoIBaOQ/1XUd5BwLAKBZn0/hTpQ1BtMASiqMYDQiEg6B%2BZdfDkBg7oMLheS8zE9AC0LJP8OLFgMOMxGoAA%2BloWsa6kp0a8AqBi%2BgEuMKQZV7ErJsq2bADybPy8LAPhOofQ/KQ3PcPwLOoC0hCXfwgjCGIEicDwRNB4oKgaM7%2BgZEYJggOYVg2E9jjQoc8AbOgDh5JT5M3YGpB2DglOQBsSifbsBhTP7Mv84LTu8PwfnHBY3B8MdZ0Xc7ZO4K7qBs2Qpz3VYj32Hyr3zu%2Bvim8kpxaNKi8EtgeunAAUgAks%2BpwQHR3hohAo/YOPz1T4G5CnPgxDDz9PBrH9ANrBsb4sP61Bd1wiPkMjISndK0NoY8GAdDU6p0QipAAJyQKAcTXuXsnBUxpk/IGaR/4Yz1uAngeNIHYLeG8OGXBUg9zpjdBBtMdAbEZsgNA1tVYUCoBAZW9Ck42B1trPWBsjY4ApDCbAAA1Ag/lbZWBFoHBgOZpzUASM7BI0Q2hmA7vwORrBSBmFtgkXQfRaai3FryW2TB6CKNITgBI/hgDeAkPQfOoscBsGMMASQJiCAcX6IGfO10fZsz2KLFkDRnYZ2OGo3wOBnbjjdEojYNAjDc0EcI0RSi5DBw3GHCO8hlBqE0KQuOhgHFJ1cqnCehgCCZ3LjdXOQIEHoCLiXawWd6iNDyJ4JgPg/BdAMJEJYVQagGCyDkJo%2BQ2lFAyH0soTARjdPGJMBo2iBgLFmMEaZjTmgLAmWMFIkx5lDMWU4VZXT1lSArlXMOn9zpwNIWTEeD1bATxelLd6s8bbz0XsvDia8t47z3gfXe18pwinWI/Omz9yCv3fmScgwN0jShCNIdI4d4bSEgajRFWhZAnS/iQ0mCDKbUwofTahEAUAuI5kwuhZsLZ3WuWnO5b0Z5kueUvEqbzTob23rvfeD9wi9jIDSAwkcQ6SHDkkqOmTY41xmRJYIEAvALI6S0tZKwNklH6XkWVIzSgDIVT0pZsyVlDDVQ03VTBBjtC1VM3Z%2Brtk1z2ZUA598aYcWwLyrQpzMX8DJhECI/D9SnE3nhU4cS/Lz2PqfSe9y6Vz1IAvRlK93lsq%2BYfX5t8IEZFOI8%2Bh/z76Asoag8G6MoYFtSIQ7%2BisyEFxxcgoFn8QhurLdmwG5Ai45A8PDIAA%3D%3D)\n\n[![Compiler Explorer](https://asdalexander77.github.io/img/god_bolt_tsc_native.jpg)](https://godbolt.org/#z:OYLghAFBqd5TKALEBjA9gEwKYFFMCWALugE4A0BIEAZgQDbYB2AhgLbYgDkAjF%2BTXRMiAZVQtGIHgA4BQogFUAztgAKAD24AGfgCsp5eiyagiATwAO2JalIELRcisaoiBIdWaYAwunoBXNiYQACZyLwAZAiZsADlAgCNsUhAAZh5yC3QlYncmXwCg0Mzs3KEomPi2JJT0p2wXNyERIhZSIgLA4LDnbFc8lraiCrjE5LSMpVb2zqKe6eHo0erx9IBKJ3R/UlROLhYEqdIWVwBqVCMlJVOAEWwLIY5hU4BSAHYAIRetAEFT//OQiO/lcZAgFn8CXoBFQp1YHBApyO0WAa1en3eN2%2BP2xANOFjswli7GwEDWiIAbugCJh0V9fni8QTokQIC8QiE7g92k8iHCSYj2SFXiEPqciEgCEoAHTw7BrF6pel/AGY7G4gEHI4nPnM4QAWWw2DcJjJlOpmEVYoA9NbTmx/FNTklTgQ2BZGLzsLToqccHYKd7zpcVEp1W8sb9sRcWFdTj9UBh/MIUVzHsw%2Bdh1EQvNc0zyM3SNf8MExgaDSGSiwzGf8lP4rJWhQmkymTKdjLSfv5CCbgEKFUrTrbAWWiKQQSRSNdff6CIHaTGrtZ7Y6%2BeJ6PQkQ3kmTi%2BjIzia/89URDcaUWbTlSadWVbXT2yOQAVJDYeOJrZt4C3e7p54cMa1zYCcSCnPqQiYCwZgdnyPBaOw0oDla%2B5qlGx6nMAzDJCwOYAEr3GQRBKFeN60u8yq1iehKskKADi2HHH2HafsmzGkIR7QytKSEcoOlGqhG4aHtiNDJv0Qj2iw0RVhR%2B6MHyODckQvKIvmKkZlaw52ugADW4roOcHG4e%2BLCnBxNDJMwuwGR2TAdoc446uKljYPuSn/nyio3HC2AAO4fq2fbqbye5DiOem2bYIE5nZtKxjkwD2WZTBCAAtFqTlnPWCRLmGGEeQWwjSqexIcGFAn/IVGnFae559hV%2B62tVvLSlhMRMdgBFZFxFXaacySkGQiItYWUpwugfLoDQLlWIFX7BX%2BRWOOcxipXyJy7HG7U4fhnHEcJXAbPQ3AAKz8MEXA6OQ6DcM%2BrliHYDinMSbiBkiWw7O%2B7LpPwRDaEdGy6WkqTSqk4MQ5DkMAGyGNwAAs/BsCAbzw2DqTSJjqTw/DbzQ1oWjw%2BQl3XbdXD8EoIBaOQ/1XUd5BwLAKBZn0/hTpQ1BtMASiqMYDQiEg6B%2BZdfDkBg7oMLheS8zE9AC0LJP8OLFgMOMxGoAA%2BloWsa6kp0a8AqBi%2BgEuMKQZV7ErJsq2bADybPy8LAPhOofQ/KQ3PcPwLOoC0hCXfwgjCGIEicDwRNB4oKgaM7%2BgZEYJggOYVg2E9jjQoc8AbOgDh5JT5M3YGpB2DglOQBsSifbsBhTP7Mv84LTu8PwfnHBY3B8MdZ0Xc7ZO4K7qBs2Qpz3VYj32Hyr3zu%2Bvim8kpxaNKi8EtgeunAAUgAks%2BpwQHR3hohAo/YOPz1T4G5CnPgxDDz9PBrH9ANrBsb4sP61Bd1wiPkMjISndK0NoY8GAdDU6p0QipAAJyQKAcTXuXsnBUxpk/IGaR/4Yz1uAngeNIHYLeG8OGXBUg9zpjdBBtMdAbEZsgNA1tVYUCoBAZW9Ck42B1trPWBsjY4ApDCbAAA1Ag/lbZWBFoHBgOZpzUASM7BI0Q2hmA7vwORrBSBmFtgkXQfRaai3FryW2TB6CKNITgBI/hgDeAkPQfOoscBsGMMASQJiCAcX6IGfO10fZsz2KLFkDRnYZ2OGo3wOBnbjjdEojYNAjDc0EcI0RSi5DBw3GHCO8hlBqE0KQuOhgHFJ1cqnCehgCCZ3LjdXOQIEHoCLiXawWd6iNDyJ4JgPg/BdAMJEJYVQagGCyDkJo%2BQ2lFAyH0soTARjdPGJMBo2iBgLFmMEaZjTmgLAmWMFIkx5lDMWU4VZXT1lSArlXMOn9zpwNIWTEeD1bATxelLd6s8bbz0XsvDia8t47z3gfXe18pwinWI/Omz9yCv3fmScgwN0jShCNIdI4d4bSEgajRFWhZAnS/iQ0mCDKbUwofTahEAUAuI5kwuhZsLZ3WuWnO5b0Z5kueUvEqbzTob23rvfeD9wi9jIDSAwkcQ6SHDkkqOmTY41xmRJYIEAvALI6S0tZKwNklH6XkWVIzSgDIVT0pZsyVlDDVQ03VTBBjtC1VM3Z%2Brtk1z2ZUA598aYcWwLyrQpzMX8DJhECI/D9SnE3nhU4cS/Lz2PqfSe9y6Vz1IAvRlK93lsq%2BYfX5t8IEZFOI8%2Bh/z76Asoag8G6MoYFtSIQ7%2BisyEFxxcgoFn8QhurLdmwG5Ai45A8PDIAA%3D%3D)\n\nChat Room\n---------\n\nWant to chat with other members of the TypeScriptCompiler community?\n\n[![Join the chat at https://gitter.im/ASDAlexander77/TypeScriptCompiler](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/ASDAlexander77/TypeScriptCompiler?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge)\n\n# Example\n\n```TypeScript\nabstract class Department {\n    constructor(public name: string) {}\n\n    printName(): void {\n        print(\"Department name: \" + this.name);\n    }\n\n    abstract printMeeting(): void; // must be implemented in derived classes\n}\n\nclass AccountingDepartment extends Department {\n    constructor() {\n        super(\"Accounting and Auditing\"); // constructors in derived classes must call super()\n    }\n\n    printMeeting(): void {\n        print(\"The Accounting Department meets each Monday at 10am.\");\n    }\n\n    generateReports(): void {\n        print(\"Generating accounting reports...\");\n    }\n}\n\nfunction main() {\n    let department: Department; // ok to create a reference to an abstract type\n    department = new AccountingDepartment(); // ok to create and assign a non-abstract subclass\n    department.printName();\n    department.printMeeting();\n    //department.generateReports(); // error: department is not of type AccountingDepartment, cannot access generateReports\n}\n```\n\nRun\n```cmd\ntsc --emit=jit --opt --shared-libs=TypeScriptRuntime.dll example.ts\n```\n\nResult\n```\nDepartment name: Accounting and Auditing\nThe Accounting Department meets each Monday at 10am.\n```\n\n## Run as JIT\n\n- with Garbage collection\n```cmd\ntsc --emit=jit --opt --shared-libs=TypeScriptRuntime.dll hello.ts\n```\n\n- without Garbage collection\n```cmd\ntsc --emit=jit --nogc hello.ts\n```\n\nFile ``hello.ts``\n\n```TypeScript\nfunction main() {\n    print(\"Hello World!\");\n}\n```\nResult\n```\nHello World!\n```\n\n## Compile as Binary Executable\n\n### On Windows\n\nFile ``tsc-compile.bat``\n```cmd\nset FILENAME=%1\nset GC_LIB_PATH=C:\\dev\\TypeScriptCompiler\\__build\\gc\\msbuild\\x64\\release\\Release\nset LLVM_LIB_PATH=C:\\dev\\TypeScriptCompiler\\__build\\llvm\\msbuild\\x64\\release\\Release\\lib\nset TSC_LIB_PATH=C:\\dev\\TypeScriptCompiler\\__build\\tsc\\windows-msbuild-release\\lib\nset TSCEXEPATH=C:\\dev\\TypeScriptCompiler\\__build\\tsc\\windows-msbuild-release\\bin\n%TSCEXEPATH%\\tsc.exe --opt --emit=exe %FILENAME%.ts\n```\nCompile \n```cmd\ntsc-compile.bat hello\n```\n\nRun\n```\nhello.exe\n```\n\nResult\n```\nHello World!\n```\n\n### On Linux (Ubuntu 20.04 and 22.04)\n\nFile ``tsc-compile.sh``\n```bash\nFILENAME=$1\nexport TSC_LIB_PATH=~/dev/TypeScriptCompiler/__build/tsc/linux-ninja-gcc-release/lib\nexport LLVM_LIB_PATH=~/dev/TypeScriptCompiler/3rdParty/llvm/release/lib\nexport GC_LIB_PATH=~/dev/TypeScriptCompiler/3rdParty/gc/release\nTSCEXEPATH=~/dev/TypeScriptCompiler/__build/tsc/linux-ninja-gcc-release/bin\n$TSCEXEPATH/tsc --emit=exe $FILENAME.ts --relocation-model=pic\n```\nCompile \n```bash\nsh -f tsc-compile.sh hello\n```\n\nRun\n```\n./hello\n```\n\nResult\n```\nHello World!\n```\n\n### Compiling as WASM\n### On Windows\nFile ``tsc-compile-wasm.bat``\n```cmd\nset FILENAME=%1\nset GC_LIB_PATH=C:\\dev\\TypeScriptCompiler\\__build\\gc\\msbuild\\x64\\release\\Release\nset LLVM_LIB_PATH=C:\\dev\\TypeScriptCompiler\\__build\\llvm\\msbuild\\x64\\release\\Release\\lib\nset TSC_LIB_PATH=C:\\dev\\TypeScriptCompiler\\__build\\tsc\\windows-msbuild-release\\lib\nC:\\dev\\TypeScriptCompiler\\__build\\tsc\\windows-msbuild-release\\bin\\tsc.exe --emit=exe --nogc -mtriple=wasm32-unknown-unknown %FILENAME%.ts\n```\nCompile \n```cmd\ntsc-compile-wasm.bat hello\n```\n\nRun ``run.html``\n```html\n\u003c!DOCTYPE html\u003e\n\u003chtml\u003e\n\n\u003chead\u003e\u003c/head\u003e\n\n\u003cbody\u003e\n    \u003cscript type=\"module\"\u003e\n        let buffer;\n        let buffer32;\n        let buffer64;\n        let bufferF64;\n        let heap;\n\n        let heap_base, heap_end, stack_low, stack_high;\n\n        const allocated = [];\n\n        const allocatedSize = (addr) =\u003e {\n            return allocated[\"\" + addr];\n        };\n\n        const setAllocatedSize = (addr, newSize) =\u003e {\n            allocated[\"\" + addr] = newSize;\n        };\n\n        const expand = (addr, newSize) =\u003e {\n\n            const aligned_newSize = newSize + (4 - (newSize % 4))\n\n            const end = addr + allocatedSize(addr);\n            const newEnd = addr + aligned_newSize;\n\n            for (const allocatedAddr in allocated) {\n                const beginAllocatedAddr = parseInt(allocatedAddr);\n                const endAllocatedAddr = beginAllocatedAddr + allocated[allocatedAddr];\n                if (beginAllocatedAddr != addr \u0026\u0026 addr \u003c endAllocatedAddr \u0026\u0026 newEnd \u003e beginAllocatedAddr) {\n                    return false;\n                }\n            }\n\n            setAllocatedSize(addr, aligned_newSize);\n            if (addr + aligned_newSize \u003e heap) heap = addr + aligned_newSize;\n            return true;\n        };\n\n        const endOf = (addr) =\u003e { while (buffer[addr] != 0) { addr++; if (addr \u003e heap_end) throw \"out of memory boundary\"; }; return addr; };\n        const strOf = (addr) =\u003e String.fromCharCode(...buffer.slice(addr, endOf(addr)));\n        const copyStr = (dst, src) =\u003e { while (buffer[src] != 0) buffer[dst++] = buffer[src++]; buffer[dst] = 0; return dst; };\n        const ncopy = (dst, src, count) =\u003e { while (count-- \u003e 0) buffer[dst++] = buffer[src++]; return dst; };\n        const append = (dst, src) =\u003e copyStr(endOf(dst), src);\n        const cmp = (addrL, addrR) =\u003e { while (buffer[addrL] != 0) { if (buffer[addrL] != buffer[addrR]) break; addrL++; addrR++; } return buffer[addrL] - buffer[addrR]; };\n        const prn = (str, addr) =\u003e { for (let i = 0; i \u003c str.length; i++) buffer[addr++] = str.charCodeAt(i); buffer[addr] = 0; return addr; };\n        const clear = (addr, size, val) =\u003e { for (let i = 0; i \u003c size; i++) buffer[addr++] = val; };\n        const aligned_alloc = (size) =\u003e { \n            const aligned_size = size + (4 - (size % 4)); \n            if ((heap + aligned_size) \u003e heap_end) throw \"out of memory\"; \n            setAllocatedSize(heap, aligned_size); \n            const heapCurrent = heap; \n            heap += aligned_size; \n            return heapCurrent; \n        };\n        const free = (addr) =\u003e delete allocated[\"\" + addr];\n        const realloc = (addr, size) =\u003e {\n            if (!expand(addr, size)) {\n                const newAddr = aligned_alloc(size);\n                ncopy(newAddr, addr, allocatedSize(addr));\n                free(addr);\n                return newAddr;\n            }\n\n            return addr;\n        }\n\n        const envObj = {\n            memory: new WebAssembly.Memory({ initial: 256 }),\n            table: new WebAssembly.Table({\n                initial: 0,\n                element: 'anyfunc',\n            }),\n            fmod: (arg1, arg2) =\u003e arg1 % arg2,\n            sqrt: (arg1) =\u003e Math.sqrt(arg1),\n            floor: (arg1) =\u003e Math.floor(arg1),\n            pow: (arg1, arg2) =\u003e Math.pow(arg1, arg2),\n            fabs: (arg1) =\u003e Math.abs(arg1),\n            _assert: (msg, file, line) =\u003e console.assert(false, strOf(msg), \"| file:\", strOf(file), \"| line:\", line, \" DBG:\", path),\n            puts: (arg) =\u003e output += strOf(arg) + '\\n',\n            strcpy: copyStr,\n            strcat: append,\n            strcmp: cmp,\n            strlen: (addr) =\u003e endOf(addr) - addr,\n            malloc: aligned_alloc,\n            realloc: realloc,\n            free: free,\n            memset: (addr, size, val) =\u003e clear(addr, size, val),\n            atoi: (addr, rdx) =\u003e parseInt(strOf(addr), rdx),\n            atof: (addr) =\u003e parseFloat(strOf(addr)),\n            sprintf_s: (addr, sizeOfBuffer, format, ...args) =\u003e {\n                const formatStr = strOf(format);\n                switch (formatStr) {\n                    case \"%d\": prn(buffer32[args[0] \u003e\u003e 2].toString(), addr); break;\n                    case \"%g\": prn(bufferF64[args[0] \u003e\u003e 3].toString(), addr); break;\n                    case \"%llu\": prn(buffer64[args[0] \u003e\u003e 3].toString(), addr); break;\n                    default: throw \"not implemented\"; \n                }\n\n                return 0;\n            },\n        }\n\n        const config = {\n            env: envObj,\n        };\n\n        WebAssembly.instantiateStreaming(fetch(\"./hello.wasm\"), config)\n            .then(results =\u003e {\n                const { main, __wasm_call_ctors, __heap_base, __heap_end, __stack_low, __stack_high } = results.instance.exports;\n                buffer = new Uint8Array(results.instance.exports.memory.buffer);\n                buffer32 = new Uint32Array(results.instance.exports.memory.buffer);\n                buffer64 = new BigUint64Array(results.instance.exports.memory.buffer);\n                bufferF64 = new Float64Array(results.instance.exports.memory.buffer);\n                heap = heap_base = __heap_base, heap_end = __heap_end, stack_low = __stack_low, stack_high = __stack_high;\n                try\n                {\n                    if (__wasm_call_ctors) __wasm_call_ctors();\n                    main();\n                }\n                catch (e)\n                {\n                    console.error(e);\n                }\n            });\n    \u003c/script\u003e\n\u003c/body\u003e\n\n\u003c/html\u003e\n```\n\n## Build\n\n### On Windows\n\n#### Requirements:\n\n- ``Visual Studio 2022``\n- 512GB of free space on disk\n\n\nFirst, precompile dependencies\n\n```cmd\ncd TypeScriptCompiler\nprepare_3rdParty.bat \n```\n\nTo build ``TSC`` binaries:\n\n```cmd\ncd TypeScriptCompiler\\tsc\nconfig_tsc_release.bat\nbuild_tsc_release.bat\n```\n\n### On Linux (Ubuntu 20.04 and 22.04)\n#### Requirements:\n\n- ``GCC`` or ``Clang``\n- 512GB of free space on disk\n- sudo apt-get install ``libtinfo-dev``\n\nFirst, precompile dependencies\n\n```bash\nchmod +x *.sh\ncd ~/TypeScriptCompiler\n./prepare_3rdParty.sh\n```\n\nTo build ``TSC`` binaries:\n\n```bash\ncd ~/TypeScriptCompiler/tsc\nchmod +x *.sh\n./config_tsc_release.sh\n./build_tsc_release.sh\n```\n","funding_links":["https://github.com/sponsors/ASDAlexander77","https://www.paypal.com/donate/?hosted_button_id=BBJ4SQYLA6D2L"],"categories":["C++","TypeScript to Native","Experimental/Research Projects"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FASDAlexander77%2FTypeScriptCompiler","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FASDAlexander77%2FTypeScriptCompiler","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FASDAlexander77%2FTypeScriptCompiler/lists"}