[ 
https://issues.apache.org/jira/browse/PIG-1998?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13025600#comment-13025600
 ] 

Xuefu Zhang commented on PIG-1998:
----------------------------------

For patch PIG-1998_2.patch:

1. in the following grammar, the second rule should be just ^(RETURN_VAL). With 
that, "return void" is equivalent to return zero alias. So in the code, we 
don't need to do this kind of check: rets.size() == 1 && 
rets.get(0).equals("void")

+macro_return_clause 
+    : RETURNS alias (COMMA alias)*
+        -> ^(RETURN_VAL alias+)
+    | RETURNS VOID 
+        -> ^(RETURN_VAL VOID)

2. The bigger concern is actually the newly added method validate(). I don't 
think the StreamingTokenizer will meet our needs. For instance, it's not able 
to recognized Pig single line comments such as:

 -- this is a single line comment.

Even if this isn't a problem, the maintenance overhead could evolve to a 
nightmare for us in long run. I don't necessarily have a better idea, but I 
think we should at least give more thoughts on this.


> Allow macro to return void
> --------------------------
>
>                 Key: PIG-1998
>                 URL: https://issues.apache.org/jira/browse/PIG-1998
>             Project: Pig
>          Issue Type: Improvement
>          Components: impl
>    Affects Versions: 0.9.0
>            Reporter: Richard Ding
>            Assignee: Richard Ding
>             Fix For: 0.9.0
>
>         Attachments: PIG-1998_1.patch, PIG-1998_2.patch
>
>
> Pig macro is allowed to not have output alias. But this property isn't clear 
> from macro definition and macro invocation (macro inline). Here we propose to 
> make it clear:
> 1. If a macro doesn't output any alias, it must specify void as return value. 
> For example:
> {code}  
> define mymacro(...) returns void {
>    ... ...
> };
> {code}
> 2. If a macro doesn't output any alias, it must be invoked without return 
> value. For example, to invoke above macro, just specify:
> {code}
> mymacro(...);
> {code}
> 3. Any non-void return alias in the macro definition must exist in the macro 
> body and be prefixed with $. For example:
> {code}  
> define mymacro(...) returns B {
>    ... ...
>    $B = filter ...;
> };
> {code}

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to