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