63c508e3e8
118568: switch to using ucpp Patch contributed by Juergen Schmidt http://svn.apache.org/viewvc?view=revision&revision=1209396
161 lines
6.5 KiB
C++
161 lines
6.5 KiB
C++
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
/*
|
|
* This file is part of the LibreOffice project.
|
|
*
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
*
|
|
* This file incorporates work covered by the following license notice:
|
|
*
|
|
* 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 .
|
|
*/
|
|
|
|
#ifndef _OPCODES_HXX
|
|
#define _OPCODES_HXX
|
|
|
|
#include "sbintern.hxx"
|
|
|
|
// An opcode can have a length of 1, 3 or 5 bytes,
|
|
// depending on its numeric value (see below).
|
|
|
|
enum SbiOpcode {
|
|
// all opcodes without operands
|
|
_NOP = 0,
|
|
|
|
SbOP0_START = _NOP,
|
|
|
|
// operators
|
|
// the following operators are ordered
|
|
// the same way as the enum SbxVarOp
|
|
_EXP, _MUL, _DIV, _MOD, _PLUS, _MINUS, _NEG,
|
|
_EQ, _NE, _LT, _GT, _LE, _GE,
|
|
_IDIV, _AND, _OR, _XOR, _EQV, _IMP, _NOT,
|
|
_CAT,
|
|
// end of enum SbxVarOp
|
|
_LIKE, _IS,
|
|
// load/save
|
|
_ARGC, // establish new Argv
|
|
_ARGV, // TOS ==> current Argv
|
|
_INPUT, // Input ==> TOS
|
|
_LINPUT, // Line Input ==> TOS
|
|
_GET, // touch TOS
|
|
_SET, // save object TOS ==> TOS-1
|
|
_PUT, // TOS ==> TOS-1
|
|
_PUTC, // TOS ==> TOS-1, then ReadOnly
|
|
_DIM, // DIM
|
|
_REDIM, // REDIM
|
|
_REDIMP, // REDIM PRESERVE
|
|
_ERASE, // delete TOS
|
|
// branch
|
|
_STOP, // end of program
|
|
_INITFOR, // initialize FOR-variable
|
|
_NEXT, // increment FOR-variable
|
|
_CASE, // beginning CASE
|
|
_ENDCASE, // end CASE
|
|
_STDERROR, // standard error handling
|
|
_NOERROR, // no error handling
|
|
_LEAVE, // leave UP
|
|
// E/A
|
|
_CHANNEL, // TOS = channel number
|
|
_BPRINT, // print TOS
|
|
_PRINTF, // print TOS in field
|
|
_BWRITE, // write TOS
|
|
_RENAME, // Rename Tos+1 to Tos
|
|
_PROMPT, // TOS = Prompt for Input
|
|
_RESTART, // define restart point
|
|
_CHAN0, // I/O-channel 0
|
|
// miscellaneous
|
|
_EMPTY, // empty expression on stack
|
|
_ERROR, // TOS = error code
|
|
_LSET, // saving object TOS ==> TOS-1
|
|
_RSET, // saving object 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 = _BYVAL,
|
|
|
|
// all opcodes with one operand
|
|
|
|
_NUMBER = 0x40, // loading a numeric constant (+ID)
|
|
|
|
SbOP1_START = _NUMBER,
|
|
|
|
_SCONST, // loading a stringconstant (+ID)
|
|
_CONST, // Immediate Load (+ value)
|
|
_ARGN, // saving a named Arg in Argv (+StringID)
|
|
_PAD, // bring string to a firm length (+length)
|
|
// Verzweigungen
|
|
_JUMP, // jump (+target)
|
|
_JUMPT, // evaluate TOS, conditional jump (+target)
|
|
_JUMPF, // evaluate TOS, conditional jump (+target)
|
|
_ONJUMP, // evaluate TOS, jump into JUMP-table (+MaxVal)
|
|
_GOSUB, // UP-call (+Target)
|
|
_RETURN, // UP-return (+0 or Target)
|
|
_TESTFOR, // test FOR-variable, increment (+Endlabel)
|
|
_CASETO, // Tos+1 <= Case <= Tos, 2xremove (+Target)
|
|
_ERRHDL, // error handler (+Offset)
|
|
_RESUME, // Resume after errors (+0 or 1 or Label)
|
|
// E/A
|
|
_CLOSE, // (+channel/0)
|
|
_PRCHAR, // (+char)
|
|
// Verwaltung
|
|
_SETCLASS, // test set + class names (+StringId)
|
|
_TESTCLASS, // Check TOS class (+StringId)
|
|
_LIB, // set lib name for declar-procs (+StringId)
|
|
_BASED, // TOS is incremented by BASE, BASE is pushed before (+base)
|
|
// type adjustment in the Argv
|
|
_ARGTYP, // convert last parameter in Argv (+type)
|
|
_VBASETCLASS, // VBA-like Set
|
|
|
|
SbOP1_END = _VBASETCLASS,
|
|
|
|
// all opcodes with two operands
|
|
|
|
_RTL = 0x80, // load from the RTL (+StringID+Typ)
|
|
|
|
SbOP2_START = _RTL,
|
|
|
|
_FIND, // load (+StringID+Typ)
|
|
_ELEM, // load element (+StringID+Typ)
|
|
_PARAM, // parameters (+Offset+Typ)
|
|
// branch
|
|
_CALL, // call DECLARE-method (+StringID+Typ)
|
|
_CALLC, // call Cdecl-DECLARE-Method (+StringID+Typ)
|
|
_CASEIS, // case-test (+Test-Opcode+True-Target)
|
|
// management
|
|
_STMNT, // begin of a statement (+Line+Col)
|
|
// E/A
|
|
_OPEN, // (+SvStreamFlags+Flags)
|
|
// objects
|
|
_LOCAL, // define locals variables (+StringID+Typ)
|
|
_PUBLIC, // module global variables (+StringID+Typ)
|
|
_GLOBAL, // define global variables, public command (+StringID+Typ)
|
|
_CREATE, // create object (+StringId+StringID)
|
|
_STATIC, // static variable (+StringID+Typ) JSM
|
|
_TCREATE, // create user-defined object
|
|
_DCREATE, // create object-array (+StringId+StringID)
|
|
_GLOBAL_P, // define global variable that's not overwritten on restarting
|
|
// the Basic, P=PERSIST (+StringID+Typ)
|
|
_FIND_G, // finds global variable with special treatment due to _GLOBAL_P
|
|
_DCREATE_REDIMP, // redimension object-array (+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 = _FIND_STATIC
|
|
};
|
|
|
|
#endif
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|