diff options
| author | Drahflow <drahflow@gmx.de> | 2013-08-06 14:58:16 +0200 |
|---|---|---|
| committer | Drahflow <drahflow@gmx.de> | 2013-08-06 14:58:16 +0200 |
| commit | 6a6d0ef7d1b6e570f7b59c73318e74d30fc8ee90 (patch) | |
| tree | 340d5480a8351002e66c8d4fe48756ebb3a09c7e | |
| parent | e96da330141bb0e79ab075bab59a2bea04ff5f3f (diff) | |
"range" now excludes second argument
| -rw-r--r-- | compiler/elymasAsmLib.ey | 14 | ||||
| -rw-r--r-- | compiler/elymasGlobal.ey | 9 | ||||
| -rw-r--r-- | compiler/standard.ey | 4 | ||||
| -rw-r--r-- | compiler/standardClient.ey | 22 | ||||
| -rw-r--r-- | examples/working/abstract-right.ey | 2 | ||||
| -rw-r--r-- | examples/working/fold.ey | 2 | ||||
| -rw-r--r-- | examples/working/qsort.ey | 2 | ||||
| -rw-r--r-- | examples/working/reverse.ey | 2 | ||||
| -rw-r--r-- | interpreter/ElymasGlobal.pm | 2 |
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 < ".[1;31m-[33m=[32m#[34m=[35m-[0m" ==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) = @_; |
