aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDrahflow <drahflow@gmx.de>2013-01-21 15:56:20 +0100
committerDrahflow <drahflow@gmx.de>2013-01-21 15:56:20 +0100
commit16f98f47ba4f9f5012c9f6cf8e71cdf8035d0c3a (patch)
tree32463b516010cf2d7cd48439eb14f7dfe36268c1
parentb61235f01aecdf9be27c299616def014fe19b5af (diff)
Working len now
-rw-r--r--compiler/elymasAsmLib.ey23
l---------examples/working-compiler/range.test1
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