⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 slang_compile_operation.h

📁 Mesa is an open-source implementation of the OpenGL specification - a system for rendering interacti
💻 H
字号:
/* * Mesa 3-D graphics library * Version:  6.5.2 * * Copyright (C) 2005-2006  Brian Paul   All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */#ifndef SLANG_COMPILE_OPERATION_H#define SLANG_COMPILE_OPERATION_H/** * Types of slang operations. * These are the types of the AST (abstract syntax tree) nodes. * [foo] indicates a sub-tree or reference to another type of node */typedef enum slang_operation_type_{   SLANG_OPER_NONE,   SLANG_OPER_BLOCK_NO_NEW_SCOPE,       /* "{" sequence "}" */   SLANG_OPER_BLOCK_NEW_SCOPE,  /* "{" sequence "}" */   SLANG_OPER_VARIABLE_DECL,    /* [type] [var] or [var] = [expr] */   SLANG_OPER_ASM,   SLANG_OPER_BREAK,            /* "break" statement */   SLANG_OPER_CONTINUE,         /* "continue" statement */   SLANG_OPER_DISCARD,          /* "discard" (kill fragment) statement */   SLANG_OPER_RETURN,           /* "return" [expr]  */   SLANG_OPER_LABEL,            /* a jump target */   SLANG_OPER_EXPRESSION,       /* [expr] */   SLANG_OPER_IF,               /* "if" [0] then [1] else [2] */   SLANG_OPER_WHILE,            /* "while" [cond] [body] */   SLANG_OPER_DO,               /* "do" [body] "while" [cond] */   SLANG_OPER_FOR,              /* "for" [init] [while] [incr] [body] */   SLANG_OPER_VOID,             /* nop */   SLANG_OPER_LITERAL_BOOL,     /* "true" or "false" */   SLANG_OPER_LITERAL_INT,      /* integer literal */   SLANG_OPER_LITERAL_FLOAT,    /* float literal */   SLANG_OPER_IDENTIFIER,       /* var name, func name, etc */   SLANG_OPER_SEQUENCE,         /* [expr] "," [expr] "," etc */   SLANG_OPER_ASSIGN,           /* [var] "=" [expr] */   SLANG_OPER_ADDASSIGN,        /* [var] "+=" [expr] */   SLANG_OPER_SUBASSIGN,        /* [var] "-=" [expr] */   SLANG_OPER_MULASSIGN,        /* [var] "*=" [expr] */   SLANG_OPER_DIVASSIGN,        /* [var] "/=" [expr] */   /*SLANG_OPER_MODASSIGN, */   /*SLANG_OPER_LSHASSIGN, */   /*SLANG_OPER_RSHASSIGN, */   /*SLANG_OPER_ORASSIGN, */   /*SLANG_OPER_XORASSIGN, */   /*SLANG_OPER_ANDASSIGN, */   SLANG_OPER_SELECT,           /* [expr] "?" [expr] ":" [expr] */   SLANG_OPER_LOGICALOR,        /* [expr] "||" [expr] */   SLANG_OPER_LOGICALXOR,       /* [expr] "^^" [expr] */   SLANG_OPER_LOGICALAND,       /* [expr] "&&" [expr] */   /*SLANG_OPER_BITOR, */   /*SLANG_OPER_BITXOR, */   /*SLANG_OPER_BITAND, */   SLANG_OPER_EQUAL,            /* [expr] "==" [expr] */   SLANG_OPER_NOTEQUAL,         /* [expr] "!=" [expr] */   SLANG_OPER_LESS,             /* [expr] "<" [expr] */   SLANG_OPER_GREATER,          /* [expr] ">" [expr] */   SLANG_OPER_LESSEQUAL,        /* [expr] "<=" [expr] */   SLANG_OPER_GREATEREQUAL,     /* [expr] ">=" [expr] */   /*SLANG_OPER_LSHIFT, */   /*SLANG_OPER_RSHIFT, */   SLANG_OPER_ADD,              /* [expr] "+" [expr] */   SLANG_OPER_SUBTRACT,         /* [expr] "-" [expr] */   SLANG_OPER_MULTIPLY,         /* [expr] "*" [expr] */   SLANG_OPER_DIVIDE,           /* [expr] "/" [expr] */   /*SLANG_OPER_MODULUS, */   SLANG_OPER_PREINCREMENT,     /* "++" [var] */   SLANG_OPER_PREDECREMENT,     /* "--" [var] */   SLANG_OPER_PLUS,             /* "-" [expr] */   SLANG_OPER_MINUS,            /* "+" [expr] */   /*SLANG_OPER_COMPLEMENT, */   SLANG_OPER_NOT,              /* "!" [expr] */   SLANG_OPER_SUBSCRIPT,        /* [expr] "[" [expr] "]" */   SLANG_OPER_CALL,             /* [func name] [param] [param] [...] */   SLANG_OPER_NON_INLINED_CALL, /* a real function call */   SLANG_OPER_FIELD,            /* i.e.: ".next" or ".xzy" or ".xxx" etc */   SLANG_OPER_POSTINCREMENT,    /* [var] "++" */   SLANG_OPER_POSTDECREMENT     /* [var] "--" */} slang_operation_type;/** * A slang_operation is basically a compiled instruction (such as assignment, * a while-loop, a conditional, a multiply, a function call, etc). * The AST (abstract syntax tree) is built from these nodes. * NOTE: This structure could have been implemented as a union of simpler * structs which would correspond to the operation types above. */typedef struct slang_operation_{   slang_operation_type type;   struct slang_operation_ *children;   GLuint num_children;   GLfloat literal[4];           /**< Used for float, int and bool values */   GLuint literal_size;          /**< 1, 2, 3, or 4 */   slang_atom a_id;              /**< type: asm, identifier, call, field */   slang_variable_scope *locals; /**< local vars for scope */   struct slang_function_ *fun;  /**< If type == SLANG_OPER_CALL */   struct slang_variable_ *var;  /**< If type == slang_oper_identier */   struct slang_label_ *label;   /**< If type == SLANG_OPER_LABEL */} slang_operation;extern GLbooleanslang_operation_construct(slang_operation *);extern voidslang_operation_destruct(slang_operation *);extern voidslang_replace_scope(slang_operation *oper,                    slang_variable_scope *oldScope,                    slang_variable_scope *newScope);extern GLbooleanslang_operation_copy(slang_operation *, const slang_operation *);extern slang_operation *slang_operation_new(GLuint count);extern voidslang_operation_delete(slang_operation *oper);extern slang_operation *slang_operation_grow(GLuint *numChildren, slang_operation **children);extern slang_operation *slang_operation_insert(GLuint *numChildren, slang_operation **children,                       GLuint pos);extern void_slang_operation_swap(slang_operation *oper0, slang_operation *oper1);#endif /* SLANG_COMPILE_OPERATION_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -