xref: /AOO41X/main/basic/source/inc/opcodes.hxx (revision 234bd5c559aaf7abbd02d045859137b774cd8b34)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef _OPCODES_HXX
25 #define _OPCODES_HXX
26 
27 #include "sbintern.hxx"
28 
29 #ifdef MTW
30 #undef _NUMBER
31 #endif
32 
33 // Ein Opcode ist entweder 1, 3 oder 5 Bytes lang, je nach numerischen
34 // Wert des Opcodes (s.u.).
35 
36 enum SbiOpcode {
37     // Alle Opcodes ohne Operanden
38     _NOP = 0,
39 
40     SbOP0_START = _NOP,
41 
42     // Operatoren
43     // die folgenden Operatoren sind genauso angeordnet
44     // wie der enum SbxVarOp
45     _EXP, _MUL, _DIV, _MOD, _PLUS, _MINUS, _NEG,
46     _EQ,  _NE,  _LT,  _GT, _LE, _GE,
47     _IDIV, _AND, _OR, _XOR, _EQV, _IMP, _NOT,
48     _CAT,
49     // Ende enum SbxVarOp
50     _LIKE, _IS,
51     // Laden/speichern
52     _ARGC,              // neuen Argv einrichten
53     _ARGV,              // TOS ==> aktueller Argv
54     _INPUT,             // Input ==> TOS
55     _LINPUT,            // Line Input ==> TOS
56     _GET,               // TOS anfassen
57     _SET,               // Speichern Objekt TOS ==> TOS-1
58     _PUT,               // TOS ==> TOS-1
59     _PUTC,              // TOS ==> TOS-1, dann ReadOnly
60     _DIM,               // DIM
61     _REDIM,             // REDIM
62     _REDIMP,            // REDIM PRESERVE
63     _ERASE,             // TOS loeschen
64     // Verzweigen
65     _STOP,              // Programmende
66     _INITFOR,           // FOR-Variable initialisieren
67     _NEXT,              // FOR-Variable inkrementieren
68     _CASE,              // Anfang CASE
69     _ENDCASE,           // Ende CASE
70     _STDERROR,          // Standard-Fehlerbehandlung
71     _NOERROR,           // keine Fehlerbehandlung
72     _LEAVE,             // UP verlassen
73     // E/A
74     _CHANNEL,           // TOS = Kanalnummer
75     _BPRINT,            // print TOS
76     _PRINTF,            // print TOS in field
77     _BWRITE,            // write TOS
78     _RENAME,            // Rename Tos+1 to Tos
79     _PROMPT,            // TOS = Prompt for Input
80     _RESTART,           // Restartpunkt definieren
81     _CHAN0,             // I/O-Kanal 0
82     // Sonstiges
83     _EMPTY,             // Leeren Ausdruck auf Stack
84     _ERROR,             // TOS = Fehlercode
85     _LSET,              // Speichern Objekt TOS ==> TOS-1
86     _RSET,              // Speichern Objekt TOS ==> TOS-1
87     _REDIMP_ERASE,      // Copies array to be later used by REDIM PRESERVE before erasing it
88     _INITFOREACH,
89     _VBASET,            // VBA-like Set
90     _ERASE_CLEAR,       // Erase array and clear variable
91     _ARRAYACCESS,       // Assign parameters to TOS and get value, used for array of arrays
92     _BYVAL,             // byref -> byval for lvalue parameter passed in call
93     SbOP0_END,
94 
95     // Alle Opcodes mit einem Operanden
96 
97     _NUMBER = 0x40,     // Laden einer numerischen Konstanten (+ID)
98 
99     SbOP1_START = _NUMBER,
100 
101     _SCONST,            // Laden einer Stringkonstanten (+ID)
102     _CONST,             // Immediate Load (+Wert)
103     _ARGN,              // Speichern eines named Args in Argv (+StringID)
104     _PAD,               // String auf feste Laenge bringen (+Laenge)
105     // Verzweigungen
106     _JUMP,              // Sprung (+Target)
107     _JUMPT,             // TOS auswerten, bedingter Sprung (+Target)
108     _JUMPF,             // TOS auswerten, bedingter Sprung (+Target)
109     _ONJUMP,            // TOS auswerten, Sprung in JUMP-Tabelle (+MaxVal)
110     _GOSUB,             // UP-Aufruf (+Target)
111     _RETURN,            // UP-Return (+0 oder Target)
112     _TESTFOR,           // FOR-Variable testen, inkrementieren (+Endlabel)
113     _CASETO,            // Tos+1 <= Case <= Tos, 2xremove (+Target)
114     _ERRHDL,            // Fehler-Handler (+Offset)
115     _RESUME,            // Resume nach Fehlern (+0 or 1 or Label)
116     // E/A
117     _CLOSE,             // (+Kanal/0)
118     _PRCHAR,            // (+char)
119     // Verwaltung
120     _SETCLASS,          // Set + Klassennamen testen (+StringId)
121     _TESTCLASS,         // Check TOS class (+StringId)
122     _LIB,               // Libnamen fuer Declare-Procs setzen (+StringId)
123     _BASED,             // TOS wird um BASE erhoeht, BASE davor gepusht (+base)
124     // Typanpassung im Argv
125     _ARGTYP,            // Letzten Parameter in Argv konvertieren (+Typ)
126     _VBASETCLASS,       // VBA-like Set
127     SbOP1_END,
128 
129     // Alle Opcodes mit zwei Operanden
130 
131     _RTL = 0x80,        // Laden aus RTL (+StringID+Typ)
132 
133     SbOP2_START = _RTL,
134 
135     _FIND,              // Laden (+StringID+Typ)
136     _ELEM,              // Laden Element (+StringID+Typ)
137     _PARAM,             // Parameter (+Offset+Typ)
138     // Verzweigen
139     _CALL,              // DECLARE-Methode rufen (+StringID+Typ)
140     _CALLC,             // Cdecl-DECLARE-Methode rufen (+StringID+Typ)
141     _CASEIS,            // Case-Test (+Test-Opcode+True-Target)
142     // Verwaltung
143     _STMNT,             // Beginn eines Statements (+Line+Col)
144     // E/A
145     _OPEN,              // (+SvStreamFlags+Flags)
146     // Objekte
147     _LOCAL,             // Lokale Variable definieren (+StringID+Typ)
148     _PUBLIC,            // Modulglobale Variable (+StringID+Typ)
149     _GLOBAL,            // Globale Variable definieren, public-Anweisung (+StringID+Typ)
150     _CREATE,            // Objekt kreieren (+StringId+StringID)
151     _STATIC,            // Statische Variabl (+StringID+Typ) JSM
152     _TCREATE,           // User Defined Objekt kreieren
153     _DCREATE,           // Objekt-Array kreieren (+StringId+StringID)
154     _GLOBAL_P,          // Globale Variable definieren, die beim Neustart von Basic
155                         // nicht ueberschrieben wird, P=PERSIST (+StringID+Typ)
156     _FIND_G,            // Sucht globale Variable mit Spezialbehandlung wegen _GLOBAL_P
157     _DCREATE_REDIMP,    // Objekt-Array redimensionieren (+StringId+StringID)
158     _FIND_CM,           // Search inside a class module (CM) to enable global search in time
159     _PUBLIC_P,          //  Module global Variable (persisted between calls)(+StringID+Typ)
160     _FIND_STATIC,           //  local static var lookup (+StringID+Typ)
161 
162     SbOP2_END
163 
164 };
165 
166 
167 
168 #endif
169