Vnitrni Objekty Kernelu

  • KSID konstanta
    • Pristupovat se k ni bude jako doposud
    • u IS se jedna o index do tabulky pointeru na KSID jmena
    • u KS je to globalni promenna _KSID_, ve ktere je ulozen pointer na KSID jmeno
  • Promenna objektu
    • Identifikovana KSID jmenem promenne
    • Pristupovat k ni muzes z libovolneho mista
    • K pristupu je potreba index promenne (je to pri kompilaci pocitana konstanta, prirazena KSID jmenu prom.), v IS je primo, v KS je ulozen v globalni promenne _KSOV_
    • K pristupu je navic potreba pointr na instanci objektu, kdyz neni zadan, vezme se this. Kazda instance objektu ma svoji promennou.
    • Pod stejnym jmenem muze existovat vice deklaraci (ale musi byt u ruznych opjektu). Chape se to jako totozna promenna (pokud by se objekty spojily dedicnosti, tak jde o jednu promennou!), deklarace se tedy musi schodovat. Asi nebudu vyzadovat shodu atributu..
    • Muze se dedit
    • Vice zde: Vicenasobna dedicnost
  • staticka promenna
    • Identifikovana KSID jmenem staticke promenne. KS budou pristupovat pres globalni prom _KSG_, kde bude pointr na prom. IS pres index do IS pameti
    • Pristoupit k ni muzes z libovolneho objektu, existuje jen jedna instance.
    • Pod stejnym jmenem muze existovat vice deklaraci (ale musi byt u ruznych opjektu). Jde ale stale o jednu a tu samou promennou. Deklarace se tedy musi schodovat. Asi nebudu vyzadovat shodu atributu..
  • lokalni promenna
    • Identivikovana lokalnim jmenem _KSL_
    • Ma platnost od deklarace po konec zavorky }
    • Ve vnorene zavorce muzes nadeklarovat lokalni promennou stejneho jmena, ktera tu stavajici zastini. Lokalni promenne navic zastinuji KSID jmena
  • parametr
    • Podobne chovani jako lokalni promenna
    • ret parametry jsou reference nebo ptr
  • polozka v poli
    • Id neni
    • Pristup je pomoci pointru na pole a indexu
    • Pokud bych si chtel dlouhodobe drzet adresu, abych mohl do pole zapsat (prvek pole predan do ret parametru), musim pole zamknout. V uzamknutem poli nelze menit rozmery (vyvola vyjimku) - aby se mi pole nerealokovalo.
    • U vicerozmernych poli se zamyka az posledni rozmer. (Z prvnich poli jen ctu, az do posledniho pole budu zapisovat / beru si adresu)
  • editacni polozka
    • Identifikovana KSID jmenem polozky
    • Beznym zpusobem se k ni pristupovat neda
    • Povolena jen jedna deklarace
    • Muze se dedit
  • telo safe metody
    • Identifikovano _KSM_ identifikatorem. Kazde telo ma svuj _KSM_ id
    • Tela se mohou dedit
    • pro KSID jmeno metody se po zvolani vyhledaji vsechny _KSM_ tela a ty se v nedefinovanem poradi zavolaji.
    • Stejny mechanismus volani funguje jak pro staticke tak pro objektove metody. Pokud chci zavolat statickou metodu, zadam jako ptr na objekt nejake rezervovane cislo (treba -1)
    • staticke maji nastaven parametr this na 0
    • U volani bych mel asi striktne vynutit rozliseni mezi statickym a this volanim, aby se mi pozdeji nemenil vyznam kodu. (u promennych a direct metod to neni nutne, protoze je povolena jen totozna deklarace, kde static je nastaven vzdy stejne, tady si to vynuti samy pravidla KSID jmen) Asi bude potreba vzdy povinne psat this-> nebo static-> At to tedy neni nutne ani zde. Je docela prirozene vynutit u KSID jmen metod shodu modifikatoru static. To znamena: Pod jenim KSID jmenem mohu mit kolik metod chci, pokud se shoduje navratovy typ a modifikator. Pokud mam tedy staticke metody, nemohu mit nestaticke a naopak.
  • direct metoda
    • Identifikovana KSID jmenem direct metody
    • Povolena jen jedna deklarace
    • Pristup (zase) u IS pres ofset u KS je v globalni prom _KSDM_ ulozen bud pointr na funkci nebo na tridu popisujici metodu (pro volani pres kernel)
    • staticke maji nastaven parametr this na 0
    • Muze se dedit

Volani metod

  • Pristup probiha bud:
    • Vzdy pres kernel. Zpomaleni direct volani, protoze se slozite predavaji parametry (musim je naskladat na IS zasobnik a odtamtud je rucne vybirat) Vyhoda je, ze muzu libovolne kombinovat IS a KS metodu
    • Direct metody se volaji primo, nativne, tak jak je to doposud. -> Pokud safe metoda je kompilovana a vsechny direct metody, ktere vola jsou take kompilovane, mohu ji zavolat jako kompilovanou. Jinak musim jako interpretovanou. Budu si u safe metod pomatovat seznam direct metot, ktere vola. Muze se stat, ze jedna direct metoda se odnekud bude volat interpretovane, od jinud kompilovane.
  • Zjistovani, co je KS a co IS nebude probihat v dobe kompilace, ale az v dobe spusteni (mazna se to bude kashovat ve specialnim souboru). Pri kompilaci se vytvori vzdy kompletni IS kod. KS kod se bude tvorit volitelne.
  • Kernel nastavi objekt CKerContext (this, pointr na parametry a podobne)
  • Parametry jsou vzdy predavany na zasobniku v IS pameti. pristup pres PB + indezx. PB je pro IS regist, pro KS parametr nebo globalni promenna
  • u IS metody se zacne provadet kod na urcitem offsetu, u KS metody se skoci na urcite misto v pameti