-
-
Notifications
You must be signed in to change notification settings - Fork 925
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- 9.4.12.0
- 9.4.11.0
- 9.4.10.0
- 9.4.9.0
- 9.4.8.0
- 9.4.7.0
- 9.4.6.0
- 9.4.5.0
- 9.4.4.0
- 9.4.3.0
- 9.4.2.0
- 9.4.1.0
- 9.4.0.0
- 9.3.15.0
- 9.3.14.0
- 9.3.13.0
- 9.3.12.0
- 9.3.11.0
- 9.3.10.0
- 9.3.9.0
- 9.3.8.0
- 9.3.7.0
- 9.3.6.0
- 9.3.5.0
- 9.3.4.0
- 9.3.3.0
- 9.3.2.0
- 9.3.1.0
- 9.3.0.0
- 9.2.21.0
- 9.2.20.1
- 9.2.20.0
- 9.2.19.0
- 9.2.18.0
- 9.2.17.0
- 9.2.16.0
- 9.2.15.0
- 9.2.14.0
- 9.2.13.0
- 9.2.12.0
- 9.2.11.1
- 9.2.11.0
- 9.2.10.0
- 9.2.9.0
- 9.2.8.0
- 9.2.7.0
- 9.2.6.0
- 9.2.5.0
- 9.2.4.1
- 9.2.4.0
- 9.2.3.0
- 9.2.2.0
- 9.2.1.0
- 9.2.0.0
- 9.1.17.0
- 9.1.16.0
- 9.1.15.0
- 9.1.14.0
- 9.1.13.0
- 9.1.12.0
- 9.1.11.0
- 9.1.10.0
- 9.1.9.0
- 9.1.8.0
- 9.1.7.0
1 parent
92c1ab5
commit 540ce66
Showing
12 changed files
with
539 additions
and
187 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
33 changes: 33 additions & 0 deletions
33
truffle/src/main/java/org/jruby/truffle/core/regexp/RegexpSupport.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
/***** BEGIN LICENSE BLOCK ***** | ||
* Version: EPL 1.0/GPL 2.0/LGPL 2.1 | ||
* | ||
* The contents of this file are subject to the Eclipse Public | ||
* License Version 1.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.eclipse.org/legal/epl-v10.html | ||
* | ||
* Software distributed under the License is distributed on an "AS | ||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or | ||
* implied. See the License for the specific language governing | ||
* rights and limitations under the License. | ||
* | ||
* Alternatively, the contents of this file may be used under the terms of | ||
* either of the GNU General Public License Version 2 or later (the "GPL"), | ||
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), | ||
* in which case the provisions of the GPL or the LGPL are applicable instead | ||
* of those above. If you wish to allow use of your version of this file only | ||
* under the terms of either the GPL or the LGPL, and not to allow others to | ||
* use your version of this file under the terms of the EPL, indicate your | ||
* decision by deleting the provisions above and replace them with the notice | ||
* and other provisions required by the GPL or the LGPL. If you do not delete | ||
* the provisions above, a recipient may use your version of this file under | ||
* the terms of any one of the EPL, the GPL or the LGPL. | ||
***** END LICENSE BLOCK *****/ | ||
|
||
package org.jruby.truffle.core.regexp; | ||
|
||
public class RegexpSupport { | ||
|
||
public enum ErrorMode {RAISE, PREPROCESS, DESC} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
212 changes: 212 additions & 0 deletions
212
truffle/src/main/java/org/jruby/truffle/util/Random.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,212 @@ | ||
/***** BEGIN LICENSE BLOCK ***** | ||
* Version: EPL 1.0/GPL 2.0/LGPL 2.1 | ||
* | ||
* The contents of this file are subject to the Eclipse Public | ||
* License Version 1.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.eclipse.org/legal/epl-v10.html | ||
* | ||
* Software distributed under the License is distributed on an "AS | ||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or | ||
* implied. See the License for the specific language governing | ||
* rights and limitations under the License. | ||
* | ||
* Alternatively, the contents of this file may be used under the terms of | ||
* either of the GNU General Public License Version 2 or later (the "GPL"), | ||
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), | ||
* in which case the provisions of the GPL or the LGPL are applicable instead | ||
* of those above. If you wish to allow use of your version of this file only | ||
* under the terms of either the GPL or the LGPL, and not to allow others to | ||
* use your version of this file under the terms of the EPL, indicate your | ||
* decision by deleting the provisions above and replace them with the notice | ||
* and other provisions required by the GPL or the LGPL. If you do not delete | ||
* the provisions above, a recipient may use your version of this file under | ||
* the terms of any one of the EPL, the GPL or the LGPL. | ||
***** END LICENSE BLOCK *****/ | ||
package org.jruby.truffle.util; | ||
|
||
import java.math.BigInteger; | ||
import java.util.Arrays; | ||
|
||
public class Random { | ||
public static int N = 624; | ||
private static int M = 397; | ||
private static int MATRIX_A = 0x9908b0df; /* constant vector a */ | ||
private static int UMASK = 0x80000000; /* most significant w-r bits */ | ||
private static int LMASK = 0x7fffffff; /* least significant r bits */ | ||
|
||
private static int MIXBITS(int u, int v) { | ||
return (u & UMASK) | (v & LMASK); | ||
} | ||
|
||
private static int TWIST(int u, int v) { | ||
return (MIXBITS(u, v) >>> 1) ^ (((v & 1) != 0) ? MATRIX_A : 0); | ||
} | ||
|
||
private final int[] state = new int[N]; | ||
private int left = 1; | ||
|
||
public Random() { | ||
} | ||
|
||
public Random(int s) { | ||
initGenrand(s); | ||
} | ||
|
||
public Random(int[] initKey) { | ||
initByArray(initKey); | ||
} | ||
|
||
public Random(Random orig) { | ||
System.arraycopy(orig.state, 0, this.state, 0, this.state.length); | ||
this.left = orig.left; | ||
} | ||
|
||
public Random(int[] state, int left) { | ||
if (state.length != this.state.length) { | ||
throw new IllegalStateException("wrong state length: " + state.length); | ||
} | ||
System.arraycopy(state, 0, this.state, 0, this.state.length); | ||
this.left = left; | ||
} | ||
|
||
@Override | ||
public boolean equals(Object obj) { | ||
if (this == obj) { | ||
return true; | ||
} else if (!(obj instanceof Random)) { | ||
return false; | ||
} | ||
Random rhs = (Random) obj; | ||
return (left == rhs.left) && Arrays.equals(state, rhs.state); | ||
} | ||
|
||
@Override | ||
public int hashCode() { | ||
// Using 17 as the initializer, 37 as the multiplier. | ||
return (629 + left) * 37 + Arrays.hashCode(state); | ||
} | ||
|
||
private void initGenrand(int s) { | ||
state[0] = s; | ||
for (int j = 1; j < N; j++) { | ||
state[j] = (1812433253 * (state[j - 1] ^ (state[j - 1] >>> 30)) + j); | ||
} | ||
left = 1; | ||
} | ||
|
||
private void initByArray(int[] initKey) { | ||
initGenrand(19650218); | ||
int len = initKey.length; | ||
int i = 1; | ||
int j = 0; | ||
int k = N > len ? N : len; | ||
for (; k > 0; k--) { | ||
state[i] = (state[i] ^ ((state[i - 1] ^ (state[i - 1] >>> 30)) * 1664525)) + initKey[j] | ||
+ j; | ||
i++; | ||
j++; | ||
if (i >= N) { | ||
state[0] = state[N - 1]; | ||
i = 1; | ||
} | ||
if (j >= len) { | ||
j = 0; | ||
} | ||
} | ||
for (k = N - 1; k > 0; k--) { | ||
state[i] = (state[i] ^ ((state[i - 1] ^ (state[i - 1] >>> 30)) * 1566083941)) - i; | ||
i++; | ||
if (i >= N) { | ||
state[0] = state[N - 1]; | ||
i = 1; | ||
} | ||
} | ||
state[0] = 0x80000000; | ||
} | ||
|
||
private void nextState() { | ||
int p = 0; | ||
|
||
left = N; | ||
|
||
for (int j = N - M + 1; --j > 0; p++) { | ||
state[p] = state[p + M] ^ TWIST(state[p + 0], state[p + 1]); | ||
} | ||
|
||
for (int j = M; --j > 0; p++) { | ||
state[p] = state[p + M - N] ^ TWIST(state[p + 0], state[p + 1]); | ||
} | ||
|
||
state[p] = state[p + M - N] ^ TWIST(state[p + 0], state[0]); | ||
} | ||
|
||
public int genrandInt32() { | ||
int y; | ||
|
||
synchronized (this) { | ||
if (--left <= 0) | ||
nextState(); | ||
|
||
y = state[N - left]; | ||
} | ||
|
||
/* Tempering */ | ||
y ^= (y >>> 11); | ||
y ^= (y << 7) & 0x9d2c5680L; | ||
y ^= (y << 15) & 0xefc60000L; | ||
y ^= (y >>> 18); | ||
|
||
return y; | ||
} | ||
|
||
public double genrandReal() { | ||
int a = genrandInt32() >>> 5; | ||
int b = genrandInt32() >>> 6; | ||
return (a * 67108864.0 + b) * (1.0 / 9007199254740992.0); | ||
} | ||
|
||
public double genrandReal2() { | ||
int a = genrandInt32(); | ||
int b = genrandInt32(); | ||
return intPairToRealInclusive(a, b); | ||
} | ||
|
||
private static final BigInteger INTPAIR_CONST = BigInteger.valueOf((1L << 53) + 1); | ||
private static final double LDEXP_CONST = Math.pow(2.0, -53); | ||
|
||
// c: ldexp((a<< 32)|b) * ((1<<53)+1) >> 64, -53) | ||
// TODO: not enough prec... | ||
private double intPairToRealInclusive(int a, int b) { | ||
BigInteger c = BigInteger.valueOf(a & 0xffffffffL); | ||
BigInteger d = BigInteger.valueOf(b & 0xffffffffL); | ||
return c.shiftLeft(32).or(d).multiply(INTPAIR_CONST).shiftRight(64).doubleValue() | ||
* LDEXP_CONST; | ||
} | ||
|
||
public int[] getState() { | ||
return state; | ||
} | ||
|
||
public int getLeft() { | ||
return left; | ||
} | ||
|
||
|
||
public static class RandomType { | ||
|
||
public static Random randomFromLong(long seed) { | ||
long v = Math.abs(seed); | ||
if (v == (v & 0xffffffffL)) { | ||
return new Random((int) v); | ||
} else { | ||
int[] ints = new int[2]; | ||
ints[0] = (int) v; | ||
ints[1] = (int) (v >> 32); | ||
return new Random(ints); | ||
} | ||
} | ||
|
||
} | ||
|
||
} |
186 changes: 186 additions & 0 deletions
186
truffle/src/main/java/org/jruby/truffle/util/SafePropertyAccessor.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,186 @@ | ||
/***** BEGIN LICENSE BLOCK ***** | ||
* Version: EPL 1.0/GPL 2.0/LGPL 2.1 | ||
* | ||
* The contents of this file are subject to the Eclipse Public | ||
* License Version 1.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.eclipse.org/legal/epl-v10.html | ||
* | ||
* Software distributed under the License is distributed on an "AS | ||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or | ||
* implied. See the License for the specific language governing | ||
* rights and limitations under the License. | ||
* | ||
* Copyright (C) 2007 Vladimir Sizikov <vsizikov@gmail.com> | ||
* | ||
* Alternatively, the contents of this file may be used under the terms of | ||
* either of the GNU General Public License Version 2 or later (the "GPL"), | ||
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), | ||
* in which case the provisions of the GPL or the LGPL are applicable instead | ||
* of those above. If you wish to allow use of your version of this file only | ||
* under the terms of either the GPL or the LGPL, and not to allow others to | ||
* use your version of this file under the terms of the EPL, indicate your | ||
* decision by deleting the provisions above and replace them with the notice | ||
* and other provisions required by the GPL or the LGPL. If you do not delete | ||
* the provisions above, a recipient may use your version of this file under | ||
* the terms of any one of the EPL, the GPL or the LGPL. | ||
***** END LICENSE BLOCK *****/ | ||
|
||
package org.jruby.truffle.util; | ||
|
||
import java.util.Map; | ||
|
||
/** | ||
* Utility class to safely access system properties in security-sensitive | ||
* environments. | ||
*/ | ||
public class SafePropertyAccessor { | ||
|
||
/** | ||
* An extension over <code>Boolean.getBoolean</code> method. | ||
* Returns true if and only if the system property | ||
* named by the argument exists and is equal to the string "true". | ||
* If there is no property with the specified name, or if the specified | ||
* name is empty or null, or if the access to the property is | ||
* restricted, then false is returned. | ||
* @param property The system property name. | ||
* @return The boolean value of the system property. | ||
*/ | ||
public static boolean getBoolean(String property) { | ||
try { | ||
return Boolean.getBoolean(property); | ||
} catch (SecurityException se) { | ||
return false; | ||
} | ||
} | ||
|
||
/** | ||
* An extension over <code>Boolean.getBoolean</code> method. | ||
* Handles security restrictions, and provides default value | ||
* in case when access to the property is restricted, | ||
* of when the property does not exist. | ||
* @param property The system property name. | ||
* @param defValue The default value. | ||
* @return The boolean value of the system property, | ||
* or the default value. | ||
*/ | ||
public static boolean getBoolean(String property, boolean defValue) { | ||
try { | ||
if (System.getProperty(property) != null) { | ||
return Boolean.getBoolean(property); | ||
} else { | ||
return defValue; | ||
} | ||
} catch (SecurityException se) { | ||
return defValue; | ||
} | ||
} | ||
|
||
/** | ||
* An extension over <code>System.getProperty</code> method. | ||
* Handles security restrictions, and returns <code>null</code> | ||
* if the access to the property is restricted. | ||
* @param property The system property name. | ||
* @return The value of the system property, | ||
* or the default value. | ||
*/ | ||
public static String getProperty(String property) { | ||
return getProperty(property, null); | ||
} | ||
|
||
/** | ||
* An extension over <code>System.getProperty</code> method. | ||
* Handles security restrictions, and returns the default | ||
* value if the access to the property is restricted. | ||
* @param property The system property name. | ||
* @param defValue The default value. | ||
* @return The value of the system property, | ||
* or the default value. | ||
*/ | ||
public static String getProperty(String property, String defValue) { | ||
try { | ||
return System.getProperty(property, defValue); | ||
} catch (SecurityException se) { | ||
return defValue; | ||
} | ||
} | ||
|
||
/** | ||
* An extension over <code>System.getProperty</code> method | ||
* that additionally produces an int value. | ||
* Handles security restrictions, and returns <code>0</code> | ||
* if the access to the property is restricted. | ||
* @param property The system property name. | ||
* @return The value of the system property, | ||
* or the default value. | ||
*/ | ||
public static int getInt(String property) { | ||
return getInt(property, 0); | ||
} | ||
|
||
/** | ||
* An extension over <code>System.getProperty</code> method | ||
* that additionally produces an int value. | ||
* Handles security restrictions, and returns the default | ||
* value if the access to the property is restricted. | ||
* @param property The system property name. | ||
* @param defValue The default value. | ||
* @return The value of the system property, | ||
* or the default value. | ||
*/ | ||
public static int getInt(String property, int defValue) { | ||
try { | ||
return Integer.parseInt(System.getProperty(property, String.valueOf(defValue))); | ||
} catch (SecurityException se) { | ||
return defValue; | ||
} | ||
} | ||
|
||
/** | ||
* Returns <code>true</code> if the access to the system property | ||
* is restricted (i.e., when System.getProperty() | ||
* throws SecurityException). | ||
* @param property The system property name. | ||
* @return <code>true</code> if the access is restricted, | ||
* <code>false</code> otherwise. | ||
*/ | ||
public static boolean isSecurityProtected(String property) { | ||
try { | ||
System.getProperty(property); | ||
return false; | ||
} catch (SecurityException se) { | ||
return true; | ||
} | ||
} | ||
|
||
/** | ||
* An extension over <code>System.getenv</code> method. | ||
* Handles security restrictions, and returns <code>null</code> | ||
* if the access to the environment variable is restricted. | ||
* @param name The environment variable name. | ||
* @return The value of the environment variable, | ||
* or null. | ||
*/ | ||
public static String getenv(String name) { | ||
try { | ||
return System.getenv(name); | ||
} catch (SecurityException se) { | ||
return null; | ||
} | ||
} | ||
|
||
/** | ||
* An extension over <code>System.getenv</code> method. | ||
* Handles security restrictions, and returns <code>null</code> | ||
* if the access to the environment map is restricted. | ||
* @return The map of the environment variables, | ||
* or null. | ||
*/ | ||
public static Map<String,String> getenv() { | ||
try { | ||
return System.getenv(); | ||
} catch (SecurityException se) { | ||
return null; | ||
} | ||
} | ||
} |