[minijoe] r78 committed - - Cleaned "final static" declarations from few methods in JsSystem....

1 view
Skip to first unread message

min...@googlecode.com

unread,
Oct 1, 2010, 12:20:42 PM10/1/10
to min...@googlegroups.com
Revision: 78
Author: orientalsensation
Date: Fri Oct 1 09:19:49 2010
Log: - Cleaned "final static" declarations from few methods in JsSystem.
- Added 4 new methods under JsSystem that URI-encodes/-decodes a string.
- Exposed 2 new methods under JsObject that were not yet implemented:
encodeURI() and decodeURI().
http://code.google.com/p/minijoe/source/detail?r=78

Modified:
/trunk/src/com/google/minijoe/sys/JsObject.java
/trunk/src/com/google/minijoe/sys/JsSystem.java

=======================================
--- /trunk/src/com/google/minijoe/sys/JsObject.java Mon Aug 2 08:15:22 2010
+++ /trunk/src/com/google/minijoe/sys/JsObject.java Fri Oct 1 09:19:49 2010
@@ -434,28 +434,28 @@
* The assignement value for a setter is stored at stack[sp+0].
*/
public void evalNative(int index, JsArray stack, int sp, int parCount) {
- switch(index){
-
+ Object obj;
+ switch(index) {
// object methods

case ID_NOOP:
break;

case ID_INIT_OBJECT:
- Object v = stack.getObject(sp + 2);
+ obj = stack.getObject(sp + 2);
if (isConstruction(stack, sp)){
- if (v instanceof Boolean || v instanceof Double ||
- v instanceof String) {
- value = v;
- } else if (v instanceof JsObject){
- stack.setObject(sp - 1, v);
+ if (obj instanceof Boolean || obj instanceof Double ||
+ obj instanceof String) {
+ value = obj;
+ } else if (obj instanceof JsObject){
+ stack.setObject(sp - 1, obj);
}
// otherwise, don't do anything -- regular constructor call
} else {
- if (v == null || v == JsSystem.JS_NULL) {
+ if (obj == null || obj == JsSystem.JS_NULL) {
stack.setObject(sp, new JsObject(OBJECT_PROTOTYPE));
} else {
- stack.setObject(sp, JsSystem.toJsObject(v));
+ stack.setObject(sp, JsSystem.toJsObject(obj));
}
}
break;
@@ -471,10 +471,10 @@
break;

case ID_IS_PROTOTYPE_OF:
- v = stack.getObject(sp + 2);
+ obj = stack.getObject(sp + 2);
stack.setBoolean(sp, false);
- while (v instanceof JsObject){
- if (v == this) {
+ while (obj instanceof JsObject){
+ if (obj == this) {
stack.setBoolean(sp, true);
break;
}
@@ -482,8 +482,8 @@
break;

case ID_PROPERTY_IS_ENUMERABLE:
- v = getRawInPrototypeChain(stack.getString(sp + 2));
- stack.setBoolean(sp, v != null && !(v instanceof JsFunction));
+ obj = getRawInPrototypeChain(stack.getString(sp + 2));
+ stack.setBoolean(sp, obj != null && !(obj instanceof JsFunction));
break;

case ID_VALUE_OF:
@@ -642,10 +642,26 @@
stack.setBoolean(sp, !Double.isInfinite(d) && !Double.isNaN(d));
break;

- //TODO Implement
case ID_DECODE_URI:
- case ID_DECODE_URI_COMPONENT:
+ obj = stack.getObject(sp + 2);
+ if(obj instanceof byte[]) {
+ stack.setObject(sp, JsSystem.decodeURI((byte[]) obj));
+ } else {
+ stack.setObject(sp, JsSystem.decodeURI(obj.toString()));
+ }
+ break;
+
case ID_ENCODE_URI:
+ obj = stack.getObject(sp + 2);
+ if(obj instanceof byte[]) {
+ stack.setObject(sp, JsSystem.encodeURI((byte[]) obj));
+ } else {
+ stack.setObject(sp, JsSystem.encodeURI(obj.toString()));
+ }
+ break;
+
+ //TODO Implement
+ case ID_DECODE_URI_COMPONENT:
case ID_ENCODE_URI_COMPONENT:
throw new RuntimeException("NYI");

=======================================
--- /trunk/src/com/google/minijoe/sys/JsSystem.java Wed Dec 10 06:11:58 2008
+++ /trunk/src/com/google/minijoe/sys/JsSystem.java Fri Oct 1 09:19:49 2010
@@ -301,7 +301,7 @@
/**
* source: http://en.wikipedia.org/wiki/Exponential_function
*/
- public static final double exp(double x){
+ public static double exp(double x){
long n = (long) Math.floor(x / LN2);
double u = x - n * LN2;
double m = 1;
@@ -323,7 +323,7 @@
/**
* Calculates logarithm to the basis e for x. Algorithm from Wikipedia.
*/
- public static final double ln(double x){
+ public static double ln(double x){
return Math.PI / (2.0 * avg(1.0, 4.0 / (x * (1L<<M)))) - LN2 * M;
}

@@ -331,7 +331,7 @@
* Performs multiplications for integer exponents. In all other cases,
* exp(y * ln(x)) is calculated.
*/
- public static final double pow(double x, double y){
+ public static double pow(double x, double y){
long n = (long) y;
if (y > 0 && y == n) {
double result = 1;
@@ -470,7 +470,7 @@
}
}

- public static final double avg(double a, double b) {
+ public static double avg(double a, double b) {
for (int i = 0; i < 10; i++) {
double t = (a + b) / 2.0;
b = Math.sqrt(a * b);
@@ -478,4 +478,73 @@
}
return (a + b) / 2;
}
-}
+
+ public static String encodeURI(byte[] bytes) {
+ StringBuffer result = new StringBuffer(bytes.length);
+ for(int i = 0; i < bytes.length; i++) {
+ switch (bytes[i]) {
+ // Based on article: http://en.wikipedia.org/wiki/Percent-encoding
+ case ' ': result.append('+'); break;
+ case '!': result.append("%21"); break;
+ case '"': result.append("%22"); break;
+ case '#': result.append("%23"); break;
+ case '$': result.append("%24"); break;
+ case '%': result.append("%25"); break;
+ case '&': result.append("%26"); break;
+ case '\'': result.append("%27"); break;
+ case '(': result.append("%28"); break;
+ case ')': result.append("%29"); break;
+ case '*': result.append("%2A"); break;
+ case '+': result.append("%2B"); break;
+ case ',': result.append("%2C"); break;
+ case '/': result.append("%2F"); break;
+ case ':': result.append("%3A"); break;
+ case ';': result.append("%3B"); break;
+ case '<': result.append("%3C"); break;
+ case '=': result.append("%3D"); break;
+ case '>': result.append("%3E"); break;
+ case '?': result.append("%3F"); break;
+ case '@': result.append("%40"); break;
+ case '[': result.append("%5B"); break;
+ case '\\': result.append("%5C"); break;
+ case ']': result.append("%5D"); break;
+ case '^': result.append("%5E"); break;
+ default: result.append((char) bytes[i]);
+ }
+ }
+ return result.toString();
+ }
+
+ public static String encodeURI(String string) {
+ return encodeURI(string.getBytes());
+ }
+
+ public static String decodeURI(byte[] bytes) {
+ StringBuffer result = new StringBuffer(bytes.length);
+ for(int i = 0; i < bytes.length; i++) {
+ switch (bytes[i]) {
+ case '+':
+ result.append(' ');
+ break;
+ case '%':
+ if(i + 2 < bytes.length) {
+ int next1 = Character.digit((char) bytes[i + 1], 16);
+ int next2 = Character.digit((char) bytes[i + 2], 16);
+ if(next1 > -1 && next2 > -1) {
+ int b = (next1 << 4) + next2;
+ result.append((char) b);
+ i += 2;
+ break;
+ }
+ }
+ default:
+ result.append((char) bytes[i]);
+ }
+ }
+ return result.toString();
+ }
+
+ public static String decodeURI(String string) {
+ return decodeURI(string.getBytes());
+ }
+}

Reply all
Reply to author
Forward
0 new messages