Properly root CopyStruct/CopyArray.
1 /* vim: set ts=4 sw=4 tw=99 et:
3 * Copyright (C) 2012 David Anderson
5 * This file is part of SourcePawn.
7 * SourcePawn is free software: you can redistribute it and/or modify it under
8 * the terms of the GNU General Public License as published by the Free
9 * Software Foundation, either version 3 of the License, or (at your option)
12 * SourcePawn is distributed in the hope that it will be useful, but WITHOUT ANY
13 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License along with
17 * SourcePawn. If not, see http://www.gnu.org/licenses/.
19 #ifndef _include_opcodes_h_
20 #define _include_opcodes_h_
29 #define OPDEF(name, number, text, length, uses, defs) \
31 #include "Opcodes.tbl"
36 #define OPDEF(name, number, text, length, uses, defs) \
37 static const unsigned name##_LENGTH = length;
38 #include "Opcodes.tbl"
49 typedef unsigned char bytecode;
51 extern OpInfo OpcodeInfo[];
73 static const unsigned MAX_TABLESWITCH_ENTRIES = 256;
75 static inline unsigned
76 TableSwitchEntries(int low, int high)
78 return unsigned(high - low) + 1;
82 READ_INT32(bytecode *pc)
84 return *reinterpret_cast<int *>(pc + 1);
86 static inline unsigned
87 READ_UINT32(bytecode *pc)
89 return *reinterpret_cast<unsigned *>(pc + 1);
92 READ_FLOAT(bytecode *pc)
94 return *reinterpret_cast<float *>(pc + 1);
98 READ_TABLESWITCH_LOW(bytecode *pc)
100 return READ_INT32(pc);
104 READ_TABLESWITCH_HIGH(bytecode *pc)
106 return READ_INT32(pc + sizeof(int));
111 void Disassemble(Code *code, FILE *fp);
115 #endif // _include_opcodes_h_