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