News
La version 1 du précompilateur est presque terminé reste quelques petits ajustement.
Chaque version du précompilateur sera rétro compatible c'est a dire qu'un code de la version 1 tournera sur la version 2 (pas l'inverse hein

). chaque version verra son lot d'amélioration selon mon temps disponible.
Pour ceux qui ignore totalement ce qu'est la POO regardez l'exemple c'est plus parlant.
Pour l'instant :
-Héritage Simple.
-Typage statique obligatoire, un pointeur -> un objet (si il a été instancié bien sur).
-Attribut de classe avec possible valeur par défaut qui sont ajouté directement dans le constructeur.
-Code généré structuré (cependant si c'est codé a LaRache sa compilera pas je suis pas magicien ^^').
et c'est tout (oui c'est juste pour le moment)
Point noir :
-c'est de la précompilation donc certaine notion de l'encapsulation ne verront jamais le jour.
-dim et list non supporté pour l'instant a moins de ne pas les utiliser comme pointeur.
-sa doit être bugé dans certain cas tout le monde ne code pas comme moi ^^'.
-c'est pas encore super optimisé (mais sa l'est quand même un peu hein).
-heu.. ?
Un exemple une classe pour faire des tableaux dynamique (qui sera intégré dans l'api de chronos. Pourquoi ?, Parce que on peut pas utiliser de DIM ou LIST dans une structure et sans structure c'est pas de la POO).
Code : Tout sélectionner
;===========================================================
;lib Array
;===========================================================
Class Array
*ptr = AllocateMemory(1)
number.i = 0
Procedure CountElement()
ProcedureReturn *this\number
EndProcedure
Procedure SetElement(number.i, *Element)
If number > *this\number
*this\number = number
*this\ptr = ReAllocateMemory(*this\ptr, number * SizeOf(integer))
EndIf
PokeI(*this\ptr + (number-1) * SizeOf(integer), *Element)
EndProcedure
Procedure AddElement(*Element)
*this.SetElement(*this\number+1, *Element)
ProcedureReturn *this\number
EndProcedure
Procedure FreeElement(number.i)
If *this\number = 1
*this\number = 0
Else
If number < *this\number
CopyMemory(*this\ptr + SizeOf(integer)*number, *this\ptr + SizeOf(integer)*(number - 1), SizeOf(integer)*(*this\number-number))
EndIf
*this\number - 1
*this\ptr = ReAllocateMemory(*this\ptr, *this\number * SizeOf(integer))
EndIf
EndProcedure
Procedure GetElement(number.i)
If number <= *this\number
ProcedureReturn PeekI(*this\ptr + (number-1) * SizeOf(integer))
Else
ProcedureReturn 0
EndIf
EndProcedure
Procedure RemoveAll()
*this\number = 0
*this\ptr = ReAllocateMemory(*this\ptr, 1)
EndProcedure
Procedure Free()
FreeMemory(*this\ptr)
FreeMemory(*this)
EndProcedure
EndClass
ce qui génère en fichier principal
Code : Tout sélectionner
;===========================================================;
; ;
; Main File : main.pb ;
; Code generated by Chronos Precompiler ;
; ;
;===========================================================;
EnableExplicit ;Variable declaration enable
IncludeFile "Constant.pbi"
IncludeFile "Structure.pbi"
IncludeFile "Variable.pbi"
IncludeFile "Macro.pb"
IncludeFile "Declaration.pb"
IncludeFile "Procedure.pb"
le fichier Structure.pbi
le fichier Declaration.pb
Code : Tout sélectionner
;Class Array
Declare.i Array_CountElement(*this.Array)
Declare.i Array_SetElement(*this.Array,number.i,*Element.i)
Declare.i Array_AddElement(*this.Array,*Element.i)
Declare.i Array_FreeElement(*this.Array,number.i)
Declare.i Array_GetElement(*this.Array,number.i)
Declare.i Array_RemoveAll(*this.Array)
Declare.i Array_Free(*this.Array)
declare.i New_Array()
et enfin le fichier Procedure.pb
Code : Tout sélectionner
;Class Array
Procedure.i Array_CountElement(*this.Array)
ProcedureReturn *this\number
EndProcedure
Procedure.i Array_SetElement(*this.Array,number.i,*Element.i)
If number>*this\number
*this\number=number
*this\ptr=ReAllocateMemory(*this\ptr,number *SizeOf(integer))
EndIf
PokeI(*this\ptr+(number-1)*SizeOf(integer),*Element)
EndProcedure
Procedure.i Array_AddElement(*this.Array,*Element.i)
Array_SetElement(*this,*this\number+1,*Element)
ProcedureReturn *this\number
EndProcedure
Procedure.i Array_FreeElement(*this.Array,number.i)
If *this\number=1
*this\number=0
Else
If number<*this\number
CopyMemory(*this\ptr+SizeOf(integer)*number,*this\ptr+SizeOf(integer)*(number-1),SizeOf(integer)*(*this\number-number))
EndIf
*this\number-1
*this\ptr=ReAllocateMemory(*this\ptr,*this\number *SizeOf(integer))
EndIf
EndProcedure
Procedure.i Array_GetElement(*this.Array,number.i)
If number<=*this\number
ProcedureReturn PeekI(*this\ptr+(number-1)*SizeOf(integer))
Else
ProcedureReturn 0
EndIf
EndProcedure
Procedure.i Array_RemoveAll(*this.Array)
*this\number=0
*this\ptr=ReAllocateMemory(*this\ptr,1)
EndProcedure
Procedure.i Array_Free(*this.Array)
FreeMemory(*this\ptr)
FreeMemory(*this)
EndProcedure
Procedure.i New_Array()
protected *this.Array = AlocateMemory(SizeOf(Array))
*this\ptr = AllocateMemory(1)
*this\number = 0
ProcedureReturn *this
EndProcedure
et c'est tout, je peut donc avec le précompilateur coder de la manière suivante
Code : Tout sélectionner
Define.Array *MonTableau
MonTableau = New Array()
*MonTableau.AddElement(24)
Debug *MonTableau.CountElement()
*MonTableau.FreeElement(1) ;on enlève l'élément 1
*MonTableau.Free();on libère les ressources