X-Git-Url: http://git.megacz.com/?p=org.ibex.core.git;a=blobdiff_plain;f=src%2Forg%2Fibex%2Futil%2FPreprocessor.java;h=4698fdcb1a01a85fd5e1bf5d373b50838b5e098a;hp=ae66770553e533b93bef8827826a565e6d8ca751;hb=85c8f402be33df8440511492fb597fba9c2eb45f;hpb=0e9197be8053d1e3bc8699a8f527d34850024cd7 diff --git a/src/org/ibex/util/Preprocessor.java b/src/org/ibex/util/Preprocessor.java index ae66770..4698fdc 100644 --- a/src/org/ibex/util/Preprocessor.java +++ b/src/org/ibex/util/Preprocessor.java @@ -171,7 +171,8 @@ PROCESS: sinceLastRepeat = null; replace = save; - } else if (trimmed.startsWith("//#switch")) { + } else if (trimmed.startsWith("//#switch") || trimmed.startsWith("//#jswitch")) { + boolean jswitch = trimmed.startsWith("//#jswitch"); int expStart = trimmed.indexOf('(') +1; if (expStart < 1) { err.add(new Error("expected ( in #switch")); continue PROCESS; } int expEnd = trimmed.lastIndexOf(')'); @@ -179,7 +180,13 @@ PROCESS: if (expEnd - expStart <= 1) { err.add(new Error("badly formed #switch statement")); continue PROCESS; } String expr = trimmed.substring(expStart, expEnd); - out.print("final String ccSwitch"+enumSwitch+" = (String)("+expr+"); "); + if(jswitch) { + out.print("final org.ibex.js.JS ccSwitchExpr"+enumSwitch+" = " + expr + ";"); + out.print("if(org.ibex.js.JS.isString(ccSwitchExpr"+enumSwitch+")) {"); + out.print("final String ccSwitch"+enumSwitch+" = org.ibex.js.JS.toString(ccSwitchExpr"+enumSwitch+");"); + } else { + out.print("final String ccSwitch"+enumSwitch+" = "+expr+"; "); + } out.print("SUCCESS:do { switch(ccSwitch"+enumSwitch+".length()) {\n"); Hashtable[] byLength = new Hashtable[255]; @@ -225,6 +232,7 @@ PROCESS: out.print("} "); /* switch */ if (Default != null) out.print(" " + Default); out.print(" } while(false);\n"); /* OUTER */ + if(jswitch) out.print("}"); enumSwitch++; } else {