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