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 2009/08/25 03:56:58 UTC

svn commit: r807453 - in /lucene/lucy/trunk/boilerplater: lib/Boilerplater/CBlock.pm lib/Boilerplater/Parser.pm t/401-c_block.t

Author: marvin
Date: Tue Aug 25 01:56:56 2009
New Revision: 807453

URL: http://svn.apache.org/viewvc?rev=807453&view=rev
Log:
Commit LUCY-24, adding Boilerplater::CBlock.

Added:
    lucene/lucy/trunk/boilerplater/lib/Boilerplater/CBlock.pm   (with props)
    lucene/lucy/trunk/boilerplater/t/401-c_block.t   (with props)
Modified:
    lucene/lucy/trunk/boilerplater/lib/Boilerplater/Parser.pm

Added: lucene/lucy/trunk/boilerplater/lib/Boilerplater/CBlock.pm
URL: http://svn.apache.org/viewvc/lucene/lucy/trunk/boilerplater/lib/Boilerplater/CBlock.pm?rev=807453&view=auto
==============================================================================
--- lucene/lucy/trunk/boilerplater/lib/Boilerplater/CBlock.pm (added)
+++ lucene/lucy/trunk/boilerplater/lib/Boilerplater/CBlock.pm Tue Aug 25 01:56:56 2009
@@ -0,0 +1,91 @@
+use strict;
+use warnings;
+
+package Boilerplater::CBlock;
+use Boilerplater::Util qw( verify_args );
+use Carp;
+
+our %new_PARAMS = ( contents => undef, );
+
+sub new {
+    my $either = shift;
+    verify_args( \%new_PARAMS, @_ ) or confess $@;
+    my $self = bless { %new_PARAMS, @_ }, ref($either) || $either;
+    confess("Missing required param 'contents'")
+        unless defined $self->{contents};
+    return $self;
+}
+
+# Accessors.
+sub get_contents { shift->{contents} }
+
+1;
+
+__END__
+
+__POD__
+
+=head1 NAME
+
+Boilerplater::CBlock - A block of embedded C code.
+
+=head1 DESCRIPTION
+
+CBlock exists to support embedding literal C code within .bp files:
+
+    parcel Boil;
+
+    class Foo {
+        /** Print a greeting. 
+         */
+        public inline void
+        Say_Hello(Foo *self);
+    }
+
+    __C__
+    #include <stdio.h>
+    static CHY_INLINE void
+    boil_Foo_say_hello(boil_Foo *self)
+    {
+        printf("Greetings, Earthlings.\n");
+    }
+    __END_C__
+
+=head1 METHODS
+
+=head2 new
+
+    my $c_block = Boilerplater::CBlock->new(
+        contents => $text,
+    );
+
+=over
+
+=item * B<contents> - Raw C code.
+
+=back
+
+=head2 get_contents
+
+Accessor.
+
+=head1 COPYRIGHT AND LICENSE
+
+    /**
+     * Copyright 2009 The Apache Software Foundation
+     *
+     * Licensed under the Apache License, Version 2.0 (the "License");
+     * you may not use this file except in compliance with the License.
+     * You may obtain a copy of the License at
+     *
+     *     http://www.apache.org/licenses/LICENSE-2.0
+     *
+     * Unless required by applicable law or agreed to in writing, software
+     * distributed under the License is distributed on an "AS IS" BASIS,
+     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+     * implied.  See the License for the specific language governing
+     * permissions and limitations under the License.
+     */
+
+=cut
+

Propchange: lucene/lucy/trunk/boilerplater/lib/Boilerplater/CBlock.pm
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: lucene/lucy/trunk/boilerplater/lib/Boilerplater/Parser.pm
URL: http://svn.apache.org/viewvc/lucene/lucy/trunk/boilerplater/lib/Boilerplater/Parser.pm?rev=807453&r1=807452&r2=807453&view=diff
==============================================================================
--- lucene/lucy/trunk/boilerplater/lib/Boilerplater/Parser.pm (original)
+++ lucene/lucy/trunk/boilerplater/lib/Boilerplater/Parser.pm Tue Aug 25 01:56:56 2009
@@ -19,6 +19,7 @@
 use Boilerplater::Function;
 use Boilerplater::Method;
 use Boilerplater::Class;
+use Boilerplater::CBlock;
 use Carp;
 
 our $grammar = <<'END_GRAMMAR';
@@ -31,6 +32,12 @@
         $parcel;
     }
 
+embed_c:
+    '__C__'
+    /.*?(?=__END_C__)/s  
+    '__END_C__'
+    { Boilerplater::CBlock->new( contents => $item[2] ) }
+
 class_declaration:
     docucomment(?)
     exposure_specifier(?) class_modifier(s?) 'class' class_name 

Added: lucene/lucy/trunk/boilerplater/t/401-c_block.t
URL: http://svn.apache.org/viewvc/lucene/lucy/trunk/boilerplater/t/401-c_block.t?rev=807453&view=auto
==============================================================================
--- lucene/lucy/trunk/boilerplater/t/401-c_block.t (added)
+++ lucene/lucy/trunk/boilerplater/t/401-c_block.t Tue Aug 25 01:56:56 2009
@@ -0,0 +1,21 @@
+use strict;
+use warnings;
+
+use Test::More tests => 5;
+
+use Boilerplater::CBlock;
+use Boilerplater::Parser;
+
+my $parser = Boilerplater::Parser->new;
+
+my $block = Boilerplater::CBlock->new( contents => 'int foo;' );
+isa_ok( $block, "Boilerplater::CBlock" );
+is( $block->get_contents, 'int foo;', "get_contents" );
+eval { Boilerplater::CBlock->new };
+like( $@, qr/contents/, "content required" );
+
+$block = $parser->embed_c(qq| __C__\n#define FOO 1\n__END_C__  |);
+
+isa_ok( $block, "Boilerplater::CBlock" );
+is( $block->get_contents, "#define FOO 1\n", "parse embed_c" );
+

Propchange: lucene/lucy/trunk/boilerplater/t/401-c_block.t
------------------------------------------------------------------------------
    svn:eol-style = native