Jump to content
  • Advertisement

Aardvajk

Member
  • Content Count

    5385
  • Joined

  • Last visited

Community Reputation

13215 Excellent

About Aardvajk

  • Rank
    GDNet+

Personal Information

  • Role
    Programmer
  • Interests
    Programming

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Aardvajk

    Hey

    Goals? Well, when you are effectively trying to reinvent C++ in C++, it seems important to remember that you are absolutely nuts and that this is purely a project for fun. No goals at all other than keeping my free time occupied
  2. Aardvajk

    Hey

    Hey dmatter! There is a name from the distant past. Great to see you are still here. I finally grew up enough to start using GitHub https://github.com/Aardvajk?tab=repositories This project is everything under Px and the pcx support library. Terrible names but my name is Paul so it sort of makes sense to me at least. I've fallen madly in love with the visitor pattern for writing compilers. It is such a pleasure to code in this way. But yeah, everything is on there to peruse. Great to hear from you. Hope your life is good too. (The IR is HORRIBLY unoptimised by the way. Taking the approach of getting it working first then revisiting that later. The only optimisation I have implemented is turning var a = foo() into var a:foo() in the Transform stage)
  3. Aardvajk

    Hey

    Wow. Been a while. Must be years since I last updated this. So I'm still alive and I'm working on a toy version of LLVM purely for my own amusement. Pv is a virtual machine executable that executes a fairly small virtual instruction set: enum class Reg : std::uint8_t { Pc, Bp, Sp, Dx, Invalid }; const char *toString(Reg v); enum class Op : std::uint8_t { End, SetRI, SubRI, AddRI, CopyRR, CopyRA, CopyAR, CopyAI, CopyAA, PushR, PopR, Call, Ret, JmpZ, Add, Sub, Mul, Div, Mod, Not, Neg, Lt, LtEq, Conv, Alloc, Free, Service, Invalid }; Nothing very fancy. Pi (Paul's Intermediate language) is a typeless language in the sense that variables only have sizes. It is designed to be translated line by line by Pi.exe into bytecode for Pv. Pc is the higher level language. I appreciate I am not explaining this well but there are quite a few features now. Today I added the facility to overload operator<< to allow myself to create a std.ostream functionality. Assume stdlib.ph provides std.print functions for std.ints and for ptr std.char (pointer to char): include("stdios.ph"); class Age { func new(v:std.int) ... v(v) { } var v:std.int; } func operator<<(o:ref std.ostream, a:ref Age):ref std.ostream { return o << a.v; } class Person { func new(n:ptr std.char, a:Age) ... n(n), a(a) { } func name():ptr std.char { return n; } func age():Age { return a; } var n:ptr std.char; var a:Age; } func operator<<(o:ref std.ostream, a:ref Person):ref std.ostream { return o << a.name() << " is " << a.age() << " years old"; } func main() { std.out() << Person("Paul", Age(44)) << ".\n"; } Where stdios.ph looks like this: namespace std { class ostream { } func operator<<(:ref ostream, :std.int):ref ostream; func operator<<(:ref ostream, :std.bool):ref ostream; func operator<<(:ref ostream, :ptr std.char):ref ostream; func out():ref ostream; } And is implemented like this: include("stdios.ph"); include("stdlib.ph"); func std.operator<<(o:ref std.ostream, v:std.int):ref std.ostream { std.print(v); return o; } func std.operator<<(o:ref std.ostream, v:std.bool):ref std.ostream { std.print(v); return o; } func std.operator<<(o:ref std.ostream, v:ptr std.char):ref std.ostream { std.print(v); return o; } var instance:std.ostream; func std.out():ref std.ostream { return instance; } So Pc.exe transforms each translation unit into a .pi file. For script.pc above, the produced .pi looks like this: var "#global.script.pc1":11 = string(" years old"), char(0); var "#global.script.pc3":3 = string(".\n"), char(0); var "#global.script.pc2":5 = string("Paul"), char(0); var "#global.script.pc0":5 = string(" is "), char(0); func[autogen] "std.ostream.new(ref ptr std.ostream):std.null <method>":0 { arg "std.ostream.new.this":8; var "@rf":1; clrf "@rf"; push &"@rf"; load 1; jmp ifz "#no_return_exit_std.ostream.new.#scope0"; jmp "#end_function"; "#no_return_exit_std.ostream.new.#scope0": "#end_function": } func[autogen] "std.ostream.new(ref ptr std.ostream,ref ptr std.ostream):std.null <method>":0 { arg "std.ostream.new.this":8; arg "std.ostream.new.#tempcopy":8; var "@rf":1; clrf "@rf"; push &"@rf"; load 1; jmp ifz "#no_return_exit_std.ostream.new.#scope1"; jmp "#end_function"; "#no_return_exit_std.ostream.new.#scope1": "#end_function": } func[autogen] "std.ostream.delete(ref ptr std.ostream):std.null <method>":0 { arg "std.ostream.delete.this":8; var "@rf":1; clrf "@rf"; push &"@rf"; load 1; jmp ifz "#no_return_exit_std.ostream.delete.#scope2"; jmp "#end_function"; "#no_return_exit_std.ostream.delete.#scope2": "#end_function": } func[autogen] "std.ostream.operator=(ref ptr std.ostream,ref ptr std.ostream):ref ptr std.ostream <method>":8 { arg "std.ostream.operator=.this":8; arg "std.ostream.operator=.#tempcopy":8; var "@rf":1; clrf "@rf"; push "std.ostream.operator=.this"; push &"@ret"; store 8; pop 8; setf "@rf"; push &"@rf"; load 1; jmp ifz "#no_return_exit_std.ostream.operator=.#scope3"; jmp "#end_function"; "#no_return_exit_std.ostream.operator=.#scope3": "#end_function": } func "Age.new(ref ptr Age,std.int):std.null <method>":0 { arg "Age.new.this":8; arg "Age.new.v":4; var "@rf":1; clrf "@rf"; push "Age.new.v"; push "Age.new.this"; push size(0); add size; store 4; pop 4; push &"@rf"; load 1; jmp ifz "#no_return_exit_Age.new.#scope4"; jmp "#end_function"; "#no_return_exit_Age.new.#scope4": "#end_function": } func[autogen] "Age.new(ref ptr Age,ref ptr Age):std.null <method>":0 { arg "Age.new.this":8; arg "Age.new.#tempcopy":8; var "@rf":1; clrf "@rf"; push "Age.new.#tempcopy"; push size(0); add size; load 4; push "Age.new.this"; push size(0); add size; store 4; pop 4; push &"@rf"; load 1; jmp ifz "#no_return_exit_Age.new.#scope5"; jmp "#end_function"; "#no_return_exit_Age.new.#scope5": "#end_function": } func[autogen] "Age.delete(ref ptr Age):std.null <method>":0 { arg "Age.delete.this":8; var "@rf":1; clrf "@rf"; push &"@rf"; load 1; jmp ifz "#no_return_exit_Age.delete.#scope6"; jmp "#end_function"; "#no_return_exit_Age.delete.#scope6": "#end_function": } func[autogen] "Age.operator=(ref ptr Age,ref ptr Age):ref ptr Age <method>":8 { arg "Age.operator=.this":8; arg "Age.operator=.#tempcopy":8; var "@rf":1; clrf "@rf"; push "Age.operator=.#tempcopy"; push size(0); add size; load 4; push "Age.operator=.this"; push size(0); add size; store 4; pop 4; push "Age.operator=.this"; push &"@ret"; store 8; pop 8; setf "@rf"; push &"@rf"; load 1; jmp ifz "#no_return_exit_Age.operator=.#scope7"; jmp "#end_function"; "#no_return_exit_Age.operator=.#scope7": "#end_function": } func "operator<<(ref ptr std.ostream,ref ptr Age):ref ptr std.ostream":8 { arg "operator<<.o":8; arg "operator<<.a":8; var "@rf":1; clrf "@rf"; allocs 8; push "operator<<.o"; push "operator<<.a"; push size(0); add size; load 4; push &"std.operator<<(ref ptr std.ostream,std.int):ref ptr std.ostream"; call; push &"@ret"; store 8; pop 8; setf "@rf"; push &"@rf"; load 1; jmp ifz "#no_return_exit_operator<<.#scope0"; jmp "#end_function"; "#no_return_exit_operator<<.#scope0": "#end_function": } func "Person.new(ref ptr Person,ptr std.char,Age):std.null <method>":0 { arg "Person.new.this":8; arg "Person.new.n":8; arg "Person.new.a":4; var "@rf":1; clrf "@rf"; push "Person.new.n"; push "Person.new.this"; push size(0); add size; store 8; pop 8; push "Person.new.this"; push size(8); add size; push &"Person.new.a"; push &"Age.new(ref ptr Age,ref ptr Age):std.null <method>"; call; push &"@rf"; load 1; jmp ifz "#no_return_exit_Person.new.#scope1"; jmp "#end_function"; "#no_return_exit_Person.new.#scope1": "#end_function": push &"Person.new.a"; push &"Age.delete(ref ptr Age):std.null <method>"; call; } func "Person.name(ref ptr Person):ptr std.char <method>":8 { arg "Person.name.this":8; var "@rf":1; clrf "@rf"; push "Person.name.this"; push size(0); add size; load 8; push &"@ret"; store 8; pop 8; setf "@rf"; push &"@rf"; load 1; jmp ifz "#no_return_exit_Person.name.#scope2"; jmp "#end_function"; "#no_return_exit_Person.name.#scope2": "#end_function": } func "Person.age(ref ptr Person):Age <method>":4 { arg "Person.age.this":8; var "@rf":1; clrf "@rf"; push &"@ret"; load 8; push "Person.age.this"; push size(8); add size; push &"Age.new(ref ptr Age,ref ptr Age):std.null <method>"; call; setf "@rf"; push &"@rf"; load 1; jmp ifz "#no_return_exit_Person.age.#scope3"; jmp "#end_function"; "#no_return_exit_Person.age.#scope3": "#end_function": } func[autogen] "Person.new(ref ptr Person,ref ptr Person):std.null <method>":0 { arg "Person.new.this":8; arg "Person.new.#tempcopy":8; var "@rf":1; clrf "@rf"; push "Person.new.#tempcopy"; push size(0); add size; load 8; push "Person.new.this"; push size(0); add size; store 8; pop 8; push "Person.new.this"; push size(8); add size; push "Person.new.#tempcopy"; push size(8); add size; push &"Age.new(ref ptr Age,ref ptr Age):std.null <method>"; call; push &"@rf"; load 1; jmp ifz "#no_return_exit_Person.new.#scope4"; jmp "#end_function"; "#no_return_exit_Person.new.#scope4": "#end_function": } func[autogen] "Person.delete(ref ptr Person):std.null <method>":0 { arg "Person.delete.this":8; var "@rf":1; clrf "@rf"; push &"@rf"; load 1; jmp ifz "#no_return_exit_Person.delete.#scope5"; jmp "#end_function"; "#no_return_exit_Person.delete.#scope5": "#end_function": push "Person.delete.this"; push size(8); add size; push &"Age.delete(ref ptr Age):std.null <method>"; call; } func[autogen] "Person.operator=(ref ptr Person,ref ptr Person):ref ptr Person <method>":8 { arg "Person.operator=.this":8; arg "Person.operator=.#tempcopy":8; var "@rf":1; clrf "@rf"; push "Person.operator=.#tempcopy"; push size(0); add size; load 8; push "Person.operator=.this"; push size(0); add size; store 8; pop 8; allocs 8; push "Person.operator=.this"; push size(8); add size; push "Person.operator=.#tempcopy"; push size(8); add size; push &"Age.operator=(ref ptr Age,ref ptr Age):ref ptr Age <method>"; call; load 4; pop 4; push "Person.operator=.this"; push &"@ret"; store 8; pop 8; setf "@rf"; push &"@rf"; load 1; jmp ifz "#no_return_exit_Person.operator=.#scope6"; jmp "#end_function"; "#no_return_exit_Person.operator=.#scope6": "#end_function": } func "operator<<(ref ptr std.ostream,ref ptr Person):ref ptr std.ostream":8 { arg "operator<<.o":8; arg "operator<<.a":8; var "@rf":1; var "#tempreturn_Age6":4; clrf "@rf"; allocs 8; allocs 8; allocs 8; allocs 8; push "operator<<.o"; allocs 8; push "operator<<.a"; push &"Person.name(ref ptr Person):ptr std.char <method>"; call; push &"std.operator<<(ref ptr std.ostream,ptr std.char):ref ptr std.ostream"; call; push &"#global.script.pc0"; push &"std.operator<<(ref ptr std.ostream,ptr std.char):ref ptr std.ostream"; call; push &"#tempreturn_Age6"; push "operator<<.a"; push &"Person.age(ref ptr Person):Age <method>"; call; push &"operator<<(ref ptr std.ostream,ref ptr Age):ref ptr std.ostream"; call; push &"#global.script.pc1"; push &"std.operator<<(ref ptr std.ostream,ptr std.char):ref ptr std.ostream"; call; push &"@ret"; store 8; pop 8; setf "@rf"; push &"#tempreturn_Age6"; push &"Age.delete(ref ptr Age):std.null <method>"; call; push &"@rf"; load 1; jmp ifz "#no_return_exit_operator<<.#scope0"; jmp "#end_function"; "#no_return_exit_operator<<.#scope0": "#end_function": } func "main():std.null":0 { var "@rf":1; var "#temp_Age7":4; var "#temp_Person8":12; clrf "@rf"; allocs 8; allocs 8; allocs 8; push &"std.out():ref ptr std.ostream"; call; push &"#temp_Person8"; push &"#global.script.pc2"; allocs 4; push sp; push &"#temp_Age7"; push int(44); push &"Age.new(ref ptr Age,std.int):std.null <method>"; call; push &"#temp_Age7"; push &"Age.new(ref ptr Age,ref ptr Age):std.null <method>"; call; push &"Person.new(ref ptr Person,ptr std.char,Age):std.null <method>"; call; push &"#temp_Person8"; push &"operator<<(ref ptr std.ostream,ref ptr Person):ref ptr std.ostream"; call; push &"#global.script.pc3"; push &"std.operator<<(ref ptr std.ostream,ptr std.char):ref ptr std.ostream"; call; load 0; push &"#temp_Age7"; push &"Age.delete(ref ptr Age):std.null <method>"; call; push &"#temp_Person8"; push &"Person.delete(ref ptr Person):std.null <method>"; call; push &"@rf"; load 1; jmp ifz "#no_return_exit_main.#scope0"; jmp "#end_function"; "#no_return_exit_main.#scope0": "#end_function": } pi.exe then turns this file into a binary .po which is the bytecode for Pv with some additional linker information. pl.exe is the linker. You feed it a bunch of .po files and it produces a .px file which Pv can run. The linker makes sure that functions or globals that are not used by the program are not included. Working with all this is handled by pb.exe which is a sort of custom batch processor which can also run unit tests. In this case, this is the current .bat that is run by Pb when I'm doing a full test: #echo off test ../unittests echo on pc -I=../lib script.pc script.pi pi script.pi script.po pl -trim out.px script.po ../lib/stdlib.po ../lib/stdios.po pd out.px pv out.px pd.exe is the disassembler. Disassembling the out.px from this example produces this monstrosity (in Pv bytecode): == disassemble out.px ================================================================================================== prologue { -- program prologue ---------------------------------------------------------------------------------------------------- 0: setri dx 122,10,0,0,0,0,0,0 10: call dx -- terminate ----------------------------------------------------------------------------------------------------------- 12: end -- end ----------------------------------------------------------------------------------------------------------------- } == #global.script.pc1 ================================================================================================== var #global.script.pc1:11 13: 32,121,101,97,114,115,32,111,108,100,0 == #global.script.pc3 ================================================================================================== var #global.script.pc3:3 24: 46,10,0 == #global.script.pc2 ================================================================================================== var #global.script.pc2:5 27: 80,97,117,108,0 == #global.script.pc0 ================================================================================================== var #global.script.pc0:5 32: 32,105,115,32,0 == instance ============================================================================================================ var instance:0 37: == Age.new(ref ptr Age,std.int):std.null <method> ====================================================================== func Age.new(ref ptr Age,std.int):std.null <method>:0 { -- function prologue --------------------------------------------------------------------------------------------------- 37: pushr bp 39: copyrr sp bp -- allocate locals ----------------------------------------------------------------------------------------------------- 42: subri sp 1 -- clrf @rf ------------------------------------------------------------------------------------------------------------ 52: copyrr bp dx 55: subri dx 1 65: copyai dx 1 0 -- push Age.new.v ------------------------------------------------------------------------------------------------------ 76: copyrr bp dx 79: addri dx 16 89: subri sp 4 99: copyaa dx sp 4 -- push Age.new.this --------------------------------------------------------------------------------------------------- 110: copyrr bp dx 113: addri dx 20 123: subri sp 8 133: copyaa dx sp 8 -- push size(0) -------------------------------------------------------------------------------------------------------- 144: subri sp 8 154: copyai sp 8 0,0,0,0,0,0,0,0 -- add size ------------------------------------------------------------------------------------------------------------ 172: add size -- store 4 ------------------------------------------------------------------------------------------------------------- 174: popr dx 176: copyaa sp dx 4 -- pop 4 --------------------------------------------------------------------------------------------------------------- 187: addri sp 4 -- push &@rf ----------------------------------------------------------------------------------------------------------- 197: copyrr bp dx 200: subri dx 1 210: pushr dx -- load 1 -------------------------------------------------------------------------------------------------------------- 212: popr dx 214: subri sp 1 224: copyaa dx sp 1 -- jmp ifz #no_return_exit_Age.new.#scope4 ----------------------------------------------------------------------------- 235: jmpz 10 244: addri pc 10 -- jmp #end_function --------------------------------------------------------------------------------------------------- 254: addri pc 0 -- label #no_return_exit_Age.new.#scope4 ------------------------------------------------------------------------------- -- label #end_function ------------------------------------------------------------------------------------------------- -- free locals --------------------------------------------------------------------------------------------------------- 264: addri sp 1 -- function epilogue --------------------------------------------------------------------------------------------------- 274: popr bp 276: ret 12 -- end func Age.new(ref ptr Age,std.int):std.null <method> ------------------------------------------------------------- } == Age.new(ref ptr Age,ref ptr Age):std.null <method> ================================================================== func Age.new(ref ptr Age,ref ptr Age):std.null <method>:0 { -- function prologue --------------------------------------------------------------------------------------------------- 285: pushr bp 287: copyrr sp bp -- allocate locals ----------------------------------------------------------------------------------------------------- 290: subri sp 1 -- clrf @rf ------------------------------------------------------------------------------------------------------------ 300: copyrr bp dx 303: subri dx 1 313: copyai dx 1 0 -- push Age.new.#tempcopy ---------------------------------------------------------------------------------------------- 324: copyrr bp dx 327: addri dx 16 337: subri sp 8 347: copyaa dx sp 8 -- push size(0) -------------------------------------------------------------------------------------------------------- 358: subri sp 8 368: copyai sp 8 0,0,0,0,0,0,0,0 -- add size ------------------------------------------------------------------------------------------------------------ 386: add size -- load 4 -------------------------------------------------------------------------------------------------------------- 388: popr dx 390: subri sp 4 400: copyaa dx sp 4 -- push Age.new.this --------------------------------------------------------------------------------------------------- 411: copyrr bp dx 414: addri dx 24 424: subri sp 8 434: copyaa dx sp 8 -- push size(0) -------------------------------------------------------------------------------------------------------- 445: subri sp 8 455: copyai sp 8 0,0,0,0,0,0,0,0 -- add size ------------------------------------------------------------------------------------------------------------ 473: add size -- store 4 ------------------------------------------------------------------------------------------------------------- 475: popr dx 477: copyaa sp dx 4 -- pop 4 --------------------------------------------------------------------------------------------------------------- 488: addri sp 4 -- push &@rf ----------------------------------------------------------------------------------------------------------- 498: copyrr bp dx 501: subri dx 1 511: pushr dx -- load 1 -------------------------------------------------------------------------------------------------------------- 513: popr dx 515: subri sp 1 525: copyaa dx sp 1 -- jmp ifz #no_return_exit_Age.new.#scope5 ----------------------------------------------------------------------------- 536: jmpz 10 545: addri pc 10 -- jmp #end_function --------------------------------------------------------------------------------------------------- 555: addri pc 0 -- label #no_return_exit_Age.new.#scope5 ------------------------------------------------------------------------------- -- label #end_function ------------------------------------------------------------------------------------------------- -- free locals --------------------------------------------------------------------------------------------------------- 565: addri sp 1 -- function epilogue --------------------------------------------------------------------------------------------------- 575: popr bp 577: ret 16 -- end func Age.new(ref ptr Age,ref ptr Age):std.null <method> --------------------------------------------------------- } == Age.delete(ref ptr Age):std.null <method> =========================================================================== func Age.delete(ref ptr Age):std.null <method>:0 { -- function prologue --------------------------------------------------------------------------------------------------- 586: pushr bp 588: copyrr sp bp -- allocate locals ----------------------------------------------------------------------------------------------------- 591: subri sp 1 -- clrf @rf ------------------------------------------------------------------------------------------------------------ 601: copyrr bp dx 604: subri dx 1 614: copyai dx 1 0 -- push &@rf ----------------------------------------------------------------------------------------------------------- 625: copyrr bp dx 628: subri dx 1 638: pushr dx -- load 1 -------------------------------------------------------------------------------------------------------------- 640: popr dx 642: subri sp 1 652: copyaa dx sp 1 -- jmp ifz #no_return_exit_Age.delete.#scope6 -------------------------------------------------------------------------- 663: jmpz 10 672: addri pc 10 -- jmp #end_function --------------------------------------------------------------------------------------------------- 682: addri pc 0 -- label #no_return_exit_Age.delete.#scope6 ---------------------------------------------------------------------------- -- label #end_function ------------------------------------------------------------------------------------------------- -- free locals --------------------------------------------------------------------------------------------------------- 692: addri sp 1 -- function epilogue --------------------------------------------------------------------------------------------------- 702: popr bp 704: ret 8 -- end func Age.delete(ref ptr Age):std.null <method> ------------------------------------------------------------------ } == operator<<(ref ptr std.ostream,ref ptr Age):ref ptr std.ostream ===================================================== func operator<<(ref ptr std.ostream,ref ptr Age):ref ptr std.ostream:8 { -- function prologue --------------------------------------------------------------------------------------------------- 713: pushr bp 715: copyrr sp bp -- allocate locals ----------------------------------------------------------------------------------------------------- 718: subri sp 1 -- clrf @rf ------------------------------------------------------------------------------------------------------------ 728: copyrr bp dx 731: subri dx 1 741: copyai dx 1 0 -- allocs 8 ------------------------------------------------------------------------------------------------------------ 752: subri sp 8 -- push operator<<.o --------------------------------------------------------------------------------------------------- 762: copyrr bp dx 765: addri dx 24 775: subri sp 8 785: copyaa dx sp 8 -- push operator<<.a --------------------------------------------------------------------------------------------------- 796: copyrr bp dx 799: addri dx 16 809: subri sp 8 819: copyaa dx sp 8 -- push size(0) -------------------------------------------------------------------------------------------------------- 830: subri sp 8 840: copyai sp 8 0,0,0,0,0,0,0,0 -- add size ------------------------------------------------------------------------------------------------------------ 858: add size -- load 4 -------------------------------------------------------------------------------------------------------------- 860: popr dx 862: subri sp 4 872: copyaa dx sp 4 -- push &std.operator<<(ref ptr std.ostream,std.int):ref ptr std.ostream ----------------------------------------------- 883: setri dx -18,12,0,0,0,0,0,0 893: pushr dx -- call ---------------------------------------------------------------------------------------------------------------- 895: popr dx 897: call dx -- push &@ret ---------------------------------------------------------------------------------------------------------- 899: copyrr bp dx 902: addri dx 32 912: pushr dx -- store 8 ------------------------------------------------------------------------------------------------------------- 914: popr dx 916: copyaa sp dx 8 -- pop 8 --------------------------------------------------------------------------------------------------------------- 927: addri sp 8 -- setf @rf ------------------------------------------------------------------------------------------------------------ 937: copyrr bp dx 940: subri dx 1 950: copyai dx 1 1 -- push &@rf ----------------------------------------------------------------------------------------------------------- 961: copyrr bp dx 964: subri dx 1 974: pushr dx -- load 1 -------------------------------------------------------------------------------------------------------------- 976: popr dx 978: subri sp 1 988: copyaa dx sp 1 -- jmp ifz #no_return_exit_operator<<.#scope0 -------------------------------------------------------------------------- 999: jmpz 10 1008: addri pc 10 -- jmp #end_function --------------------------------------------------------------------------------------------------- 1018: addri pc 0 -- label #no_return_exit_operator<<.#scope0 ---------------------------------------------------------------------------- -- label #end_function ------------------------------------------------------------------------------------------------- -- free locals --------------------------------------------------------------------------------------------------------- 1028: addri sp 1 -- function epilogue --------------------------------------------------------------------------------------------------- 1038: popr bp 1040: ret 16 -- end func operator<<(ref ptr std.ostream,ref ptr Age):ref ptr std.ostream -------------------------------------------- } == Person.new(ref ptr Person,ptr std.char,Age):std.null <method> ======================================================= func Person.new(ref ptr Person,ptr std.char,Age):std.null <method>:0 { -- function prologue --------------------------------------------------------------------------------------------------- 1049: pushr bp 1051: copyrr sp bp -- allocate locals ----------------------------------------------------------------------------------------------------- 1054: subri sp 1 -- clrf @rf ------------------------------------------------------------------------------------------------------------ 1064: copyrr bp dx 1067: subri dx 1 1077: copyai dx 1 0 -- push Person.new.n --------------------------------------------------------------------------------------------------- 1088: copyrr bp dx 1091: addri dx 20 1101: subri sp 8 1111: copyaa dx sp 8 -- push Person.new.this ------------------------------------------------------------------------------------------------ 1122: copyrr bp dx 1125: addri dx 28 1135: subri sp 8 1145: copyaa dx sp 8 -- push size(0) -------------------------------------------------------------------------------------------------------- 1156: subri sp 8 1166: copyai sp 8 0,0,0,0,0,0,0,0 -- add size ------------------------------------------------------------------------------------------------------------ 1184: add size -- store 8 ------------------------------------------------------------------------------------------------------------- 1186: popr dx 1188: copyaa sp dx 8 -- pop 8 --------------------------------------------------------------------------------------------------------------- 1199: addri sp 8 -- push Person.new.this ------------------------------------------------------------------------------------------------ 1209: copyrr bp dx 1212: addri dx 28 1222: subri sp 8 1232: copyaa dx sp 8 -- push size(8) -------------------------------------------------------------------------------------------------------- 1243: subri sp 8 1253: copyai sp 8 8,0,0,0,0,0,0,0 -- add size ------------------------------------------------------------------------------------------------------------ 1271: add size -- push &Person.new.a -------------------------------------------------------------------------------------------------- 1273: copyrr bp dx 1276: addri dx 16 1286: pushr dx -- push &Age.new(ref ptr Age,ref ptr Age):std.null <method> ------------------------------------------------------------ 1288: setri dx 29,1,0,0,0,0,0,0 1298: pushr dx -- call ---------------------------------------------------------------------------------------------------------------- 1300: popr dx 1302: call dx -- push &@rf ----------------------------------------------------------------------------------------------------------- 1304: copyrr bp dx 1307: subri dx 1 1317: pushr dx -- load 1 -------------------------------------------------------------------------------------------------------------- 1319: popr dx 1321: subri sp 1 1331: copyaa dx sp 1 -- jmp ifz #no_return_exit_Person.new.#scope1 -------------------------------------------------------------------------- 1342: jmpz 10 1351: addri pc 10 -- jmp #end_function --------------------------------------------------------------------------------------------------- 1361: addri pc 0 -- label #no_return_exit_Person.new.#scope1 ---------------------------------------------------------------------------- -- label #end_function ------------------------------------------------------------------------------------------------- -- push &Person.new.a -------------------------------------------------------------------------------------------------- 1371: copyrr bp dx 1374: addri dx 16 1384: pushr dx -- push &Age.delete(ref ptr Age):std.null <method> --------------------------------------------------------------------- 1386: setri dx 74,2,0,0,0,0,0,0 1396: pushr dx -- call ---------------------------------------------------------------------------------------------------------------- 1398: popr dx 1400: call dx -- free locals --------------------------------------------------------------------------------------------------------- 1402: addri sp 1 -- function epilogue --------------------------------------------------------------------------------------------------- 1412: popr bp 1414: ret 20 -- end func Person.new(ref ptr Person,ptr std.char,Age):std.null <method> ---------------------------------------------- } == Person.name(ref ptr Person):ptr std.char <method> =================================================================== func Person.name(ref ptr Person):ptr std.char <method>:8 { -- function prologue --------------------------------------------------------------------------------------------------- 1423: pushr bp 1425: copyrr sp bp -- allocate locals ----------------------------------------------------------------------------------------------------- 1428: subri sp 1 -- clrf @rf ------------------------------------------------------------------------------------------------------------ 1438: copyrr bp dx 1441: subri dx 1 1451: copyai dx 1 0 -- push Person.name.this ----------------------------------------------------------------------------------------------- 1462: copyrr bp dx 1465: addri dx 16 1475: subri sp 8 1485: copyaa dx sp 8 -- push size(0) -------------------------------------------------------------------------------------------------------- 1496: subri sp 8 1506: copyai sp 8 0,0,0,0,0,0,0,0 -- add size ------------------------------------------------------------------------------------------------------------ 1524: add size -- load 8 -------------------------------------------------------------------------------------------------------------- 1526: popr dx 1528: subri sp 8 1538: copyaa dx sp 8 -- push &@ret ---------------------------------------------------------------------------------------------------------- 1549: copyrr bp dx 1552: addri dx 24 1562: pushr dx -- store 8 ------------------------------------------------------------------------------------------------------------- 1564: popr dx 1566: copyaa sp dx 8 -- pop 8 --------------------------------------------------------------------------------------------------------------- 1577: addri sp 8 -- setf @rf ------------------------------------------------------------------------------------------------------------ 1587: copyrr bp dx 1590: subri dx 1 1600: copyai dx 1 1 -- push &@rf ----------------------------------------------------------------------------------------------------------- 1611: copyrr bp dx 1614: subri dx 1 1624: pushr dx -- load 1 -------------------------------------------------------------------------------------------------------------- 1626: popr dx 1628: subri sp 1 1638: copyaa dx sp 1 -- jmp ifz #no_return_exit_Person.name.#scope2 ------------------------------------------------------------------------- 1649: jmpz 10 1658: addri pc 10 -- jmp #end_function --------------------------------------------------------------------------------------------------- 1668: addri pc 0 -- label #no_return_exit_Person.name.#scope2 --------------------------------------------------------------------------- -- label #end_function ------------------------------------------------------------------------------------------------- -- free locals --------------------------------------------------------------------------------------------------------- 1678: addri sp 1 -- function epilogue --------------------------------------------------------------------------------------------------- 1688: popr bp 1690: ret 8 -- end func Person.name(ref ptr Person):ptr std.char <method> ---------------------------------------------------------- } == Person.age(ref ptr Person):Age <method> ============================================================================= func Person.age(ref ptr Person):Age <method>:4 { -- function prologue --------------------------------------------------------------------------------------------------- 1699: pushr bp 1701: copyrr sp bp -- allocate locals ----------------------------------------------------------------------------------------------------- 1704: subri sp 1 -- clrf @rf ------------------------------------------------------------------------------------------------------------ 1714: copyrr bp dx 1717: subri dx 1 1727: copyai dx 1 0 -- push &@ret ---------------------------------------------------------------------------------------------------------- 1738: copyrr bp dx 1741: addri dx 24 1751: pushr dx -- load 8 -------------------------------------------------------------------------------------------------------------- 1753: popr dx 1755: subri sp 8 1765: copyaa dx sp 8 -- push Person.age.this ------------------------------------------------------------------------------------------------ 1776: copyrr bp dx 1779: addri dx 16 1789: subri sp 8 1799: copyaa dx sp 8 -- push size(8) -------------------------------------------------------------------------------------------------------- 1810: subri sp 8 1820: copyai sp 8 8,0,0,0,0,0,0,0 -- add size ------------------------------------------------------------------------------------------------------------ 1838: add size -- push &Age.new(ref ptr Age,ref ptr Age):std.null <method> ------------------------------------------------------------ 1840: setri dx 29,1,0,0,0,0,0,0 1850: pushr dx -- call ---------------------------------------------------------------------------------------------------------------- 1852: popr dx 1854: call dx -- setf @rf ------------------------------------------------------------------------------------------------------------ 1856: copyrr bp dx 1859: subri dx 1 1869: copyai dx 1 1 -- push &@rf ----------------------------------------------------------------------------------------------------------- 1880: copyrr bp dx 1883: subri dx 1 1893: pushr dx -- load 1 -------------------------------------------------------------------------------------------------------------- 1895: popr dx 1897: subri sp 1 1907: copyaa dx sp 1 -- jmp ifz #no_return_exit_Person.age.#scope3 -------------------------------------------------------------------------- 1918: jmpz 10 1927: addri pc 10 -- jmp #end_function --------------------------------------------------------------------------------------------------- 1937: addri pc 0 -- label #no_return_exit_Person.age.#scope3 ---------------------------------------------------------------------------- -- label #end_function ------------------------------------------------------------------------------------------------- -- free locals --------------------------------------------------------------------------------------------------------- 1947: addri sp 1 -- function epilogue --------------------------------------------------------------------------------------------------- 1957: popr bp 1959: ret 8 -- end func Person.age(ref ptr Person):Age <method> -------------------------------------------------------------------- } == Person.delete(ref ptr Person):std.null <method> ===================================================================== func Person.delete(ref ptr Person):std.null <method>:0 { -- function prologue --------------------------------------------------------------------------------------------------- 1968: pushr bp 1970: copyrr sp bp -- allocate locals ----------------------------------------------------------------------------------------------------- 1973: subri sp 1 -- clrf @rf ------------------------------------------------------------------------------------------------------------ 1983: copyrr bp dx 1986: subri dx 1 1996: copyai dx 1 0 -- push &@rf ----------------------------------------------------------------------------------------------------------- 2007: copyrr bp dx 2010: subri dx 1 2020: pushr dx -- load 1 -------------------------------------------------------------------------------------------------------------- 2022: popr dx 2024: subri sp 1 2034: copyaa dx sp 1 -- jmp ifz #no_return_exit_Person.delete.#scope5 ----------------------------------------------------------------------- 2045: jmpz 10 2054: addri pc 10 -- jmp #end_function --------------------------------------------------------------------------------------------------- 2064: addri pc 0 -- label #no_return_exit_Person.delete.#scope5 ------------------------------------------------------------------------- -- label #end_function ------------------------------------------------------------------------------------------------- -- push Person.delete.this --------------------------------------------------------------------------------------------- 2074: copyrr bp dx 2077: addri dx 16 2087: subri sp 8 2097: copyaa dx sp 8 -- push size(8) -------------------------------------------------------------------------------------------------------- 2108: subri sp 8 2118: copyai sp 8 8,0,0,0,0,0,0,0 -- add size ------------------------------------------------------------------------------------------------------------ 2136: add size -- push &Age.delete(ref ptr Age):std.null <method> --------------------------------------------------------------------- 2138: setri dx 74,2,0,0,0,0,0,0 2148: pushr dx -- call ---------------------------------------------------------------------------------------------------------------- 2150: popr dx 2152: call dx -- free locals --------------------------------------------------------------------------------------------------------- 2154: addri sp 1 -- function epilogue --------------------------------------------------------------------------------------------------- 2164: popr bp 2166: ret 8 -- end func Person.delete(ref ptr Person):std.null <method> ------------------------------------------------------------ } == operator<<(ref ptr std.ostream,ref ptr Person):ref ptr std.ostream ================================================== func operator<<(ref ptr std.ostream,ref ptr Person):ref ptr std.ostream:8 { -- function prologue --------------------------------------------------------------------------------------------------- 2175: pushr bp 2177: copyrr sp bp -- allocate locals ----------------------------------------------------------------------------------------------------- 2180: subri sp 5 -- clrf @rf ------------------------------------------------------------------------------------------------------------ 2190: copyrr bp dx 2193: subri dx 1 2203: copyai dx 1 0 -- allocs 8 ------------------------------------------------------------------------------------------------------------ 2214: subri sp 8 -- allocs 8 ------------------------------------------------------------------------------------------------------------ 2224: subri sp 8 -- allocs 8 ------------------------------------------------------------------------------------------------------------ 2234: subri sp 8 -- allocs 8 ------------------------------------------------------------------------------------------------------------ 2244: subri sp 8 -- push operator<<.o --------------------------------------------------------------------------------------------------- 2254: copyrr bp dx 2257: addri dx 24 2267: subri sp 8 2277: copyaa dx sp 8 -- allocs 8 ------------------------------------------------------------------------------------------------------------ 2288: subri sp 8 -- push operator<<.a --------------------------------------------------------------------------------------------------- 2298: copyrr bp dx 2301: addri dx 16 2311: subri sp 8 2321: copyaa dx sp 8 -- push &Person.name(ref ptr Person):ptr std.char <method> ------------------------------------------------------------- 2332: setri dx -113,5,0,0,0,0,0,0 2342: pushr dx -- call ---------------------------------------------------------------------------------------------------------------- 2344: popr dx 2346: call dx -- push &std.operator<<(ref ptr std.ostream,ptr std.char):ref ptr std.ostream ------------------------------------------ 2348: setri dx -1,13,0,0,0,0,0,0 2358: pushr dx -- call ---------------------------------------------------------------------------------------------------------------- 2360: popr dx 2362: call dx -- push &#global.script.pc0 -------------------------------------------------------------------------------------------- 2364: setri dx 32,0,0,0,0,0,0,0 2374: pushr dx -- push &std.operator<<(ref ptr std.ostream,ptr std.char):ref ptr std.ostream ------------------------------------------ 2376: setri dx -1,13,0,0,0,0,0,0 2386: pushr dx -- call ---------------------------------------------------------------------------------------------------------------- 2388: popr dx 2390: call dx -- push &#tempreturn_Age6 ---------------------------------------------------------------------------------------------- 2392: copyrr bp dx 2395: subri dx 5 2405: pushr dx -- push operator<<.a --------------------------------------------------------------------------------------------------- 2407: copyrr bp dx 2410: addri dx 16 2420: subri sp 8 2430: copyaa dx sp 8 -- push &Person.age(ref ptr Person):Age <method> ----------------------------------------------------------------------- 2441: setri dx -93,6,0,0,0,0,0,0 2451: pushr dx -- call ---------------------------------------------------------------------------------------------------------------- 2453: popr dx 2455: call dx -- push &operator<<(ref ptr std.ostream,ref ptr Age):ref ptr std.ostream ----------------------------------------------- 2457: setri dx -55,2,0,0,0,0,0,0 2467: pushr dx -- call ---------------------------------------------------------------------------------------------------------------- 2469: popr dx 2471: call dx -- push &#global.script.pc1 -------------------------------------------------------------------------------------------- 2473: setri dx 13,0,0,0,0,0,0,0 2483: pushr dx -- push &std.operator<<(ref ptr std.ostream,ptr std.char):ref ptr std.ostream ------------------------------------------ 2485: setri dx -1,13,0,0,0,0,0,0 2495: pushr dx -- call ---------------------------------------------------------------------------------------------------------------- 2497: popr dx 2499: call dx -- push &@ret ---------------------------------------------------------------------------------------------------------- 2501: copyrr bp dx 2504: addri dx 32 2514: pushr dx -- store 8 ------------------------------------------------------------------------------------------------------------- 2516: popr dx 2518: copyaa sp dx 8 -- pop 8 --------------------------------------------------------------------------------------------------------------- 2529: addri sp 8 -- setf @rf ------------------------------------------------------------------------------------------------------------ 2539: copyrr bp dx 2542: subri dx 1 2552: copyai dx 1 1 -- push &#tempreturn_Age6 ---------------------------------------------------------------------------------------------- 2563: copyrr bp dx 2566: subri dx 5 2576: pushr dx -- push &Age.delete(ref ptr Age):std.null <method> --------------------------------------------------------------------- 2578: setri dx 74,2,0,0,0,0,0,0 2588: pushr dx -- call ---------------------------------------------------------------------------------------------------------------- 2590: popr dx 2592: call dx -- push &@rf ----------------------------------------------------------------------------------------------------------- 2594: copyrr bp dx 2597: subri dx 1 2607: pushr dx -- load 1 -------------------------------------------------------------------------------------------------------------- 2609: popr dx 2611: subri sp 1 2621: copyaa dx sp 1 -- jmp ifz #no_return_exit_operator<<.#scope0 -------------------------------------------------------------------------- 2632: jmpz 10 2641: addri pc 10 -- jmp #end_function --------------------------------------------------------------------------------------------------- 2651: addri pc 0 -- label #no_return_exit_operator<<.#scope0 ---------------------------------------------------------------------------- -- label #end_function ------------------------------------------------------------------------------------------------- -- free locals --------------------------------------------------------------------------------------------------------- 2661: addri sp 5 -- function epilogue --------------------------------------------------------------------------------------------------- 2671: popr bp 2673: ret 16 -- end func operator<<(ref ptr std.ostream,ref ptr Person):ref ptr std.ostream ----------------------------------------- } == main():std.null ===================================================================================================== func main():std.null:0 { -- function prologue --------------------------------------------------------------------------------------------------- 2682: pushr bp 2684: copyrr sp bp -- allocate locals ----------------------------------------------------------------------------------------------------- 2687: subri sp 17 -- clrf @rf ------------------------------------------------------------------------------------------------------------ 2697: copyrr bp dx 2700: subri dx 1 2710: copyai dx 1 0 -- allocs 8 ------------------------------------------------------------------------------------------------------------ 2721: subri sp 8 -- allocs 8 ------------------------------------------------------------------------------------------------------------ 2731: subri sp 8 -- allocs 8 ------------------------------------------------------------------------------------------------------------ 2741: subri sp 8 -- push &std.out():ref ptr std.ostream --------------------------------------------------------------------------------- 2751: setri dx 16,15,0,0,0,0,0,0 2761: pushr dx -- call ---------------------------------------------------------------------------------------------------------------- 2763: popr dx 2765: call dx -- push &#temp_Person8 ------------------------------------------------------------------------------------------------- 2767: copyrr bp dx 2770: subri dx 17 2780: pushr dx -- push &#global.script.pc2 -------------------------------------------------------------------------------------------- 2782: setri dx 27,0,0,0,0,0,0,0 2792: pushr dx -- allocs 4 ------------------------------------------------------------------------------------------------------------ 2794: subri sp 4 -- push sp ------------------------------------------------------------------------------------------------------------- 2804: pushr sp -- push &#temp_Age7 ---------------------------------------------------------------------------------------------------- 2806: copyrr bp dx 2809: subri dx 5 2819: pushr dx -- push int(44) -------------------------------------------------------------------------------------------------------- 2821: subri sp 4 2831: copyai sp 4 44,0,0,0 -- push &Age.new(ref ptr Age,std.int):std.null <method> ---------------------------------------------------------------- 2845: setri dx 37,0,0,0,0,0,0,0 2855: pushr dx -- call ---------------------------------------------------------------------------------------------------------------- 2857: popr dx 2859: call dx -- push &#temp_Age7 ---------------------------------------------------------------------------------------------------- 2861: copyrr bp dx 2864: subri dx 5 2874: pushr dx -- push &Age.new(ref ptr Age,ref ptr Age):std.null <method> ------------------------------------------------------------ 2876: setri dx 29,1,0,0,0,0,0,0 2886: pushr dx -- call ---------------------------------------------------------------------------------------------------------------- 2888: popr dx 2890: call dx -- push &Person.new(ref ptr Person,ptr std.char,Age):std.null <method> ------------------------------------------------- 2892: setri dx 25,4,0,0,0,0,0,0 2902: pushr dx -- call ---------------------------------------------------------------------------------------------------------------- 2904: popr dx 2906: call dx -- push &#temp_Person8 ------------------------------------------------------------------------------------------------- 2908: copyrr bp dx 2911: subri dx 17 2921: pushr dx -- push &operator<<(ref ptr std.ostream,ref ptr Person):ref ptr std.ostream -------------------------------------------- 2923: setri dx 127,8,0,0,0,0,0,0 2933: pushr dx -- call ---------------------------------------------------------------------------------------------------------------- 2935: popr dx 2937: call dx -- push &#global.script.pc3 -------------------------------------------------------------------------------------------- 2939: setri dx 24,0,0,0,0,0,0,0 2949: pushr dx -- push &std.operator<<(ref ptr std.ostream,ptr std.char):ref ptr std.ostream ------------------------------------------ 2951: setri dx -1,13,0,0,0,0,0,0 2961: pushr dx -- call ---------------------------------------------------------------------------------------------------------------- 2963: popr dx 2965: call dx -- load 0 -------------------------------------------------------------------------------------------------------------- 2967: popr dx 2969: subri sp 0 2979: copyaa dx sp 0 -- push &#temp_Age7 ---------------------------------------------------------------------------------------------------- 2990: copyrr bp dx 2993: subri dx 5 3003: pushr dx -- push &Age.delete(ref ptr Age):std.null <method> --------------------------------------------------------------------- 3005: setri dx 74,2,0,0,0,0,0,0 3015: pushr dx -- call ---------------------------------------------------------------------------------------------------------------- 3017: popr dx 3019: call dx -- push &#temp_Person8 ------------------------------------------------------------------------------------------------- 3021: copyrr bp dx 3024: subri dx 17 3034: pushr dx -- push &Person.delete(ref ptr Person):std.null <method> --------------------------------------------------------------- 3036: setri dx -80,7,0,0,0,0,0,0 3046: pushr dx -- call ---------------------------------------------------------------------------------------------------------------- 3048: popr dx 3050: call dx -- push &@rf ----------------------------------------------------------------------------------------------------------- 3052: copyrr bp dx 3055: subri dx 1 3065: pushr dx -- load 1 -------------------------------------------------------------------------------------------------------------- 3067: popr dx 3069: subri sp 1 3079: copyaa dx sp 1 -- jmp ifz #no_return_exit_main.#scope0 -------------------------------------------------------------------------------- 3090: jmpz 10 3099: addri pc 10 -- jmp #end_function --------------------------------------------------------------------------------------------------- 3109: addri pc 0 -- label #no_return_exit_main.#scope0 ---------------------------------------------------------------------------------- -- label #end_function ------------------------------------------------------------------------------------------------- -- free locals --------------------------------------------------------------------------------------------------------- 3119: addri sp 17 -- function epilogue --------------------------------------------------------------------------------------------------- 3129: popr bp 3131: ret 0 -- end func main():std.null -------------------------------------------------------------------------------------------- } == std.print(std.int):std.null ========================================================================================= func std.print(std.int):std.null:0 { -- function prologue --------------------------------------------------------------------------------------------------- 3140: pushr bp 3142: copyrr sp bp -- allocate locals ----------------------------------------------------------------------------------------------------- 3145: subri sp 0 -- push std.print.i ---------------------------------------------------------------------------------------------------- 3155: copyrr bp dx 3158: addri dx 16 3168: subri sp 4 3178: copyaa dx sp 4 -- svc 1 --------------------------------------------------------------------------------------------------------------- 3189: service 1 -- pop 4 --------------------------------------------------------------------------------------------------------------- 3194: addri sp 4 -- free locals --------------------------------------------------------------------------------------------------------- 3204: addri sp 0 -- function epilogue --------------------------------------------------------------------------------------------------- 3214: popr bp 3216: ret 4 -- end func std.print(std.int):std.null -------------------------------------------------------------------------------- } == std.print(ptr std.char):std.null ==================================================================================== func std.print(ptr std.char):std.null:0 { -- function prologue --------------------------------------------------------------------------------------------------- 3225: pushr bp 3227: copyrr sp bp -- allocate locals ----------------------------------------------------------------------------------------------------- 3230: subri sp 0 -- push std.print.i ---------------------------------------------------------------------------------------------------- 3240: copyrr bp dx 3243: addri dx 16 3253: subri sp 8 3263: copyaa dx sp 8 -- svc 3 --------------------------------------------------------------------------------------------------------------- 3274: service 3 -- pop 8 --------------------------------------------------------------------------------------------------------------- 3279: addri sp 8 -- free locals --------------------------------------------------------------------------------------------------------- 3289: addri sp 0 -- function epilogue --------------------------------------------------------------------------------------------------- 3299: popr bp 3301: ret 8 -- end func std.print(ptr std.char):std.null --------------------------------------------------------------------------- } == std.operator<<(ref ptr std.ostream,std.int):ref ptr std.ostream ===================================================== func std.operator<<(ref ptr std.ostream,std.int):ref ptr std.ostream:8 { -- function prologue --------------------------------------------------------------------------------------------------- 3310: pushr bp 3312: copyrr sp bp -- allocate locals ----------------------------------------------------------------------------------------------------- 3315: subri sp 1 -- clrf @rf ------------------------------------------------------------------------------------------------------------ 3325: copyrr bp dx 3328: subri dx 1 3338: copyai dx 1 0 -- push std.operator<<.v ----------------------------------------------------------------------------------------------- 3349: copyrr bp dx 3352: addri dx 16 3362: subri sp 4 3372: copyaa dx sp 4 -- push &std.print(std.int):std.null ----------------------------------------------------------------------------------- 3383: setri dx 68,12,0,0,0,0,0,0 3393: pushr dx -- call ---------------------------------------------------------------------------------------------------------------- 3395: popr dx 3397: call dx -- push std.operator<<.o ----------------------------------------------------------------------------------------------- 3399: copyrr bp dx 3402: addri dx 20 3412: subri sp 8 3422: copyaa dx sp 8 -- push &@ret ---------------------------------------------------------------------------------------------------------- 3433: copyrr bp dx 3436: addri dx 28 3446: pushr dx -- store 8 ------------------------------------------------------------------------------------------------------------- 3448: popr dx 3450: copyaa sp dx 8 -- pop 8 --------------------------------------------------------------------------------------------------------------- 3461: addri sp 8 -- setf @rf ------------------------------------------------------------------------------------------------------------ 3471: copyrr bp dx 3474: subri dx 1 3484: copyai dx 1 1 -- push &@rf ----------------------------------------------------------------------------------------------------------- 3495: copyrr bp dx 3498: subri dx 1 3508: pushr dx -- load 1 -------------------------------------------------------------------------------------------------------------- 3510: popr dx 3512: subri sp 1 3522: copyaa dx sp 1 -- jmp ifz #no_return_exit_std.operator<<.#scope0 ---------------------------------------------------------------------- 3533: jmpz 10 3542: addri pc 10 -- jmp #end_function --------------------------------------------------------------------------------------------------- 3552: addri pc 0 -- label #no_return_exit_std.operator<<.#scope0 ------------------------------------------------------------------------ -- label #end_function ------------------------------------------------------------------------------------------------- -- free locals --------------------------------------------------------------------------------------------------------- 3562: addri sp 1 -- function epilogue --------------------------------------------------------------------------------------------------- 3572: popr bp 3574: ret 12 -- end func std.operator<<(ref ptr std.ostream,std.int):ref ptr std.ostream -------------------------------------------- } == std.operator<<(ref ptr std.ostream,ptr std.char):ref ptr std.ostream ================================================ func std.operator<<(ref ptr std.ostream,ptr std.char):ref ptr std.ostream:8 { -- function prologue --------------------------------------------------------------------------------------------------- 3583: pushr bp 3585: copyrr sp bp -- allocate locals ----------------------------------------------------------------------------------------------------- 3588: subri sp 1 -- clrf @rf ------------------------------------------------------------------------------------------------------------ 3598: copyrr bp dx 3601: subri dx 1 3611: copyai dx 1 0 -- push std.operator<<.v ----------------------------------------------------------------------------------------------- 3622: copyrr bp dx 3625: addri dx 16 3635: subri sp 8 3645: copyaa dx sp 8 -- push &std.print(ptr std.char):std.null ------------------------------------------------------------------------------ 3656: setri dx -103,12,0,0,0,0,0,0 3666: pushr dx -- call ---------------------------------------------------------------------------------------------------------------- 3668: popr dx 3670: call dx -- push std.operator<<.o ----------------------------------------------------------------------------------------------- 3672: copyrr bp dx 3675: addri dx 24 3685: subri sp 8 3695: copyaa dx sp 8 -- push &@ret ---------------------------------------------------------------------------------------------------------- 3706: copyrr bp dx 3709: addri dx 32 3719: pushr dx -- store 8 ------------------------------------------------------------------------------------------------------------- 3721: popr dx 3723: copyaa sp dx 8 -- pop 8 --------------------------------------------------------------------------------------------------------------- 3734: addri sp 8 -- setf @rf ------------------------------------------------------------------------------------------------------------ 3744: copyrr bp dx 3747: subri dx 1 3757: copyai dx 1 1 -- push &@rf ----------------------------------------------------------------------------------------------------------- 3768: copyrr bp dx 3771: subri dx 1 3781: pushr dx -- load 1 -------------------------------------------------------------------------------------------------------------- 3783: popr dx 3785: subri sp 1 3795: copyaa dx sp 1 -- jmp ifz #no_return_exit_std.operator<<.#scope0 ---------------------------------------------------------------------- 3806: jmpz 10 3815: addri pc 10 -- jmp #end_function --------------------------------------------------------------------------------------------------- 3825: addri pc 0 -- label #no_return_exit_std.operator<<.#scope0 ------------------------------------------------------------------------ -- label #end_function ------------------------------------------------------------------------------------------------- -- free locals --------------------------------------------------------------------------------------------------------- 3835: addri sp 1 -- function epilogue --------------------------------------------------------------------------------------------------- 3845: popr bp 3847: ret 16 -- end func std.operator<<(ref ptr std.ostream,ptr std.char):ref ptr std.ostream --------------------------------------- } == std.out():ref ptr std.ostream ======================================================================================= func std.out():ref ptr std.ostream:8 { -- function prologue --------------------------------------------------------------------------------------------------- 3856: pushr bp 3858: copyrr sp bp -- allocate locals ----------------------------------------------------------------------------------------------------- 3861: subri sp 1 -- clrf @rf ------------------------------------------------------------------------------------------------------------ 3871: copyrr bp dx 3874: subri dx 1 3884: copyai dx 1 0 -- push &instance ------------------------------------------------------------------------------------------------------ 3895: setri dx 37,0,0,0,0,0,0,0 3905: pushr dx -- push &@ret ---------------------------------------------------------------------------------------------------------- 3907: copyrr bp dx 3910: addri dx 16 3920: pushr dx -- store 8 ------------------------------------------------------------------------------------------------------------- 3922: popr dx 3924: copyaa sp dx 8 -- pop 8 --------------------------------------------------------------------------------------------------------------- 3935: addri sp 8 -- setf @rf ------------------------------------------------------------------------------------------------------------ 3945: copyrr bp dx 3948: subri dx 1 3958: copyai dx 1 1 -- push &@rf ----------------------------------------------------------------------------------------------------------- 3969: copyrr bp dx 3972: subri dx 1 3982: pushr dx -- load 1 -------------------------------------------------------------------------------------------------------------- 3984: popr dx 3986: subri sp 1 3996: copyaa dx sp 1 -- jmp ifz #no_return_exit_std.out.#scope0 ----------------------------------------------------------------------------- 4007: jmpz 10 4016: addri pc 10 -- jmp #end_function --------------------------------------------------------------------------------------------------- 4026: addri pc 0 -- label #no_return_exit_std.out.#scope0 ------------------------------------------------------------------------------- -- label #end_function ------------------------------------------------------------------------------------------------- -- free locals --------------------------------------------------------------------------------------------------------- 4036: addri sp 1 -- function epilogue --------------------------------------------------------------------------------------------------- 4046: popr bp 4048: ret 0 -- end func std.out():ref ptr std.ostream ------------------------------------------------------------------------------ } Pahahaha. I'm sure you followed all of that Crappy explanation but I'd like to start blogging about this project again. Hope you are all well. I'll try to catch up on JournalLand (remember when it was called that, eh?) when I can.
  4. Frob has already pointed out on the previous page that modern C++ compilers can implement much faster dynamic casting than the string-comparison-based methods of yore. The code you post relies on at least forward declaring all of the possible derived types before the base class interface, so is not scalable to a generalised dynamic_cast system.
  5. Looks like any < > tags and their contents in the C++ are missing, e.g. template class Event { Should be something like template<class Args...> class Event { Is the original text still preserved under the hood? If it has been "eaten" somehow, it isn't going to be fixable. Don't think I have the original article but will have a look. [EDIT] I note the same in the Journal - in the code snippets, any < > tags and their contents are missing. Don't care about the Journal but just to let you know seems to be the same issue there.
  6. Okay, thanks. Journals don’t matter but if if would be possible to fix the article, it would be appreciated. Thanks.
  7. Hey all, Just happened to glance at an old article I posted several years ago: I note all the code windows seem to be eating all the <> stuff in the template code. It wasn't like this when originally posted. I also note that in my old(ish) Journal entries, all my <font> tags are appearing verbatim in the text and the code windows are all on one line with all the <> stuff missing. Is this a known issue with older posts?
  8. For a game to look professional (which is important to attract users), the content creation and art side are at least as important as the technical side and require skills and experience that are, in my humble opinion, even harder and more time-consuming to acquire. I've been programming a lot of years now but I am terrible at art and if I was serious about tackling a professional game project I would be more concerned about the cost/availability of people who could create content than the development side. Modern tools can make the technical side far easier but there are no real shortcuts on the creative side.
  9. Aardvajk

    First game area demo

    Those animations are absolutely gorgeous.
  10. Aardvajk

    Learn C++ in Unreal Engine 4 by Making a Powerful Camera

    God, I'm depressed
  11. Aardvajk

    GameDev.net Turns 18!

    Happy birthday
  12. Aardvajk

    Using Exceptions

    Ellipses catch is very useful when you want to do some cleanup and rethrow.
  13. Aardvajk

    Debugging Information Success

    I've finally grasped what you are doing with the run-time function overloading with the sum types. Looks like a really interesting idea - one of those features that could end up having emergent features that you didn't forsee I suspect, like C++'s templates. I'm working on a (far simpler) compiler/VM project myself so find these posts really interesting. Keep them coming.
  14. Aardvajk

    The first of many stones.

    tl/dr (sorry), but wanted to say your graphics are absolutely charming :) That little wooden title thing with the flowers is just superb.
  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!