/tutorial/external/Java/example5.e

http://github.com/tybor/Liberty · Specman e · 82 lines · 58 code · 12 blank · 12 comment · 2 complexity · b65026ef68a2b0cbbe8503994bb5fc3b MD5 · raw file

  1. class EXAMPLE5
  2. -- Compilation:
  3. -- compile_to_jvm example5
  4. -- del example5.class (Windows), rm example5.class (Unix)
  5. -- javac CSimple.java
  6. -- Execution:
  7. -- java CSimple
  8. -- This example demonstrates how to create and call a compiled Eiffel system
  9. -- from Java, how to throw Java exceptions from Eiffel, and how Eiffel
  10. -- contract assertion violations throw Java exceptions.
  11. creation {ANY}
  12. make
  13. feature {ANY}
  14. make is
  15. do
  16. -- set attribute eiffel_integer
  17. eiffel_integer := 1 -- fake a call to proc1 and proc2 so they won't be optimized out at compile time
  18. if False then
  19. proc1(0)
  20. proc2(0)
  21. end
  22. end
  23. feature {ANY}
  24. eiffel_integer: INTEGER
  25. feature {ANY}
  26. proc1 (i: INTEGER) is
  27. -- throws a Java exception depending on argument value
  28. local
  29. e: POINTER; javaString: POINTER; javaStringBytes: POINTER; string_length: INTEGER; s: STRING
  30. flag: BOOLEAN
  31. do
  32. if i >= 0 then
  33. eiffel_integer := i
  34. else
  35. create s.make(48)
  36. s.append("Exception in example5.proc1: i=")
  37. s.append(i.out)
  38. s.append(" < 0")
  39. javaString := new_java_lang_String(checkcast_aB(s.to_external), 0, s.count)
  40. e := new_java_lang_Exception(checkcast_java_lang_String(javaString))
  41. throw_exception(checkcast_java_lang_Exception(e))
  42. end
  43. end
  44. proc2 (i: INTEGER) is
  45. -- precondition assertion violation throws Java exception
  46. require
  47. i_ok: i >= 0
  48. do
  49. eiffel_integer := i
  50. end
  51. feature {ANY} -- externals
  52. new_java_lang_String (a1: POINTER; a2: INTEGER; a3: INTEGER): POINTER is
  53. external "Java class java.lang.String new (byte[],int,int)"
  54. end
  55. checkcast_java_lang_String (p: POINTER): POINTER is
  56. external "Java class java.lang.String checkcast"
  57. end
  58. checkcast_aB (p: POINTER): POINTER is
  59. external "Java class byte[] checkcast"
  60. end
  61. new_java_lang_Exception (a1: POINTER): POINTER is
  62. external "Java class java.lang.Exception new (java.lang.String)"
  63. end
  64. checkcast_java_lang_Exception (p: POINTER): POINTER is
  65. external "Java class java.lang.Exception checkcast"
  66. end
  67. throw_exception (p: POINTER) is
  68. external "Java exception java.lang.Exception throw"
  69. end
  70. end -- class EXAMPLE5