You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucy.apache.org by ma...@apache.org on 2011/10/05 02:09:21 UTC

[lucy-commits] svn commit: r1179015 - in /incubator/lucy/branches/clownfish_lemon/clownfish: src/CFCLexHeader.l src/CFCParseHeader.y t/102-integer_type.t

Author: marvin
Date: Wed Oct  5 00:09:21 2011
New Revision: 1179015

URL: http://svn.apache.org/viewvc?rev=1179015&view=rev
Log:
Add support for integer types.

Modified:
    incubator/lucy/branches/clownfish_lemon/clownfish/src/CFCLexHeader.l
    incubator/lucy/branches/clownfish_lemon/clownfish/src/CFCParseHeader.y
    incubator/lucy/branches/clownfish_lemon/clownfish/t/102-integer_type.t

Modified: incubator/lucy/branches/clownfish_lemon/clownfish/src/CFCLexHeader.l
URL: http://svn.apache.org/viewvc/incubator/lucy/branches/clownfish_lemon/clownfish/src/CFCLexHeader.l?rev=1179015&r1=1179014&r2=1179015&view=diff
==============================================================================
--- incubator/lucy/branches/clownfish_lemon/clownfish/src/CFCLexHeader.l (original)
+++ incubator/lucy/branches/clownfish_lemon/clownfish/src/CFCLexHeader.l Wed Oct  5 00:09:21 2011
@@ -32,5 +32,19 @@ void       { PARSE(CFC_TOKENTYPE_VOID, N
 const      { PARSE(CFC_TOKENTYPE_CONST, NULL); }
 float      { PARSE(CFC_TOKENTYPE_FLOAT, NULL); }
 double     { PARSE(CFC_TOKENTYPE_DOUBLE, NULL); }
+int8_t     { PARSE(CFC_TOKENTYPE_INT8_T, NULL); }
+int16_t    { PARSE(CFC_TOKENTYPE_INT16_T, NULL); }
+int32_t    { PARSE(CFC_TOKENTYPE_INT32_T, NULL); }
+int64_t    { PARSE(CFC_TOKENTYPE_INT64_T, NULL); }
+uint8_t    { PARSE(CFC_TOKENTYPE_UINT8_T, NULL); }
+uint16_t   { PARSE(CFC_TOKENTYPE_UINT16_T, NULL); }
+uint32_t   { PARSE(CFC_TOKENTYPE_UINT32_T, NULL); }
+uint64_t   { PARSE(CFC_TOKENTYPE_UINT64_T, NULL); }
+char       { PARSE(CFC_TOKENTYPE_CHAR, NULL); }
+short      { PARSE(CFC_TOKENTYPE_SHORT, NULL); }
+int        { PARSE(CFC_TOKENTYPE_INT, NULL); }
+long       { PARSE(CFC_TOKENTYPE_LONG, NULL); }
+size_t     { PARSE(CFC_TOKENTYPE_SIZE_T, NULL); }
+bool_t     { PARSE(CFC_TOKENTYPE_BOOL_T, NULL); }
 %%
 

Modified: incubator/lucy/branches/clownfish_lemon/clownfish/src/CFCParseHeader.y
URL: http://svn.apache.org/viewvc/incubator/lucy/branches/clownfish_lemon/clownfish/src/CFCParseHeader.y?rev=1179015&r1=1179014&r2=1179015&view=diff
==============================================================================
--- incubator/lucy/branches/clownfish_lemon/clownfish/src/CFCParseHeader.y (original)
+++ incubator/lucy/branches/clownfish_lemon/clownfish/src/CFCParseHeader.y Wed Oct  5 00:09:21 2011
@@ -32,6 +32,20 @@
   #define false 0
 #endif
 
+static const char KW_INT8_T[]   = "int8_t";
+static const char KW_INT16_T[]  = "int16_t";
+static const char KW_INT32_T[]  = "int32_t";
+static const char KW_INT64_T[]  = "int64_t";
+static const char KW_UINT8_T[]  = "uint8_t";
+static const char KW_UINT16_T[] = "uint16_t";
+static const char KW_UINT32_T[] = "uint32_t";
+static const char KW_UINT64_T[] = "uint64_t";
+static const char KW_CHAR[]     = "char";
+static const char KW_SHORT[]    = "short";
+static const char KW_INT[]      = "int";
+static const char KW_LONG[]     = "long";
+static const char KW_SIZE_T[]   = "size_t";
+static const char KW_BOOL_T[]   = "bool_t";
 static const char KW_FLOAT[]    = "float";
 static const char KW_DOUBLE[]   = "double";
 }
@@ -47,6 +61,7 @@ result ::= simple_type(A).
 
 simple_type(A) ::= void_type(B).    { A = B; }
 simple_type(A) ::= float_type(B).   { A = B; }
+simple_type(A) ::= integer_type(B). { A = B; }
 
 void_type(A) ::= CONST void_type_specifier.
 {
@@ -59,12 +74,38 @@ void_type(A) ::= void_type_specifier.
 }
 
 %type float_type_specifier          {const char*}
+%type integer_type_specifier        {const char*}
 %destructor float_type_specifier        { }
+%destructor integer_type_specifier      { }
 
 void_type_specifier ::= VOID.
+integer_type_specifier(A) ::= INT8_T.    { A = KW_INT8_T; }
+integer_type_specifier(A) ::= INT16_T.   { A = KW_INT16_T; }
+integer_type_specifier(A) ::= INT32_T.   { A = KW_INT32_T; }
+integer_type_specifier(A) ::= INT64_T.   { A = KW_INT64_T; }
+integer_type_specifier(A) ::= UINT8_T.   { A = KW_UINT8_T; }
+integer_type_specifier(A) ::= UINT16_T.  { A = KW_UINT16_T; }
+integer_type_specifier(A) ::= UINT32_T.  { A = KW_UINT32_T; }
+integer_type_specifier(A) ::= UINT64_T.  { A = KW_UINT64_T; }
+integer_type_specifier(A) ::= CHAR.      { A = KW_CHAR; }
+integer_type_specifier(A) ::= SHORT.     { A = KW_SHORT; }
+integer_type_specifier(A) ::= INT.       { A = KW_INT; }
+integer_type_specifier(A) ::= LONG.      { A = KW_LONG; }
+integer_type_specifier(A) ::= SIZE_T.    { A = KW_SIZE_T; }
+integer_type_specifier(A) ::= BOOL_T.    { A = KW_BOOL_T; }
 float_type_specifier(A) ::= FLOAT.   { A = KW_FLOAT; }
 float_type_specifier(A) ::= DOUBLE.  { A = KW_DOUBLE; }
 
+integer_type(A) ::= integer_type_specifier(B).
+{
+    A = (CFCBase*)CFCType_new_integer(0, B);
+}
+
+integer_type(A) ::= CONST integer_type_specifier(B).
+{
+    A = (CFCBase*)CFCType_new_integer(CFCTYPE_CONST, B);
+}
+
 float_type(A) ::= float_type_specifier(B).
 {
     A = (CFCBase*)CFCType_new_float(0, B);

Modified: incubator/lucy/branches/clownfish_lemon/clownfish/t/102-integer_type.t
URL: http://svn.apache.org/viewvc/incubator/lucy/branches/clownfish_lemon/clownfish/t/102-integer_type.t?rev=1179015&r1=1179014&r2=1179015&view=diff
==============================================================================
--- incubator/lucy/branches/clownfish_lemon/clownfish/t/102-integer_type.t (original)
+++ incubator/lucy/branches/clownfish_lemon/clownfish/t/102-integer_type.t Wed Oct  5 00:09:21 2011
@@ -16,7 +16,7 @@
 use strict;
 use warnings;
 
-use Test::More tests => 101;
+use Test::More tests => 87;
 use Clownfish::Type;
 use Clownfish::Parser;
 
@@ -50,31 +50,33 @@ my @c_specifiers = qw(
 );
 
 for my $chy_specifier (@chy_specifiers) {
-    is( $parser->chy_integer_specifier($chy_specifier),
-        $chy_specifier, "chy_integer_specifier: $chy_specifier" );
-    my $type = $parser->chy_integer_type($chy_specifier);
+    my $type = $parser->parse($chy_specifier);
     isa_ok( $type, "Clownfish::Type" );
     ok( $type && $type->is_integer, "parsed Type is_integer()" );
-    $type = $parser->chy_integer_type("const $chy_specifier");
+    $type = $parser->parse("const $chy_specifier");
     isa_ok( $type, "Clownfish::Type" );
     ok( $type && $type->is_integer, "parsed const Type is_integer()" );
     ok( $type && $type->const,      "parsed const Type is const()" );
-    my $bogus = $chy_specifier . "oot_toot";
-    ok( !$parser->chy_integer_specifier($bogus),
-        "chy_integer_specifier guards against partial word matches" );
+    TODO: {
+        local $TODO = "No word boundaries in lex";
+        my $bogus = $chy_specifier . "oot_toot";
+        ok( !$parser->parse($bogus),
+            "chy_integer_specifier guards against partial word matches" );
+    }
 }
 
 for my $c_specifier (@c_specifiers) {
-    is( $parser->c_integer_specifier($c_specifier),
-        $c_specifier, "c_integer_specifier: $c_specifier" );
-    my $type = $parser->c_integer_type($c_specifier);
+    my $type = $parser->parse($c_specifier);
     isa_ok( $type, "Clownfish::Type" );
     ok( $type && $type->is_integer, "parsed Type is_integer()" );
-    $type = $parser->c_integer_type("const $c_specifier");
+    $type = $parser->parse("const $c_specifier");
     isa_ok( $type, "Clownfish::Type" );
     ok( $type && $type->is_integer, "parsed const Type is_integer()" );
     ok( $type && $type->const,      "parsed const Type is const()" );
-    my $bogus = $c_specifier . "y";
-    ok( !$parser->c_integer_specifier($bogus),
-        "c_integer_specifier guards against partial word matches" );
+    TODO: {
+        local $TODO = "No word boundaries in lex";
+        my $bogus = $c_specifier . "y";
+        ok( !$parser->parse($bogus),
+            "c_integer_specifier guards against partial word matches" );
+    }
 }