MichaReiser/speedy.js

View on GitHub
packages/compiler/src/code-generation/code-generators/continue-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 continue statement
 */
class ContinueStatementCodeGenerator implements SyntaxCodeGenerator<ts.ContinueStatement, void> {
    syntaxKind = ts.SyntaxKind.ContinueStatement;

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

        if (node.label) {
            target = context.scope.getContinueBlock(node.label.text);
        } else {
            target = context.scope.getContinueBlock();
        }

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

        context.builder.createBr(target!);
    }

}

export default ContinueStatementCodeGenerator;