Patch so that generated action methods do not exceed the 65535 byte JVM
method size limit. Supplied by eclipse-pdt project. - Drop rpm bug workaround scriptlet.
This commit is contained in:
parent
63f05d8277
commit
54bcb6ffb1
@ -34,7 +34,7 @@
|
|||||||
|
|
||||||
Name: java_cup
|
Name: java_cup
|
||||||
Version: 0.11a
|
Version: 0.11a
|
||||||
Release: 13%{?dist}
|
Release: 14%{?dist}
|
||||||
Epoch: 1
|
Epoch: 1
|
||||||
Summary: Java source interpreter
|
Summary: Java source interpreter
|
||||||
License: MIT
|
License: MIT
|
||||||
@ -49,6 +49,10 @@ Source3: LICENSE.txt
|
|||||||
Patch0: %{name}-build.patch
|
Patch0: %{name}-build.patch
|
||||||
Patch1: java_cup-0.11a-manifest.patch
|
Patch1: java_cup-0.11a-manifest.patch
|
||||||
|
|
||||||
|
# Patch from eclipe-pdt to get around generated actions methods exceeding the 65535 bytes limit:
|
||||||
|
# http://git.eclipse.org/c/pdt/org.eclipse.pdt.git/tree/plugins/org.eclipse.php.core.parser/javacup10k_split_do_action_method.diff
|
||||||
|
Patch2: javacup10k_split_do_action_method.diff
|
||||||
|
|
||||||
BuildRequires: ant
|
BuildRequires: ant
|
||||||
BuildRequires: java-devel
|
BuildRequires: java-devel
|
||||||
BuildRequires: jpackage-utils >= 0:1.5
|
BuildRequires: jpackage-utils >= 0:1.5
|
||||||
@ -59,7 +63,6 @@ BuildRequires: java_cup >= 1:0.11a
|
|||||||
BuildRequires: zip
|
BuildRequires: zip
|
||||||
|
|
||||||
Requires: java
|
Requires: java
|
||||||
Requires: jpackage-utils
|
|
||||||
BuildArch: noarch
|
BuildArch: noarch
|
||||||
|
|
||||||
|
|
||||||
@ -82,6 +85,9 @@ Documentation for java_cup.
|
|||||||
%setup -q
|
%setup -q
|
||||||
%patch0 -b .build
|
%patch0 -b .build
|
||||||
%patch1 -p1 -b .manifest
|
%patch1 -p1 -b .manifest
|
||||||
|
pushd src
|
||||||
|
%patch2 -p1 -b .orig
|
||||||
|
popd
|
||||||
cp %{SOURCE1} pom.xml
|
cp %{SOURCE1} pom.xml
|
||||||
cp %{SOURCE3} .
|
cp %{SOURCE3} .
|
||||||
|
|
||||||
@ -135,16 +141,16 @@ cp -pr dist/javadoc/* %{buildroot}%{_javadocdir}/%{name}
|
|||||||
%files manual
|
%files manual
|
||||||
%doc manual.html LICENSE.txt
|
%doc manual.html LICENSE.txt
|
||||||
|
|
||||||
%pre javadoc
|
|
||||||
# workaround for rpm bug, can be removed in F-17
|
|
||||||
[ $1 -gt 1 ] && [ -L %{_javadocdir}/%{name} ] && \
|
|
||||||
rm -rf $(readlink -f %{_javadocdir}/%{name}) %{_javadocdir}/%{name} || :
|
|
||||||
|
|
||||||
%files javadoc
|
%files javadoc
|
||||||
%doc LICENSE.txt
|
%doc LICENSE.txt
|
||||||
%{_javadocdir}/%{name}
|
%{_javadocdir}/%{name}
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Fri Aug 30 2013 Mat Booth <fedora@matbooth.co.uk> - 1:0.11a-14
|
||||||
|
- Patch so that generated action methods do not exceed the 65535 byte JVM
|
||||||
|
method size limit. Supplied by eclipse-pdt project.
|
||||||
|
- Drop rpm bug workaround scriptlet.
|
||||||
|
|
||||||
* Sat Aug 03 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1:0.11a-13
|
* Sat Aug 03 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1:0.11a-13
|
||||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
|
||||||
|
|
||||||
|
|||||||
74
javacup10k_split_do_action_method.diff
Normal file
74
javacup10k_split_do_action_method.diff
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
# This patch splits the main do_action() method in order to solve the JVM memory limitation problem
|
||||||
|
#
|
||||||
|
--- java_cup_v10k.old/java_cup/emit.java 1999-07-24 15:51:33.000000000 +0300
|
||||||
|
+++ java_cup_v10k/java_cup/emit.java 2009-01-21 11:12:13.000000000 +0200
|
||||||
|
@@ -340,7 +340,7 @@
|
||||||
|
out.println(" this.parser = parser;");
|
||||||
|
out.println(" }");
|
||||||
|
|
||||||
|
- /* action method head */
|
||||||
|
+ /* main action method head */
|
||||||
|
out.println();
|
||||||
|
out.println(" /** Method with the actual generated action code. */");
|
||||||
|
out.println(" public final java_cup.runtime.Symbol " +
|
||||||
|
@@ -352,6 +352,38 @@
|
||||||
|
out.println(" throws java.lang.Exception");
|
||||||
|
out.println(" {");
|
||||||
|
|
||||||
|
+ /* split action code into several methods because of the JVM limitation of method size to 64KB */
|
||||||
|
+ final int splitBase = 100;
|
||||||
|
+ for (int splitIdx = 0; splitIdx < production.number(); splitIdx += splitBase) {
|
||||||
|
+ if (splitIdx > 0) {
|
||||||
|
+ out.print(" else ");
|
||||||
|
+ }
|
||||||
|
+ if (splitIdx + splitBase < production.number()) {
|
||||||
|
+ out.println(" if (" + pre("act_num") + " < " + (splitIdx + splitBase) + ") {");
|
||||||
|
+ } else {
|
||||||
|
+ out.println(" {");
|
||||||
|
+ }
|
||||||
|
+ out.println(" return " + pre("do_action") + ((splitIdx + splitBase) / splitBase) + "(");
|
||||||
|
+ out.println(" " + pre("act_num, ") + pre("parser,") + pre("stack,") + pre("top") + ");");
|
||||||
|
+ out.println(" }");
|
||||||
|
+ }
|
||||||
|
+ out.println(" }");
|
||||||
|
+ out.println();
|
||||||
|
+
|
||||||
|
+ for (int splitIdx = 0; splitIdx < production.number(); splitIdx += splitBase) {
|
||||||
|
+
|
||||||
|
+ /* splitted action method head */
|
||||||
|
+ out.println();
|
||||||
|
+ out.println(" /** Method with the actual generated action code. */");
|
||||||
|
+ out.println(" public final java_cup.runtime.Symbol " +
|
||||||
|
+ pre("do_action") + ((splitIdx + splitBase)/splitBase) + "(");
|
||||||
|
+ out.println(" int " + pre("act_num,"));
|
||||||
|
+ out.println(" java_cup.runtime.lr_parser " + pre("parser,"));
|
||||||
|
+ out.println(" java.util.Stack " + pre("stack,"));
|
||||||
|
+ out.println(" int " + pre("top)"));
|
||||||
|
+ out.println(" throws java.lang.Exception");
|
||||||
|
+ out.println(" {");
|
||||||
|
+
|
||||||
|
/* declaration of result symbol */
|
||||||
|
/* New declaration!! now return Symbol
|
||||||
|
6/13/96 frankf */
|
||||||
|
@@ -365,9 +397,9 @@
|
||||||
|
out.println(" {");
|
||||||
|
|
||||||
|
/* emit action code for each production as a separate case */
|
||||||
|
- for (Enumeration p = production.all(); p.hasMoreElements(); )
|
||||||
|
- {
|
||||||
|
- prod = (production)p.nextElement();
|
||||||
|
+
|
||||||
|
+ for (int prodIdx = splitIdx; prodIdx < production.number() && prodIdx < splitIdx + splitBase; ++prodIdx) {
|
||||||
|
+ prod = (production)production.find(prodIdx);
|
||||||
|
|
||||||
|
/* case label */
|
||||||
|
out.println(" /*. . . . . . . . . . . . . . . . . . . .*/");
|
||||||
|
@@ -471,6 +503,8 @@
|
||||||
|
/* end of method */
|
||||||
|
out.println(" }");
|
||||||
|
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
/* end of class */
|
||||||
|
out.println("}");
|
||||||
|
out.println();
|
||||||
Loading…
Reference in New Issue
Block a user