/*
 *  Top-level include file to be used for all (internal) source files.
 *
 *  Source files should not include individual header files, as they
 *  have not been designed to be individually included.
 */

#ifndef DUK_INTERNAL_H_INCLUDED
#define DUK_INTERNAL_H_INCLUDED

/*
 *  The 'duktape.h' header provides the public API, but also handles all
 *  compiler and platform specific feature detection, Duktape feature
 *  resolution, inclusion of system headers, etc.  These have been merged
 *  because the public API is also dependent on e.g. detecting appropriate
 *  C types which is quite platform/compiler specific especially for a non-C99
 *  build.  The public API is also dependent on the resolved feature set.
 *
 *  Some actions taken by the merged header (such as including system headers)
 *  are not appropriate for building a user application.  The define
 *  DUK_COMPILING_DUKTAPE allows the merged header to skip/include some
 *  sections depending on what is being built.
 */

#define DUK_COMPILING_DUKTAPE
#include "duktape.h"

/*
 *  User declarations, e.g. prototypes for user functions used by Duktape
 *  macros.  Concretely, if DUK_USE_PANIC_HANDLER is used and the macro
 *  value calls a user function, it needs to be declared for Duktape
 *  compilation to avoid warnings.
 */

DUK_USE_USER_DECLARE()

/*
 *  Duktape includes (other than duk_features.h)
 *
 *  The header files expect to be included in an order which satisfies header
 *  dependencies correctly (the headers themselves don't include any other
 *  includes).  Forward declarations are used to break circular struct/typedef
 *  dependencies.
 */

#include "duk_replacements.h"
#include "duk_jmpbuf.h"
#include "duk_exception.h"
#include "duk_forwdecl.h"
#include "duk_tval.h"      /* builtins need e.g. duk_tval tag definitions */
#include "duk_builtins.h"  /* autogenerated: strings and built-in object init data */

#include "duk_util.h"
#include "duk_strings.h"
#include "duk_js_bytecode.h"
#include "duk_lexer.h"
#include "duk_js_compiler.h"
#include "duk_regexp.h"
#include "duk_heaphdr.h"
#include "duk_api_internal.h"
#include "duk_hstring.h"
#include "duk_hobject.h"
#include "duk_hcompiledfunction.h"
#include "duk_hnativefunction.h"
#include "duk_hbufferobject.h"
#include "duk_hthread.h"
#include "duk_hbuffer.h"
#include "duk_heap.h"
#include "duk_debugger.h"
#include "duk_debug.h"
#include "duk_error.h"
#include "duk_unicode.h"
#include "duk_json.h"
#include "duk_js.h"
#include "duk_numconv.h"
#include "duk_bi_protos.h"
#include "duk_selftest.h"

#endif  /* DUK_INTERNAL_H_INCLUDED */
