xref: /trunk/main/basic/source/inc/opcodes.hxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
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