diff options
| author | Drahflow <drahflow@gmx.de> | 2013-01-21 15:56:20 +0100 |
|---|---|---|
| committer | Drahflow <drahflow@gmx.de> | 2013-01-21 15:56:20 +0100 |
| commit | 16f98f47ba4f9f5012c9f6cf8e71cdf8035d0c3a (patch) | |
| tree | 32463b516010cf2d7cd48439eb14f7dfe36268c1 | |
| parent | b61235f01aecdf9be27c299616def014fe19b5af (diff) | |
Working len now
| -rw-r--r-- | compiler/elymasAsmLib.ey | 23 | ||||
| l--------- | examples/working-compiler/range.test | 1 |
2 files changed, 16 insertions, 8 deletions
diff --git a/compiler/elymasAsmLib.ey b/compiler/elymasAsmLib.ey index f4a9608..bcf874c 100644 --- a/compiler/elymasAsmLib.ey +++ b/compiler/elymasAsmLib.ey @@ -50,6 +50,7 @@ # error strings "unresolved name: " toErrString ==errUnresolvedName + "neither string nor array in len" toErrString ==errNeitherStringNorArrayInLen > { defv }' allocateOffsetStruct { _ =*array len _ 4 div ==largeMoves @@ -315,7 +316,6 @@ ] /internalAllocateArray defv > { defv }' allocateOffsetStruct - # FIXME: open a new function scope [ 8 /r15 :subqImm8Reg /r15 :popqMem @@ -683,21 +683,28 @@ %70 /cl :cmpbImmReg /arrayLen :jeLbl8 - # TODO "neither string nor array in len" + errNeitherStringNorArrayInLen /rdi :movqImmReg + internalDumpErrorString /rax :movqImmReg + /rax :callqReg :ud2 @arrayLen - /rax /rcx :movqMemReg - 8 /rcx :shlqImm8Reg # clear type bits - 11 /rcx :shrqImm8Reg # divide by 8 - /rcx :decqReg # substract header size + /rax /rbx :movqMemReg + 8 /rbx :shlqImm8Reg # clear type bits + 11 /rbx :shrqImm8Reg # divide by 8 + /rbx :decqReg # substract header size /done :jmpLbl8 @stringLen - 16 /rax /rcx :movqMemDisp8Reg + 16 /rax /rbx :movqMemDisp8Reg @done - /rcx :pushqReg + 16 /rdi :movqImmReg + internalAllocate /rax :movqImmReg + /rax :callqReg + /rax :pushqReg # push integer on the stack + + /rbx 8 /rax :movqRegMemDisp8 # store integer value /r15 :pushqMem 8 /r15 :addqImm8Reg diff --git a/examples/working-compiler/range.test b/examples/working-compiler/range.test new file mode 120000 index 0000000..348f7e8 --- /dev/null +++ b/examples/working-compiler/range.test @@ -0,0 +1 @@ +../working/range.ey
\ No newline at end of file |
