From df0f06adcddb9c40b7cfe736a1a106a874f3513e Mon Sep 17 00:00:00 2001 From: Tavian Barnes Date: Mon, 8 Mar 2010 23:21:31 -0500 Subject: Don't treat colors and vectors as different types. This allows things like 0.5*White, where White was #defined to be a color. POV-Ray's colors.inc almost parses now. --- dimension/common.rules | 6 +----- dimension/grammar.epilogue | 2 -- dimension/parse.h | 2 -- dimension/realize.c | 4 ++-- 4 files changed, 3 insertions(+), 11 deletions(-) (limited to 'dimension') diff --git a/dimension/common.rules b/dimension/common.rules index cc7411f..72480c0 100644 --- a/dimension/common.rules +++ b/dimension/common.rules @@ -403,11 +403,9 @@ ARITH_EXPR: FLOAT_LITERAL COLOR: COLOR_BODY { $$ = $1; - $$.type = DMNSN_AST_COLOR; } | "color" COLOR_BODY { $$ = $2; - $$.type = DMNSN_AST_COLOR; } ; @@ -477,7 +475,7 @@ COLOR_KEYWORD_ITEM: "identifier" { "Unbound identifier '%s'", $1); free($1); YYERROR; - } else if (symbol->type != DMNSN_AST_COLOR) { + } else { dmnsn_astnode eval = dmnsn_eval_vector(*symbol, symtable); if (eval.type == DMNSN_AST_NONE) { free($1); @@ -486,8 +484,6 @@ COLOR_KEYWORD_ITEM: "identifier" { dmnsn_copy_children($0, eval); dmnsn_delete_astnode(eval); - } else { - dmnsn_copy_children($0, *symbol); } free($1); diff --git a/dimension/grammar.epilogue b/dimension/grammar.epilogue index 877b876..6ea459d 100644 --- a/dimension/grammar.epilogue +++ b/dimension/grammar.epilogue @@ -181,8 +181,6 @@ dmnsn_astnode_string(dmnsn_astnode_type astnode_type) dmnsn_astnode_map(DMNSN_AST_DOT_T, ".t"); dmnsn_astnode_map(DMNSN_AST_DOT_TRANSMIT, ".transmit"); - dmnsn_astnode_map(DMNSN_AST_COLOR, "color"); - dmnsn_astnode_map(DMNSN_AST_IDENTIFIER, "identifier"); dmnsn_astnode_map(DMNSN_AST_STRING, "string"); diff --git a/dimension/parse.h b/dimension/parse.h index 9511eab..8a5bb93 100644 --- a/dimension/parse.h +++ b/dimension/parse.h @@ -95,8 +95,6 @@ typedef enum { DMNSN_AST_AND, DMNSN_AST_OR, - DMNSN_AST_COLOR, - DMNSN_AST_IDENTIFIER, DMNSN_AST_STRING, diff --git a/dimension/realize.c b/dimension/realize.c index e5dfcb4..c41ac93 100644 --- a/dimension/realize.c +++ b/dimension/realize.c @@ -59,7 +59,7 @@ dmnsn_realize_vector(dmnsn_astnode astnode) static dmnsn_color dmnsn_realize_color(dmnsn_astnode astnode) { - dmnsn_assert(astnode.type == DMNSN_AST_COLOR, "Expected a color."); + dmnsn_assert(astnode.type == DMNSN_AST_VECTOR, "Expected a vector."); dmnsn_astnode rnode, gnode, bnode, fnode, tnode; dmnsn_array_get(astnode.children, 0, &rnode); @@ -349,7 +349,7 @@ dmnsn_realize_pigment(dmnsn_astnode astnode) case DMNSN_AST_NONE: break; - case DMNSN_AST_COLOR: + case DMNSN_AST_VECTOR: color = dmnsn_realize_color(color_node); pigment = dmnsn_new_solid_pigment(color); if (!pigment) { -- cgit v1.2.3