Dan --

OK.

The big rewrite is "done". There are still plenty of warts on the current 
implementation,
not the least of which is a bunch of dead code that I still need to 
remove. But, most
of the examples compile and run, including the ever popular (hi, acme!) 
mandelzoom.

Queens.jako still doesn't work right, and now neither does primes.jako. 
I've printed
out primes.{jako,imc,pasm} to see if I can locate the problem there. 
Queens will
have to remain a mystery (not surprising, really -- mystery of royalty and 
all) until I
solve primes (there's a thought...).


As a special treat, Jako now has a language feature for telling it about 
ops that are
not among the basic set supported by imcc. For example, the test programs 
I use
now have sub prototype lines like these in them:

    sub print {op} (str s);

That thingee in the curly braces is a single entry in the compile-time 
properties for
the sub being declared. The more general form, eventually intended to 
support
loadable oplib stuff, is:

  sub num coversine { oplib = "obscure", op = "covers" } (num x);

Limitation: You'll really want to be able to tell jakoc about different 
versions of the same
op, with different arg types. The renaming notation above could help until 
something
cooler comes along. But, in the case of print, you can just use 
interpolated strings:

    sub print {op} (str s);
    const int x = 10;
    print("$x\n");

which has the advantage of actually working, even though its not the most 
efficient
thing to do (you can see the generated imc code to watch the string be 
compiled).

I haven't looked lately at the IO stuff you want (I will soon). But, you 
might be able to
do some fiddling with this feature, although be aware that I've not done 
any testing
at all with the 'obj' type, which probably means jakoc will throw itself 
on the floor and
go into a fit of convulsions and cursing when you try it...

BTW, the same syntax is intended for eventual use with the Native Call 
stuff:

  sub int BlitSurface { fnlib = "libsdl", fn = "SDL_BlitSurface" } (
    obj { nat = "p" } src,
    obj { nat = "p" } srcrect,
    obj { nat = "p" } dst,
    obj { nat = "p" } dstrect
  );

Although that is brainware only for now.

This will all be much more useful when the Jako compiler has an include 
mechanism. In
anticipation of this, there are a few .jako files in the languages/jako 
directory that have
declarations of op-subs for various corners of the core op set.


Regards,

-- Gregor

Reply via email to