|
#include "file.bi" Const FBC0DIR = "./src/compiler" Const FBC = "fbc"
Function replace( Byref s As String, Byref s1 As String, Byref s2 As String ) As String Dim As Integer i = 1 Dim As String t = s Do i = Instr(i, t, s1) If i = 0 Then Return t t = Left(t, i-1) & s2 & Mid(t, i + Len(s1)) i += Len(s2) Loop End Function
Sub fixfile( Byref fn As String ) Dim As String f, b Dim As Integer i, i2, i3, i4 If fileexists(fn & ".bak") Then Kill fn Else Name fn As fn & ".bak"
Open fn & ".bak" For Binary As #1 f = Space(Lof(1)) Get #1, 1, f Close #1
'' remove periods from consts/enums i = 1 Do i2 = Instr(i, f, "FB.") i3 = Instr(i, f, "IR.") i4 = Instr(i, f, "EMIT.") i = i2 If i = 0 Or (i > i3 And i3 > 0) Then i = i3 If i = 0 Or (i > i4 And i4 > 0) Then i = i4 If i = 0 Then Exit Do i2 = Instr(i, f, ".") i3 = i2+1 While Mid(f, i3, 1) <> "." b = Mid(f, i3, 1) If Ucase(b) = Lcase(b) Then If b <> "_" Then i = i3: Continue Do i3 += 1 Wend i4 = i3+1 While Mid(f, i4, 1) <> "." b = Mid(f, i4, 1) If Ucase(b) = Lcase(b) Then If b <> "_" Then i4 = 0: Exit While i4 += 1 Wend Mid(f, i2, 1) = "_" Mid(f, i3, 1) = "_" i = i3+1 If i4 >= 1 Then Mid(f, i4, 1) = "_": i = i4+1 Loop
'' rename variable 'class' f = replace(f, "class", "class_") '' couple of duplicate '+'s in string concatenation f = replace(f, "+ +", "+") f = replace(f, "+ +", "+") '' peek problem... f = replace(f, "peek( varptr( ctx.tbuff ) + ctx.tbuffptr )", "ctx.tbuff[ ctx.tbuffptr ]") '' exit sub from function i = 1 Do i = Instr(i + 1, f, "exit function") If i = 0 Then Exit Do If instrrev(Lcase(f), !"\nsub ", i) > instrrev(Lcase(f), !"\nfunction ", i) Then f = Left(f, i-1) & "exit sub" & Mid(f, i + Len("exit function")) End If Loop
'' exit function from sub i = 1 Do i = Instr(i + 1, f, "exit sub") If i = 0 Then Exit Do If instrrev(Lcase(f), !"\nfunction ", i) > instrrev(Lcase(f), !"\nsub ", i) Then f = Left(f, i-1) & "exit function" & Mid(f, i + Len("exit sub")) End If Loop
Open fn For Binary As #2 Put #2, 1, f Close #2 End Sub
Dim d As String
Chdir FBC0DIR
d = dir( "*.bas" ) Do While Len(d) Print d fixfile( d ) d = dir() Loop
Chdir "inc"
d = dir( "*.bi" ) Do While Len(d) Print d fixfile( d ) d = dir() Loop
Chdir ".."
Shell FBC & " -lang fblite -v -e -x ../../fbcv0.exe " _ "fbc.bas ast.bas ir.bas parser2.bas parser5.bas rtl.bas " _ "emit.bas hash.bas lex.bas parser3.bas parser6.bas strpool.bas " _ "emitdbg.bas hlp.bas parser1.bas parser4.bas reg.bas symb.bas" |