/[svn]/linuxsampler/trunk/src/scriptvm/common.h
ViewVC logotype

Annotation of /linuxsampler/trunk/src/scriptvm/common.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2581 - (hide annotations) (download) (as text)
Fri May 30 12:48:05 2014 UTC (9 years, 10 months ago) by schoenebeck
File MIME type: text/x-c++hdr
File size: 3917 byte(s)
* (WIP) Implemented parser and VM for upcoming new real-time instrument
  script support. It needs yet to be integrated into the sampler's
  sampler engines. You can toy around for now with the command line tool
  "ls_instr_script" and i.e. examples showing the core language features
  under src/scriptvm/examples/.
* Bumped version (1.0.0.svn41).

1 schoenebeck 2581 /*
2     * Copyright (c) 2014 Christian Schoenebeck
3     *
4     * http://www.linuxsampler.org
5     *
6     * This file is part of LinuxSampler and released under the same terms.
7     * See README file for details.
8     */
9    
10     // This header defines data types shared between the VM core implementation
11     // (inside the current source directory) and other parts of the sampler
12     // (located at other source directories).
13    
14     #ifndef LS_INSTR_SCRIPT_PARSER_COMMON_H
15     #define LS_INSTR_SCRIPT_PARSER_COMMON_H
16    
17     #include "../common/global.h"
18    
19     namespace LinuxSampler {
20    
21     enum ParserIssueType_t {
22     PARSER_ERROR,
23     PARSER_WARNING
24     };
25    
26     enum ExprType_t {
27     EMPTY_EXPR, ///< i.e. on invalid expressions or i.e. a function call that does not return a result value
28     INT_EXPR,
29     INT_ARR_EXPR,
30     STRING_EXPR,
31     STRING_ARR_EXPR,
32     };
33    
34     enum StmtFlags_t {
35     STMT_SUCCESS = 0, ///< Function / statement was executed successfully, no error occurred.
36     STMT_ABORT_SIGNALLED = 1, ///< VM should stop the current callback execution (usually because of an error, but might also be without an error reason).
37     STMT_SUSPEND_SIGNALLED = (1<<1),
38     STMT_ERROR_OCCURRED = (1<<2),
39     };
40    
41     enum VMExecStatus_t {
42     VM_EXEC_NOT_RUNNING = 0,
43     VM_EXEC_RUNNING = 1,
44     VM_EXEC_SUSPENDED = (1<<1),
45     VM_EXEC_ERROR = (1<<2),
46     };
47    
48     class VMExpr {
49     public:
50     virtual ExprType_t exprType() const = 0;
51     };
52    
53     class VMIntExpr : virtual public VMExpr {
54     public:
55     virtual int evalInt() = 0;
56     ExprType_t exprType() const { return INT_EXPR; }
57     };
58    
59     class VMStringExpr : virtual public VMExpr {
60     public:
61     virtual String evalStr() = 0;
62     ExprType_t exprType() const { return STRING_EXPR; }
63     };
64    
65     class VMFnArgs {
66     public:
67     virtual int argsCount() const = 0;
68     virtual VMExpr* arg(int i) = 0;
69     };
70    
71     class VMFnResult {
72     public:
73     virtual VMExpr* resultValue() = 0;
74     virtual StmtFlags_t resultFlags() { return STMT_SUCCESS; }
75     };
76    
77     class VMFunction {
78     public:
79     virtual ExprType_t returnType() = 0;
80     virtual int minRequiredArgs() const = 0;
81     virtual int maxAllowedArgs() const = 0;
82     virtual ExprType_t argType(int iArg) const = 0;
83     virtual bool acceptsArgType(int iArg, ExprType_t type) const = 0;
84     virtual VMFnResult* exec(VMFnArgs* args) = 0;
85     };
86    
87     class VMFunctionProvider {
88     public:
89     virtual VMFunction* functionByName(const String& name) = 0;
90     };
91    
92     class VMParserContext {
93     public:
94     virtual ~VMParserContext() {}
95     };
96    
97     class VMExecContext {
98     public:
99     virtual ~VMExecContext() {}
100     virtual int suspensionTimeMicroseconds() const = 0;
101     };
102    
103     class VMEventHandler {
104     public:
105     virtual String eventHandlerName() const = 0;
106     };
107    
108     struct ParserIssue {
109     String txt;
110     int line;
111     ParserIssueType_t type;
112    
113     inline void dump() {
114     switch (type) {
115     case PARSER_ERROR:
116     printf("[ERROR] line %d: %s\n", line, txt.c_str());
117     break;
118     case PARSER_WARNING:
119     printf("[Warning] line %d: %s\n", line, txt.c_str());
120     break;
121     }
122     }
123    
124     inline bool isErr() const { return type == PARSER_ERROR; }
125     inline bool isWrn() const { return type == PARSER_WARNING; }
126     };
127    
128     inline String typeStr(const ExprType_t& type) {
129     switch (type) {
130     case EMPTY_EXPR: return "empty";
131     case INT_EXPR: return "integer";
132     case INT_ARR_EXPR: return "integer array";
133     case STRING_EXPR: return "string";
134     case STRING_ARR_EXPR: return "string array";
135     }
136     return "invalid";
137     }
138    
139     } // namespace LinuxSampler
140    
141     #endif // LS_INSTR_SCRIPT_PARSER_COMMON_H

  ViewVC Help
Powered by ViewVC