| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| #ifndef _OPCODES_HXX |
| #define _OPCODES_HXX |
| |
| #include "sbintern.hxx" |
| |
| #ifdef MTW |
| #undef _NUMBER |
| #endif |
| |
| // Ein Opcode ist entweder 1, 3 oder 5 Bytes lang, je nach numerischen |
| // Wert des Opcodes (s.u.). |
| |
| enum SbiOpcode { |
| // Alle Opcodes ohne Operanden |
| _NOP = 0, |
| |
| SbOP0_START = _NOP, |
| |
| // Operatoren |
| // die folgenden Operatoren sind genauso angeordnet |
| // wie der enum SbxVarOp |
| _EXP, _MUL, _DIV, _MOD, _PLUS, _MINUS, _NEG, |
| _EQ, _NE, _LT, _GT, _LE, _GE, |
| _IDIV, _AND, _OR, _XOR, _EQV, _IMP, _NOT, |
| _CAT, |
| // Ende enum SbxVarOp |
| _LIKE, _IS, |
| // Laden/speichern |
| _ARGC, // neuen Argv einrichten |
| _ARGV, // TOS ==> aktueller Argv |
| _INPUT, // Input ==> TOS |
| _LINPUT, // Line Input ==> TOS |
| _GET, // TOS anfassen |
| _SET, // Speichern Objekt TOS ==> TOS-1 |
| _PUT, // TOS ==> TOS-1 |
| _PUTC, // TOS ==> TOS-1, dann ReadOnly |
| _DIM, // DIM |
| _REDIM, // REDIM |
| _REDIMP, // REDIM PRESERVE |
| _ERASE, // TOS loeschen |
| // Verzweigen |
| _STOP, // Programmende |
| _INITFOR, // FOR-Variable initialisieren |
| _NEXT, // FOR-Variable inkrementieren |
| _CASE, // Anfang CASE |
| _ENDCASE, // Ende CASE |
| _STDERROR, // Standard-Fehlerbehandlung |
| _NOERROR, // keine Fehlerbehandlung |
| _LEAVE, // UP verlassen |
| // E/A |
| _CHANNEL, // TOS = Kanalnummer |
| _BPRINT, // print TOS |
| _PRINTF, // print TOS in field |
| _BWRITE, // write TOS |
| _RENAME, // Rename Tos+1 to Tos |
| _PROMPT, // TOS = Prompt for Input |
| _RESTART, // Restartpunkt definieren |
| _CHAN0, // I/O-Kanal 0 |
| // Sonstiges |
| _EMPTY, // Leeren Ausdruck auf Stack |
| _ERROR, // TOS = Fehlercode |
| _LSET, // Speichern Objekt TOS ==> TOS-1 |
| _RSET, // Speichern Objekt TOS ==> TOS-1 |
| _REDIMP_ERASE, // Copies array to be later used by REDIM PRESERVE before erasing it |
| _INITFOREACH, |
| _VBASET, // VBA-like Set |
| _ERASE_CLEAR, // Erase array and clear variable |
| _ARRAYACCESS, // Assign parameters to TOS and get value, used for array of arrays |
| _BYVAL, // byref -> byval for lvalue parameter passed in call |
| SbOP0_END, |
| |
| // Alle Opcodes mit einem Operanden |
| |
| _NUMBER = 0x40, // Laden einer numerischen Konstanten (+ID) |
| |
| SbOP1_START = _NUMBER, |
| |
| _SCONST, // Laden einer Stringkonstanten (+ID) |
| _CONST, // Immediate Load (+Wert) |
| _ARGN, // Speichern eines named Args in Argv (+StringID) |
| _PAD, // String auf feste Laenge bringen (+Laenge) |
| // Verzweigungen |
| _JUMP, // Sprung (+Target) |
| _JUMPT, // TOS auswerten, bedingter Sprung (+Target) |
| _JUMPF, // TOS auswerten, bedingter Sprung (+Target) |
| _ONJUMP, // TOS auswerten, Sprung in JUMP-Tabelle (+MaxVal) |
| _GOSUB, // UP-Aufruf (+Target) |
| _RETURN, // UP-Return (+0 oder Target) |
| _TESTFOR, // FOR-Variable testen, inkrementieren (+Endlabel) |
| _CASETO, // Tos+1 <= Case <= Tos, 2xremove (+Target) |
| _ERRHDL, // Fehler-Handler (+Offset) |
| _RESUME, // Resume nach Fehlern (+0 or 1 or Label) |
| // E/A |
| _CLOSE, // (+Kanal/0) |
| _PRCHAR, // (+char) |
| // Verwaltung |
| _SETCLASS, // Set + Klassennamen testen (+StringId) |
| _TESTCLASS, // Check TOS class (+StringId) |
| _LIB, // Libnamen fuer Declare-Procs setzen (+StringId) |
| _BASED, // TOS wird um BASE erhoeht, BASE davor gepusht (+base) |
| // Typanpassung im Argv |
| _ARGTYP, // Letzten Parameter in Argv konvertieren (+Typ) |
| _VBASETCLASS, // VBA-like Set |
| SbOP1_END, |
| |
| // Alle Opcodes mit zwei Operanden |
| |
| _RTL = 0x80, // Laden aus RTL (+StringID+Typ) |
| |
| SbOP2_START = _RTL, |
| |
| _FIND, // Laden (+StringID+Typ) |
| _ELEM, // Laden Element (+StringID+Typ) |
| _PARAM, // Parameter (+Offset+Typ) |
| // Verzweigen |
| _CALL, // DECLARE-Methode rufen (+StringID+Typ) |
| _CALLC, // Cdecl-DECLARE-Methode rufen (+StringID+Typ) |
| _CASEIS, // Case-Test (+Test-Opcode+True-Target) |
| // Verwaltung |
| _STMNT, // Beginn eines Statements (+Line+Col) |
| // E/A |
| _OPEN, // (+SvStreamFlags+Flags) |
| // Objekte |
| _LOCAL, // Lokale Variable definieren (+StringID+Typ) |
| _PUBLIC, // Modulglobale Variable (+StringID+Typ) |
| _GLOBAL, // Globale Variable definieren, public-Anweisung (+StringID+Typ) |
| _CREATE, // Objekt kreieren (+StringId+StringID) |
| _STATIC, // Statische Variabl (+StringID+Typ) JSM |
| _TCREATE, // User Defined Objekt kreieren |
| _DCREATE, // Objekt-Array kreieren (+StringId+StringID) |
| _GLOBAL_P, // Globale Variable definieren, die beim Neustart von Basic |
| // nicht ueberschrieben wird, P=PERSIST (+StringID+Typ) |
| _FIND_G, // Sucht globale Variable mit Spezialbehandlung wegen _GLOBAL_P |
| _DCREATE_REDIMP, // Objekt-Array redimensionieren (+StringId+StringID) |
| _FIND_CM, // Search inside a class module (CM) to enable global search in time |
| _PUBLIC_P, // Module global Variable (persisted between calls)(+StringID+Typ) |
| _FIND_STATIC, // local static var lookup (+StringID+Typ) |
| |
| SbOP2_END |
| |
| }; |
| |
| |
| |
| #endif |