Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
branch: master
Fetching contributors…

Cannot retrieve contributors at this time

93 lines (73 sloc) 2.648 kb
/* op.h
* Copyright (C) 2001-2007, Parrot Foundation.
* Overview:
* Header file for op functions.
* Data Structure and Algorithms:
* History:
* Notes:
* References:
*/
#ifndef PARROT_OP_H_GUARD
#define PARROT_OP_H_GUARD
#include "parrot/config.h"
#define PARROT_MAX_ARGS 16
typedef enum {
PARROT_INLINE_OP,
PARROT_FUNCTION_OP
} op_type_t;
typedef enum {
PARROT_ARG_IC = PARROT_ARG_INTVAL | PARROT_ARG_CONSTANT,
PARROT_ARG_NC = PARROT_ARG_FLOATVAL | PARROT_ARG_CONSTANT,
PARROT_ARG_PC = PARROT_ARG_PMC | PARROT_ARG_CONSTANT,
PARROT_ARG_SC = PARROT_ARG_STRING | PARROT_ARG_CONSTANT,
PARROT_ARG_NAME_SC = PARROT_ARG_NAME | PARROT_ARG_STRING | PARROT_ARG_CONSTANT,
PARROT_ARG_KEYED = 0x20,
PARROT_ARG_KC = PARROT_ARG_PC | PARROT_ARG_KEYED,
PARROT_ARG_KIC = PARROT_ARG_IC | PARROT_ARG_KEYED,
PARROT_ARG_I = PARROT_ARG_INTVAL,
PARROT_ARG_N = PARROT_ARG_FLOATVAL,
PARROT_ARG_P = PARROT_ARG_PMC,
PARROT_ARG_S = PARROT_ARG_STRING,
PARROT_ARG_K = PARROT_ARG_P | PARROT_ARG_KEYED,
PARROT_ARG_KI = PARROT_ARG_I | PARROT_ARG_KEYED
} arg_type_t;
typedef enum {
PARROT_ARGDIR_IGNORED,
PARROT_ARGDIR_IN,
PARROT_ARGDIR_OUT,
PARROT_ARGDIR_INOUT
} arg_dir_t;
/* See lib/Parrot/OpsFile.pm if the names of these values change */
typedef enum {
PARROT_JUMP_RELATIVE = 1
} op_jump_t;
/* NOTE: Sure wish we could put the types here... */
typedef opcode_t *(*op_func_t)(opcode_t *, PARROT_INTERP);
/*
** op_info_t
**
** Collects all the information we know about an op, except for
** its op function (since we may not be using op functions).
*/
typedef struct op_info_t {
const char *name;
const char *full_name;
const char *func_name;
unsigned short jump;
short op_count; /* Includes opcode as one arg */
arg_type_t types[PARROT_MAX_ARGS]; /* arg_type_t, 0 = 1st arg */
arg_dir_t dirs[PARROT_MAX_ARGS]; /* arg_dir_t 0 = 1st arg */
char labels[PARROT_MAX_ARGS]; /* 0/1 0 = 1st arg */
struct op_lib_t *lib;
} op_info_t;
#define OP_INFO_OPNUM(oi) ((oi) - (oi)->lib->op_info_table)
#define OP_INFO_OPFUNC(oi) ((oi)->lib->op_func_table[OP_INFO_OPNUM(oi)])
#define OPCODE_IS(interp, seg, opnum, lib, oplibnum) \
((seg)->op_func_table[(opnum)] == (lib)->op_func_table[(oplibnum)])
#endif /* PARROT_OP_H_GUARD */
/*
* Local variables:
* c-file-style: "parrot"
* End:
* vim: expandtab shiftwidth=4 cinoptions='\:2=2' :
*/
Jump to Line
Something went wrong with that request. Please try again.