MichaReiser/speedy.js

View on GitHub
packages/compiler/src/code-generation/code-generators/break-statement-code-generator.ts

Summary

Maintainability
C
1 day
Test Coverage
import * as assert from "assert";
import * as ts from "typescript";
import {CodeGenerationContext} from "../code-generation-context";
import {SyntaxCodeGenerator} from "../syntax-code-generator";

/**
 * Code generator for the break statement
 */
class BreakStatementCodeGenerator implements SyntaxCodeGenerator<ts.BreakStatement, void> {
    syntaxKind = ts.SyntaxKind.BreakStatement;

    generate(breakStatement: ts.BreakStatement, context: CodeGenerationContext): void {
        let target: llvm.BasicBlock | undefined;

        if (breakStatement.label) {
            target = context.scope.getBreakBlock(breakStatement.label.text);
        } else {
            target = context.scope.getBreakBlock();
        }

        assert(target, `Break block for label '${breakStatement.label ? breakStatement.label.text : ""}' is missing`);

        context.builder.createBr(target!);
    }

}

export default BreakStatementCodeGenerator;