thrift-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "James E. King, III (JIRA)" <j...@apache.org>
Subject [jira] [Assigned] (THRIFT-4365) Perl generated code uses indirect object syntax, which occasionally causes compilation errors.
Date Fri, 20 Oct 2017 12:32:00 GMT

     [ https://issues.apache.org/jira/browse/THRIFT-4365?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

James E. King, III reassigned THRIFT-4365:
------------------------------------------

    Assignee: James E. King, III

> Perl generated code uses indirect object syntax, which occasionally causes compilation
errors.
> ----------------------------------------------------------------------------------------------
>
>                 Key: THRIFT-4365
>                 URL: https://issues.apache.org/jira/browse/THRIFT-4365
>             Project: Thrift
>          Issue Type: Bug
>          Components: Perl - Compiler
>    Affects Versions: 0.10.0
>            Reporter: Finn Isaac Norris Colman
>            Assignee: James E. King, III
>              Labels: easyfix
>
> When running the Thrift compiler for Perl the automatically generated code uses "Indirect
Object Syntax". So the generated code looks like this:
> {noformat}
> $self->{success} = new contact_types::Response();
> {noformat}
> It should look like this:
> {noformat}
> $self->{success} = contact_types::Response->new();
> {noformat}
> I found in some cases the indirect object syntax can actually cause failures because
Perl gets confused and thinks Response is a subroutine, with an error like this:
> {noformat}
> Undefined subroutine &user_types::Response called at gen-perl/user/Service.pm line
131.
> {noformat}
> If you look in https://perldoc.perl.org/perlobj.html under the "Indirect Object Syntax"
heading, you see it says:
> "Outside of the file handle case, use of this syntax is discouraged as it can confuse
the Perl interpreter. See below for more details.".
> Fixing this problem should be straight forward. In the https://github.com/apache/thrift/blob/master/compiler/cpp/src/thrift/generate/t_perl_generator.cc
it should instead of doing this:
> {noformat}
> out << indent() << "$" << prefix << " = new " << perl_namespace(tstruct->get_program())
>       << tstruct->get_name() << "();" << endl << indent()
<< "$xfer += $" << prefix
>       << "->read($input);" << endl;
> {noformat}
> Do this:
> {noformat}
> out << indent() << "$" << prefix << " = " << perl_namespace(tstruct->get_program())
>       << tstruct->get_name() << "->new();" << endl << indent()
<< "$xfer += $" << prefix
>       << "->read($input);" << endl;
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Mime
View raw message