aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDrahflow <drahflow@gmx.de>2013-08-06 14:58:16 +0200
committerDrahflow <drahflow@gmx.de>2013-08-06 14:58:16 +0200
commit6a6d0ef7d1b6e570f7b59c73318e74d30fc8ee90 (patch)
tree340d5480a8351002e66c8d4fe48756ebb3a09c7e
parente96da330141bb0e79ab075bab59a2bea04ff5f3f (diff)
"range" now excludes second argument
-rw-r--r--compiler/elymasAsmLib.ey14
-rw-r--r--compiler/elymasGlobal.ey9
-rw-r--r--compiler/standard.ey4
-rw-r--r--compiler/standardClient.ey22
-rw-r--r--examples/working/abstract-right.ey2
-rw-r--r--examples/working/fold.ey2
-rw-r--r--examples/working/qsort.ey2
-rw-r--r--examples/working/reverse.ey2
-rw-r--r--interpreter/ElymasGlobal.pm2
9 files changed, 29 insertions, 30 deletions
diff --git a/compiler/elymasAsmLib.ey b/compiler/elymasAsmLib.ey
index 5330199..b1783ff 100644
--- a/compiler/elymasAsmLib.ey
+++ b/compiler/elymasAsmLib.ey
@@ -42,7 +42,7 @@
stringValues [ str ] cat =stringValues
stringHoles [ { ==allocatedStrings ==opcodes
[ allocatedStrings str . :imm64 ] =*bytesToPatch
- 0 7 range { _ bytesToPatch -01 offset add opcodes =[] } each
+ 0 8 range { _ bytesToPatch -01 offset add opcodes =[] } each
} ] cat =stringHoles
[ -011 len dearray %00 %00 %00 %00 %00 %00 %00 %00
} /string deff
@@ -64,7 +64,7 @@
] _ len ==offset
linkHoles [ { =*resolve
[ what resolve :imm64 ] =*bytesToPatch
- 0 7 range { _ bytesToPatch -01 where resolve offset add add sys .asm .poke } each
+ 0 8 range { _ bytesToPatch -01 where resolve offset add add sys .asm .poke } each
} ] cat =linkHoles
[ -011 len dearray %00 %00 %00 %00 %00 %00 %00 %00
} /linkAbs64 deff
@@ -1051,9 +1051,9 @@
exactLength 0 neq {
# load string contents
- 0 exactLength 1 sub 8 div range { 8 mul ==i
+ 0 exactLength 1 sub 8 div 1 add range { 8 mul ==i
8 /rax :addqImm8Reg
- /rdx :movqImmOOBReg i _ 7 add range v 8 dearray
+ /rdx :movqImmOOBReg i _ 8 add range v 8 dearray
/rdx /rax :movqRegMem
} each
} rep
@@ -1106,7 +1106,7 @@
{ ==objAddr
" \"" sys .out .writestr
objAddr 16 add peekImm64 ==length
- objAddr 24 add _ length add 1 sub range peekImm8 ASCII * |cat fold sys .out .writestr
+ objAddr 24 add _ length add range peekImm8 ASCII * |cat fold sys .out .writestr
"\"\n" sys .out .writestr
} /stringDump deff
@@ -1168,7 +1168,7 @@
objAddr peekImm32
objAddr 4 add peekImm32 16777215 band 4294967296 mul
add 8 div ==length
- 0 length 1 sub range { 8 mul objAddr add memDump } each
+ 0 length range { 8 mul objAddr add memDump } each
objAddr 7 add peekImm8 16 div
[
@@ -1197,7 +1197,7 @@
value peekImm32
value 4 add peekImm32 16777215 band 4294967296 mul
add 8 div ==length
- 0 length 1 sub range { 8 mul value add memDump } each
+ 0 length range { 8 mul value add memDump } each
} rep
addr 8 add =addr
} loop
diff --git a/compiler/elymasGlobal.ey b/compiler/elymasGlobal.ey
index 8a6249a..fb731a2 100644
--- a/compiler/elymasGlobal.ey
+++ b/compiler/elymasGlobal.ey
@@ -832,7 +832,7 @@
]] /eydearray defv
# create an array containing a continuous range of ints
- # 0 -> last element included in range
+ # 0 -> first element after range
# 1 -> first element included in range
[[
8 /r15 :subqImm8Reg
@@ -844,7 +844,7 @@
8 /r15 :subqImm8Reg
/r15 :popqMem
- # 8 /r15 == last element
+ # 8 /r15 == after last element
# /r15 == first element
8 /r15 /rdi :movqMemDisp8Reg
@@ -863,7 +863,6 @@
@positiveRange
3 /rdi :shlqImm8Reg
- 8 /rdi :addqImm8Reg # one extra element, TODO: consider whether this is actually a good idea
::internalAllocateArray /rax :movqImmReg
/rax :callqReg
@@ -871,11 +870,11 @@
8 /rax /rdi :leaqMemDisp8Reg # fill target
8 /r15 /rax :movqMemDisp8Reg
- 8 /rax /rax :movqMemDisp8Reg # largest element
+ 8 /rax /rax :movqMemDisp8Reg # largest element + 1
@fill
/rax /rbx :cmpqRegReg
- /done :jaLbl8
+ /done :jaeLbl8
/rax :pushqReg
/rdi :pushqReg
diff --git a/compiler/standard.ey b/compiler/standard.ey
index 8a08674..90b611d 100644
--- a/compiler/standard.ey
+++ b/compiler/standard.ey
@@ -16,13 +16,13 @@
{ -1110 ; ==f =*a len _
{
0 a
- 1 -102 1 sub range f each
+ 1 -102 range f each
}' { "fold on empty array" die }'
? *
} /fold deff
{ _ =*a len
- [ 1 -1202 range { -110 sub a -01 }' each -- ]
+ [ 1 -1202 1 add range { -110 sub a -01 }' each -- ] # TODO: rethink this one, seems overly complicated
} /reverse deff
{ |or fold } /any deff
diff --git a/compiler/standardClient.ey b/compiler/standardClient.ey
index 9093940..15c1878 100644
--- a/compiler/standardClient.ey
+++ b/compiler/standardClient.ey
@@ -223,7 +223,7 @@
[ ] ==viewPortOffset
# Phase 1
- 0 inputs len 1 sub range reverse {
+ 0 inputs len range reverse {
# print "Analyzing arg: %d"
inputs * typeStack ==formalTypeStack
_ ==c typeStack ==concreteTypeStack
@@ -236,8 +236,8 @@
# " Type Stack: @$concreteTypeStack\n" print
1 neg concreteTypeStack * isVariableType {
- 1 concreteTypeStack len range { ==viewPortSize
- [ 0 viewPortSize 1 sub range { concreteTypeStack * } each ] ==typeViewPort # explicit each here
+ 1 concreteTypeStack len 1 add range { ==viewPortSize
+ [ 0 viewPortSize range { concreteTypeStack * } each ] ==typeViewPort # explicit each here
# "@$formalTypeStack vs. @$concreteTypeStack\n" print
formalTypeStack concreteTypeStack typeMismatchCount ==viewPortMatch # FIXME this line seems fishy
@@ -270,9 +270,9 @@
# Phase 2,
[
- 0 viewPortOffset len 1 sub range { ==i
+ 0 viewPortOffset len range { ==i
i concreteArgs * typeStack ==remaining
- [ 0 i viewPortOffset * 1 sub range { remaining * } each ] # explicit each here
+ [ 0 i viewPortOffset * range { remaining * } each ] # explicit each here
} each
] ==toBeAbstractedTypes
@@ -283,7 +283,7 @@
# no types need to be abstracted, function can be called
concreteArgs _ dump _ len dearray f
"attempting to call function (w.o. abstraction)" dump
- 0 concreteArgs len 1 sub range { ==i
+ 0 concreteArgs len range { ==i
i concreteArgs * sys .typed .type _ dump
i inputs * sys .typed .type _ dump
neq { "invalid input type at argument index " dump i dump "" die } rep
@@ -294,7 +294,7 @@
[ ] ==stageCalls # which functions to call in each stage
[ ] ==loops # undef for lambda abstraction, loop bound source for loops
- 0 toBeAbstractedTypes len 1 sub range reverse { ==i
+ 0 toBeAbstractedTypes len range reverse { ==i
{ i toBeAbstractedTypes * len } {
# TODO: create a decent shift
[ i toBeAbstractedTypes * reverse _ len dearray ==type ] reverse i toBeAbstractedTypes =[]
@@ -302,7 +302,7 @@
1 neg ==iterationSource
type isIterableType { i =iterationSource } rep
- 0 i 1 sub range reverse { ==j
+ 0 i range reverse { ==j
j toBeAbstractedTypes * len not not {
0 j toBeAbstractedTypes * * type commonIterationType # -> <type> <any exists>
{ =type
@@ -789,7 +789,7 @@
] ==metaSections
[
- 0 frozenAllocationCount 1 sub range { ==i
+ 0 frozenAllocationCount range { ==i
<
".-=#=-" ==name
0 ==nameOffset { =nameOffset } /setNameOffset deff
@@ -814,7 +814,7 @@
[ metaSections allocSections ] { { ==s
s .name ==n
- 0 n len 1 sub range { n * } each %00
+ 0 n len range { n * } each %00
nameOffset s .setNameOffset
nameOffset n len add 1 add =nameOffset
} each } each
@@ -920,7 +920,7 @@
] metaSections { .data cat } each ==fileData
fileData len str .alloc ==buffer
- 0 fileData len 1 sub range { ==i i fileData * i buffer =[] } each
+ 0 fileData len range { ==i i fileData * i buffer =[] } each
buffer out .writeall
diff --git a/examples/working/abstract-right.ey b/examples/working/abstract-right.ey
index fb18a03..0fc62b7 100644
--- a/examples/working/abstract-right.ey
+++ b/examples/working/abstract-right.ey
@@ -1 +1 @@
-0 3 range 5 add dump "test" dump
+0 4 range 5 add dump "test" dump
diff --git a/examples/working/fold.ey b/examples/working/fold.ey
index d3b20ce..fb32ef5 100644
--- a/examples/working/fold.ey
+++ b/examples/working/fold.ey
@@ -3,7 +3,7 @@
{ ==f ==a a len ==l
l {
0 a *
- 1 l 1 sub range { a * f * } each
+ 1 l range { a * f * } each
} { "fold on empty array" die }
? *
} /fold deff
diff --git a/examples/working/qsort.ey b/examples/working/qsort.ey
index 79e9f4c..3507444 100644
--- a/examples/working/qsort.ey
+++ b/examples/working/qsort.ey
@@ -6,7 +6,7 @@
end a * /pivot defv
start /store defv
- start end 1 sub range { /i defv
+ start end range { /i defv
i a * pivot lt {
store _ i a swap
1 add =store
diff --git a/examples/working/reverse.ey b/examples/working/reverse.ey
index 32d0b24..a958493 100644
--- a/examples/working/reverse.ey
+++ b/examples/working/reverse.ey
@@ -1,5 +1,5 @@
{ _ /a deff len /l defv
- [ 1 l range { l -01 sub a } each ]
+ [ 1 l 1 add range { l -01 sub a } each ]
} /reverse deff
[ 3 2 1 ] reverse dump
diff --git a/interpreter/ElymasGlobal.pm b/interpreter/ElymasGlobal.pm
index e4b8ee3..1cf8227 100644
--- a/interpreter/ElymasGlobal.pm
+++ b/interpreter/ElymasGlobal.pm
@@ -603,7 +603,7 @@ EOPERL
$s = $s->[0];
$e = $e->[0];
- push @$data, [[map { [$_, 'int'] } $s .. $e], ['array', '[]', [['range', 0, $e - $s]], ['int']]];
+ push @$data, [[map { [$_, 'int'] } $s .. $e - 1], ['array', '[]', [['range', 0, $e - $s - 1]], ['int']]];
}, ['func', 'seq'], 'active'],
'loop' => [sub {
my ($data, $scope) = @_;