mirror of
				https://github.com/stedolan/jq.git
				synced 2024-05-11 05:55:39 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			49 lines
		
	
	
		
			810 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			810 B
		
	
	
	
		
			C
		
	
	
	
	
	
#ifndef OPCODE_H
 | 
						|
#define OPCODE_H
 | 
						|
#include <assert.h>
 | 
						|
 | 
						|
typedef enum {
 | 
						|
#define OP(name, imm, in, out) name,
 | 
						|
#include "opcode_list.h"
 | 
						|
#undef OP
 | 
						|
} opcode;
 | 
						|
 | 
						|
enum {
 | 
						|
  NUM_OPCODES = 
 | 
						|
#define OP(name, imm, in, out) +1
 | 
						|
#include "opcode_list.h"
 | 
						|
#undef OP
 | 
						|
};
 | 
						|
 | 
						|
enum {
 | 
						|
  OP_HAS_CONSTANT = 2,
 | 
						|
  OP_HAS_VARIABLE = 4,
 | 
						|
  OP_HAS_BRANCH = 8,
 | 
						|
  OP_HAS_SYMBOL = 16,
 | 
						|
  OP_HAS_CFUNC = 32,
 | 
						|
  OP_HAS_UFUNC = 64,
 | 
						|
  OP_IS_CALL_PSEUDO = 128,
 | 
						|
  OP_HAS_VARIABLE_LENGTH_ARGLIST = 256,
 | 
						|
  OP_HAS_BLOCK = 512,
 | 
						|
  OP_HAS_BINDING = 1024,
 | 
						|
};
 | 
						|
struct opcode_description {
 | 
						|
  opcode op;
 | 
						|
  const char* name;
 | 
						|
 | 
						|
  int flags;
 | 
						|
 | 
						|
  // length in 16-bit units
 | 
						|
  int length;
 | 
						|
 | 
						|
  int stack_in, stack_out;
 | 
						|
};
 | 
						|
 | 
						|
const struct opcode_description* opcode_describe(opcode op);
 | 
						|
 | 
						|
static inline int opcode_length(opcode op) {
 | 
						|
  return opcode_describe(op)->length;
 | 
						|
}
 | 
						|
 | 
						|
#endif
 |