/*
 * Copyright 2016 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#ifndef SKSL_CONTEXT
#define SKSL_CONTEXT

#include "include/private/SkAssert.h"

namespace SkSL {

class BuiltinTypes;
class ErrorReporter;
struct Module;
struct ProgramConfig;
class SymbolTable;

/**
 * Contains compiler-wide objects and state.
 */
class Context {
public:
    Context(const BuiltinTypes& types, ErrorReporter& errors);
    ~Context();

    // The Context holds a reference to all of the built-in types.
    const BuiltinTypes& fTypes;

    // The Context holds a pointer to the configuration of the program being compiled.
    ProgramConfig* fConfig = nullptr;

    // The Context holds a pointer to our error reporter.
    ErrorReporter* fErrors;

    void setErrorReporter(ErrorReporter* e) {
        SkASSERT(e);
        fErrors = e;
    }

    // The Context holds a pointer to our module with built-in declarations.
    const Module* fModule = nullptr;

    // This is the current symbol table of the code we are processing, and therefore changes during
    // compilation.
    SymbolTable* fSymbolTable = nullptr;
};

}  // namespace SkSL

#endif
