179 lines · 6.7 KB · C
RawDownload
/*----------------------------------------------------------------------------  ChucK Concurrent, On-the-fly Audio Programming Language    Compiler and Virtual Machine   Copyright (c) 2004 Ge Wang and Perry R. Cook.  All rights reserved.    http://chuck.stanford.edu/    http://chuck.cs.princeton.edu/   This program is free software; you can redistribute it and/or modify  it under the terms of the GNU General Public License as published by  the Free Software Foundation; either version 2 of the License, or  (at your option) any later version.   This program is distributed in the hope that it will be useful,  but WITHOUT ANY WARRANTY; without even the implied warranty of  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  GNU General Public License for more details.   You should have received a copy of the GNU General Public License  along with this program; if not, write to the Free Software  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  U.S.A.-----------------------------------------------------------------------------*/ //-----------------------------------------------------------------------------// file: chuck_compile.h// desc: chuck compile system unifying parser, type checker, and emitter//// author: Ge Wang (ge@ccrma.stanford.edu | gewang@cs.princeton.edu)// date: Autumn 2005 - original//-----------------------------------------------------------------------------#ifndef __CHUCK_COMPILE_H__#define __CHUCK_COMPILE_H__ #include "chuck_def.h"#include "chuck_parse.h"#include "chuck_scan.h"#include "chuck_type.h"#include "chuck_emit.h"#include "chuck_vm.h"#include <list>  // forward referencestruct Chuck_DLL;    //-----------------------------------------------------------------------------// name: struct Chuck_Compiler// desc: the sum of the components in compilation//-----------------------------------------------------------------------------struct Chuck_Compiler{protected: // data    // carrier    Chuck_Carrier * m_carrier; public: // get protected data    // REFACTOR-2017: get associated, per-compiler environment    Chuck_Env * env() const { return m_carrier->env; }    // REFACTOR-2017: get associated, per-compiler VM    Chuck_VM * vm() const { return m_carrier->vm; }    // REFACTOR-2017: get associated, per-compiler carrier    Chuck_Carrier * carrier() const { return m_carrier; }    // set carrier    t_CKBOOL setCarrier( Chuck_Carrier * c ) { m_carrier = c; return TRUE; } public: // data    // emitter    Chuck_Emitter * emitter;    // generated code    Chuck_VM_Code * code;     // auto-depend flag    t_CKBOOL m_auto_depend;    // recent map    std::map<std::string, Chuck_Context *> m_recent;     // chugins    std::list<Chuck_DLL *> m_dlls;    // libraries (ck code) to import    std::list<std::string> m_cklibs_to_preload;     // origin hint; this flag is set to different te_Origin values    // to denote where new entities originate | 1.5.0.0 (ge) added    te_Origin m_originHint; public: // to all    // contructor    Chuck_Compiler();    // destructor    virtual ~Chuck_Compiler();     // initialize    t_CKBOOL initialize();    // shutdown    void shutdown(); public: // additional binding    // bind a new type system module, via query function    t_CKBOOL bind( f_ck_query query_func, const std::string & name,                   const std::string & nspc = "global" ); public: // compile    // set auto depend    void set_auto_depend( t_CKBOOL v );    // parse, type-check, and emit a program    t_CKBOOL go( const std::string & filename,                 const std::string & full_path = "",                 const std::string & codeLiteral = "" );    // resolve a type automatically, if auto_depend is on    t_CKBOOL resolve( const std::string & type );    // get the code generated from the last go()    Chuck_VM_Code * output( ); public: // special FILE input mode | added 1.5.0.5 (ge)    // set an already open FILE descriptor `fd` for one time use    // by the next call to go(), which will use `fd` as the input    // to the parser (NOTE in any invocation of go(), `codeLiteral`    // and `fd` should not both be non-empty, otherwise a warning    // will be output and the `codeLiteral` will take precedence    // and the `fd` will be cleaned up and skipped    // MEMORY: if `autoClose` is true, the compiler will automatically    // call fclose() on `fd` on the next call to go(), regardless of    // the aforementioned conflict with `codeLiteral`    void set_file2parse( FILE * fd, t_CKBOOL autoClose ); public: // replace-dac | added 1.4.1.0 (jack)    // sets a "replacement dac": one global UGen is secretly used    // as a stand-in for "dac" for this compilation;    // for example, ChuckSubInstances in Chunity use a global Gain as a    // replacement dac, then use the global getUGenSamples() function to    // get the samples of the gain. this enables the creation    // of a new sample sucker.    void setReplaceDac( t_CKBOOL shouldReplaceDac, const std::string & replacement ); public:    // chugin load | 1.4.1.0 (ge) refactored    t_CKBOOL load_external_modules( const char * extension,                                    std::list<std::string> & chugin_search_paths,                                    std::list<std::string> & named_dls,                                    t_CKBOOL recursiveSearch );     // chugin probe | 1.5.0.4 (ge) added    static t_CKBOOL probe_external_modules( const char * extension,                                            std::list<std::string> & chugin_search_paths,                                            std::list<std::string> & named_dls,                                            t_CKBOOL recursiveSearch,                                            std::list<std::string> & ck_libs ); protected: // internal    // do entire file    t_CKBOOL do_entire_file( Chuck_Context * context );    // do just class definitions    t_CKBOOL do_only_classes( Chuck_Context * context );    // do all excect classes    t_CKBOOL do_all_except_classes( Chuck_Context * context );    // do normal compile    t_CKBOOL do_normal_depend( const std::string & path,                               const std::string & codeLiteral = "",                               const std::string & full_path = "" );    // do auto-depend compile    t_CKBOOL do_auto_depend( const std::string & path,                             const std::string & codeLiteral = "",                             const std::string & full_path = "" );    // look up in recent    Chuck_Context * find_recent_path( const std::string & path );    // look up in recent    Chuck_Context * find_recent_type( const std::string & type );    // add to recent    t_CKBOOL add_recent_path( const std::string & path, Chuck_Context * context );};    #endif

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t