📄 slang_print.c
字号:
break; case SLANG_OPER_LITERAL_INT: spaces(indent); printf("LITERAL ("); for (i = 0; i < op->literal_size; i++) printf("%d ", (int) op->literal[i]); printf(")\n"); break; case SLANG_OPER_LITERAL_FLOAT: spaces(indent); printf("LITERAL ("); for (i = 0; i < op->literal_size; i++) printf("%f ", op->literal[i]); printf(")\n"); break; case SLANG_OPER_IDENTIFIER: { const slang_variable_scope *scope; spaces(indent); if (op->var && op->var->a_name) { scope = find_scope(op->locals, op->var->a_name); printf("VAR %s (in scope %p)\n", (char *) op->var->a_name, (void *) scope); assert(scope); } else { scope = find_scope(op->locals, op->a_id); printf("VAR' %s (in scope %p) locals=%p outer=%p\n", (char *) op->a_id, (void *) scope, (void *) op->locals, (void *) op->locals->outer_scope); assert(scope); } } break; case SLANG_OPER_SEQUENCE: print_generic(op, "COMMA-SEQ", indent+3); break; case SLANG_OPER_ASSIGN: spaces(indent); printf("ASSIGNMENT locals=%p outer=%p\n", (void *) op->locals, (void *) op->locals->outer_scope); print_binary(op, ":=", indent); break; case SLANG_OPER_ADDASSIGN: spaces(indent); printf("ASSIGN\n"); print_binary(op, "+=", indent); break; case SLANG_OPER_SUBASSIGN: spaces(indent); printf("ASSIGN\n"); print_binary(op, "-=", indent); break; case SLANG_OPER_MULASSIGN: spaces(indent); printf("ASSIGN\n"); print_binary(op, "*=", indent); break; case SLANG_OPER_DIVASSIGN: spaces(indent); printf("ASSIGN\n"); print_binary(op, "/=", indent); break; /*SLANG_OPER_MODASSIGN,*/ /*SLANG_OPER_LSHASSIGN,*/ /*SLANG_OPER_RSHASSIGN,*/ /*SLANG_OPER_ORASSIGN,*/ /*SLANG_OPER_XORASSIGN,*/ /*SLANG_OPER_ANDASSIGN,*/ case SLANG_OPER_SELECT: spaces(indent); printf("SLANG_OPER_SELECT n=%d\n", op->num_children); assert(op->num_children == 3); slang_print_tree(&op->children[0], indent+3); spaces(indent); printf("?\n"); slang_print_tree(&op->children[1], indent+3); spaces(indent); printf(":\n"); slang_print_tree(&op->children[2], indent+3); break; case SLANG_OPER_LOGICALOR: print_binary(op, "||", indent); break; case SLANG_OPER_LOGICALXOR: print_binary(op, "^^", indent); break; case SLANG_OPER_LOGICALAND: print_binary(op, "&&", indent); break; /*SLANG_OPER_BITOR*/ /*SLANG_OPER_BITXOR*/ /*SLANG_OPER_BITAND*/ case SLANG_OPER_EQUAL: print_binary(op, "==", indent); break; case SLANG_OPER_NOTEQUAL: print_binary(op, "!=", indent); break; case SLANG_OPER_LESS: print_binary(op, "<", indent); break; case SLANG_OPER_GREATER: print_binary(op, ">", indent); break; case SLANG_OPER_LESSEQUAL: print_binary(op, "<=", indent); break; case SLANG_OPER_GREATEREQUAL: print_binary(op, ">=", indent); break; /*SLANG_OPER_LSHIFT*/ /*SLANG_OPER_RSHIFT*/ case SLANG_OPER_ADD: print_binary(op, "+", indent); break; case SLANG_OPER_SUBTRACT: print_binary(op, "-", indent); break; case SLANG_OPER_MULTIPLY: print_binary(op, "*", indent); break; case SLANG_OPER_DIVIDE: print_binary(op, "/", indent); break; /*SLANG_OPER_MODULUS*/ case SLANG_OPER_PREINCREMENT: spaces(indent); printf("PRE++\n"); slang_print_tree(&op->children[0], indent+3); break; case SLANG_OPER_PREDECREMENT: spaces(indent); printf("PRE--\n"); slang_print_tree(&op->children[0], indent+3); break; case SLANG_OPER_PLUS: spaces(indent); printf("SLANG_OPER_PLUS\n"); break; case SLANG_OPER_MINUS: spaces(indent); printf("SLANG_OPER_MINUS\n"); break; /*SLANG_OPER_COMPLEMENT*/ case SLANG_OPER_NOT: spaces(indent); printf("NOT\n"); slang_print_tree(&op->children[0], indent+3); break; case SLANG_OPER_SUBSCRIPT: spaces(indent); printf("SLANG_OPER_SUBSCRIPT locals=%p outer=%p\n", (void *) op->locals, (void *) op->locals->outer_scope); print_generic(op, NULL, indent+3); break; case SLANG_OPER_CALL:#if 0 slang_function *fun = _slang_locate_function(A->space.funcs, oper->a_id, oper->children, oper->num_children, &A->space, A->atoms);#endif spaces(indent); printf("CALL %s(\n", (char *) op->a_id); for (i = 0; i < op->num_children; i++) { slang_print_tree(&op->children[i], indent+3); if (i + 1 < op->num_children) { spaces(indent + 3); printf(",\n"); } } spaces(indent); printf(")\n"); break; case SLANG_OPER_FIELD: spaces(indent); printf("FIELD %s of\n", (char*) op->a_id); slang_print_tree(&op->children[0], indent+3); break; case SLANG_OPER_POSTINCREMENT: spaces(indent); printf("POST++\n"); slang_print_tree(&op->children[0], indent+3); break; case SLANG_OPER_POSTDECREMENT: spaces(indent); printf("POST--\n"); slang_print_tree(&op->children[0], indent+3); break; default: printf("unknown op->type %d\n", (int) op->type); }}voidslang_print_function(const slang_function *f, GLboolean body){ GLuint i;#if 0 if (_mesa_strcmp((char *) f->header.a_name, "main") != 0) return;#endif printf("FUNCTION %s ( scope=%p\n", (char *) f->header.a_name, (void *) f->parameters); for (i = 0; i < f->param_count; i++) { print_variable(f->parameters->variables[i], 3); } printf(") param scope = %p\n", (void *) f->parameters); if (body && f->body) slang_print_tree(f->body, 0);}const char *slang_type_qual_string(slang_type_qualifier q){ switch (q) { case SLANG_QUAL_NONE: return "none"; case SLANG_QUAL_CONST: return "const"; case SLANG_QUAL_ATTRIBUTE: return "attribute"; case SLANG_QUAL_VARYING: return "varying"; case SLANG_QUAL_UNIFORM: return "uniform"; case SLANG_QUAL_OUT: return "out"; case SLANG_QUAL_INOUT: return "inout"; case SLANG_QUAL_FIXEDOUTPUT: return "fixedoutput"; case SLANG_QUAL_FIXEDINPUT: return "fixedinputk"; default: return "qual?"; }}static const char *slang_type_string(slang_type_specifier_type t){ switch (t) { case SLANG_SPEC_VOID: return "void"; case SLANG_SPEC_BOOL: return "bool"; case SLANG_SPEC_BVEC2: return "bvec2"; case SLANG_SPEC_BVEC3: return "bvec3"; case SLANG_SPEC_BVEC4: return "bvec4"; case SLANG_SPEC_INT: return "int"; case SLANG_SPEC_IVEC2: return "ivec2"; case SLANG_SPEC_IVEC3: return "ivec3"; case SLANG_SPEC_IVEC4: return "ivec4"; case SLANG_SPEC_FLOAT: return "float"; case SLANG_SPEC_VEC2: return "vec2"; case SLANG_SPEC_VEC3: return "vec3"; case SLANG_SPEC_VEC4: return "vec4"; case SLANG_SPEC_MAT2: return "mat2"; case SLANG_SPEC_MAT3: return "mat3"; case SLANG_SPEC_MAT4: return "mat4"; case SLANG_SPEC_SAMPLER1D: return "sampler1D"; case SLANG_SPEC_SAMPLER2D: return "sampler2D"; case SLANG_SPEC_SAMPLER3D: return "sampler3D"; case SLANG_SPEC_SAMPLERCUBE: return "samplerCube"; case SLANG_SPEC_SAMPLER1DSHADOW: return "sampler1DShadow"; case SLANG_SPEC_SAMPLER2DSHADOW: return "sampler2DShadow"; case SLANG_SPEC_SAMPLER2DRECT: return "sampler2DRect"; case SLANG_SPEC_SAMPLER2DRECTSHADOW: return "sampler2DRectShadow"; case SLANG_SPEC_STRUCT: return "struct"; case SLANG_SPEC_ARRAY: return "array"; default: return "type?"; }}static const char *slang_fq_type_string(const slang_fully_specified_type *t){ static char str[1000]; sprintf(str, "%s %s", slang_type_qual_string(t->qualifier), slang_type_string(t->specifier.type)); return str;}voidslang_print_type(const slang_fully_specified_type *t){ printf("%s %s", slang_type_qual_string(t->qualifier), slang_type_string(t->specifier.type));}#if 0static char *slang_var_string(const slang_variable *v){ static char str[1000]; sprintf(str, "%s : %s", (char *) v->a_name, slang_fq_type_string(&v->type)); return str;}#endifvoidslang_print_variable(const slang_variable *v){ printf("Name: %s\n", (char *) v->a_name); printf("Type: %s\n", slang_fq_type_string(&v->type));}void_slang_print_var_scope(const slang_variable_scope *vars, int indent){ GLuint i; spaces(indent); printf("Var scope %p %d vars:\n", (void *) vars, vars->num_variables); for (i = 0; i < vars->num_variables; i++) { spaces(indent + 3); printf("%s (at %p)\n", (char *) vars->variables[i]->a_name, (void*) (vars->variables + i)); } spaces(indent + 3); printf("outer_scope = %p\n", (void*) vars->outer_scope); if (vars->outer_scope) { /*spaces(indent + 3);*/ _slang_print_var_scope(vars->outer_scope, indent + 3); }}intslang_checksum_tree(const slang_operation *op){ int s = op->num_children; GLuint i; for (i = 0; i < op->num_children; i++) { s += slang_checksum_tree(&op->children[i]); } return s;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -