/*
4coder_language_rust.h - Sets up the Rust language context.

TYPE: 'langauge-description'
*/

// TOP

#if !defined(FCODER_LANGUAGE_RUST_H)
#define FCODER_LANGUAGE_RUST_H

static Parse_Context_ID parse_context_language_rust;

#define PSAT(s, t) {s, sizeof(s)-1, t}
static void
init_language_rust(Application_Links *app){
    if (parse_context_language_rust != 0) return;
    
    Parser_String_And_Type kw[] = {
        PSAT("abstract", CPP_TOKEN_KEY_OTHER),
        PSAT("alignof", CPP_TOKEN_KEY_OTHER),
        PSAT("as", CPP_TOKEN_KEY_OTHER),
        PSAT("become", CPP_TOKEN_KEY_OTHER),
        PSAT("box", CPP_TOKEN_KEY_OTHER),
        PSAT("const", CPP_TOKEN_KEY_OTHER),
        PSAT("crate", CPP_TOKEN_KEY_OTHER),
        PSAT("enum", CPP_TOKEN_KEY_OTHER),
        PSAT("extern", CPP_TOKEN_KEY_OTHER),
        PSAT("false", CPP_TOKEN_KEY_OTHER),
        PSAT("final", CPP_TOKEN_KEY_OTHER),
        PSAT("fn", CPP_TOKEN_KEY_OTHER),
        PSAT("impl", CPP_TOKEN_KEY_OTHER),
        PSAT("in", CPP_TOKEN_KEY_OTHER),
        PSAT("let", CPP_TOKEN_KEY_OTHER),
        PSAT("loop", CPP_TOKEN_KEY_OTHER),
        PSAT("macro", CPP_TOKEN_KEY_OTHER),
        PSAT("match", CPP_TOKEN_KEY_OTHER),
        PSAT("mod", CPP_TOKEN_KEY_OTHER),
        PSAT("move", CPP_TOKEN_KEY_OTHER),
        PSAT("mut", CPP_TOKEN_KEY_OTHER),
        PSAT("offsetof", CPP_TOKEN_KEY_OTHER),
        PSAT("override", CPP_TOKEN_KEY_OTHER),
        PSAT("priv", CPP_TOKEN_KEY_OTHER),
        PSAT("proc", CPP_TOKEN_KEY_OTHER),
        PSAT("pub", CPP_TOKEN_KEY_OTHER),
        PSAT("pure", CPP_TOKEN_KEY_OTHER),
        PSAT("ref", CPP_TOKEN_KEY_OTHER),
        PSAT("return", CPP_TOKEN_KEY_OTHER),
        PSAT("Self", CPP_TOKEN_KEY_OTHER),
        PSAT("self", CPP_TOKEN_KEY_OTHER),
        PSAT("sizeof", CPP_TOKEN_KEY_OTHER),
        PSAT("static", CPP_TOKEN_KEY_OTHER),
        PSAT("struct", CPP_TOKEN_KEY_OTHER),
        PSAT("super", CPP_TOKEN_KEY_OTHER),
        PSAT("trait", CPP_TOKEN_KEY_OTHER),
        PSAT("true", CPP_TOKEN_KEY_OTHER),
        PSAT("type", CPP_TOKEN_KEY_OTHER),
        PSAT("typeof", CPP_TOKEN_KEY_OTHER),
        PSAT("unsafe", CPP_TOKEN_KEY_OTHER),
        PSAT("unsized", CPP_TOKEN_KEY_OTHER),
        PSAT("use", CPP_TOKEN_KEY_OTHER),
        PSAT("virtual", CPP_TOKEN_KEY_OTHER),
        PSAT("where", CPP_TOKEN_KEY_OTHER),
        
        PSAT("break",    CPP_TOKEN_KEY_CONTROL_FLOW),
        PSAT("continue", CPP_TOKEN_KEY_CONTROL_FLOW),
        PSAT("do",       CPP_TOKEN_KEY_CONTROL_FLOW),
        PSAT("else",     CPP_TOKEN_KEY_CONTROL_FLOW),
        PSAT("for",      CPP_TOKEN_KEY_CONTROL_FLOW),
        PSAT("if",       CPP_TOKEN_KEY_CONTROL_FLOW),
        PSAT("while",    CPP_TOKEN_KEY_CONTROL_FLOW),
        PSAT("yield",    CPP_TOKEN_KEY_CONTROL_FLOW),
    };
    
    parse_context_language_rust = create_parse_context(app, kw, ArrayCount(kw), 0, 0);
}
#undef PSAT

#endif

// BOTTOM