       System: [
         o 'loadLibrary(L!/!/String;)V', (rs) -> # NOP, because we don't support loading external libraries
         o 'adjustPropertiesForBackwardCompatibility(L!/util/Properties;)V', (rs) -> # NOP (apple-java specific)
+        o 'getProperty(L!/!/String;)L!/!/String;', get_property
+        o 'getProperty(L!/!/String;L!/!/String;)L!/!/String;', get_property
       ]
       Terminator: [
         o 'setup()V', (rs) -> # NOP, because we don't support threads

# things assigned to root will be available outside this module
root = exports ? this.natives = {}

# convenience function. idea taken from coffeescript's grammar
o = (fn_name, fn) -> fn_name: fn_name, fn: fn


              dest.array[j++] = src.array[i]
        o 'currentTimeMillis()J', (rs) -> gLong.fromNumber((new Date).getTime())
        o 'identityHashCode(L!/!/Object;)I', (x) -> x.ref
        o 'initProperties(L!/util/Properties;)L!/util/Properties;', (rs, props) -> # NOP, we trap the getProperty call
        o 'nanoTime()J', (rs) ->
            # we don't actually have nanosecond precision
            gLong.fromNumber((new Date).getTime()).multiply(gLong.fromNumber(1000000))
