From 89847dfaa014bb17bc68ca1167d3b295c5d3a357 Mon Sep 17 00:00:00 2001 From: Jens Geyer Date: Fri, 2 May 2014 23:50:04 +0200 Subject: [PATCH] THRIFT-2499 Compiler: allow annotations without "= value" Client: compiler general Patch: Dave Watson This closes #87 commit 078ce57e816eeb3697acf6f2c50e09526da73d3b Author: Dave Watson Date: 2014-03-21T19:42:31Z [thrift] Compiler: allow annotations without "= value" Summary: (foo) is the same as (foo = 1), for brevity Test: AnnotationTest.thrift still compiles --- compiler/cpp/src/thrifty.yy | 19 ++++++++++++++++--- test/AnnotationTest.thrift | 1 + 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/compiler/cpp/src/thrifty.yy b/compiler/cpp/src/thrifty.yy index 62e13bad..da5c562f 100644 --- a/compiler/cpp/src/thrifty.yy +++ b/compiler/cpp/src/thrifty.yy @@ -187,6 +187,7 @@ const int struct_is_union = 1; %type TypeAnnotations %type TypeAnnotationList %type TypeAnnotation +%type TypeAnnotationValue %type Field %type FieldIdentifier @@ -1273,12 +1274,24 @@ TypeAnnotationList: } TypeAnnotation: - tok_identifier '=' tok_literal CommaOrSemicolonOptional + tok_identifier TypeAnnotationValue CommaOrSemicolonOptional { - pdebug("TypeAnnotation -> tok_identifier = tok_literal"); + pdebug("TypeAnnotation -> TypeAnnotationValue"); $$ = new t_annotation; $$->key = $1; - $$->val = $3; + $$->val = $2; + } + +TypeAnnotationValue: + '=' tok_literal + { + pdebug("TypeAnnotationValue -> = tok_literal"); + $$ = $2; + } +| + { + pdebug("TypeAnnotationValue ->"); + $$ = strdup("1"); } %% diff --git a/test/AnnotationTest.thrift b/test/AnnotationTest.thrift index dac476f5..06bf5719 100644 --- a/test/AnnotationTest.thrift +++ b/test/AnnotationTest.thrift @@ -28,6 +28,7 @@ struct foo { cpp.type = "DenseFoo", python.type = "DenseFoo", java.final = "", + annotation.without.value, ) exception foo_error { -- 2.17.1