aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDrahflow <drahflow@gmx.de>2014-03-11 16:06:17 +0100
committerDrahflow <drahflow@gmx.de>2014-03-11 16:06:17 +0100
commitcb4411da6072cccf0030e5f2c1eb4bbd57a6a14a (patch)
tree5cb9d306196654c713730b75d037ed810c80a644
parent0246040cfeb17edb0f81d09faa10c2e6457723e0 (diff)
Fixed auto-lambdiaing
-rw-r--r--compiler/standardClient.ey77
1 files changed, 39 insertions, 38 deletions
diff --git a/compiler/standardClient.ey b/compiler/standardClient.ey
index e21ffc0..1d55824 100644
--- a/compiler/standardClient.ey
+++ b/compiler/standardClient.ey
@@ -1,8 +1,8 @@
## dynamic member lookup fallback routines
{ -- 0 } "#.?" deffd
-{ "undefined member in .: " -01 cat die } "#." deffd
-{ "undefined member in .|: " -01 cat die } "#.|" deffd
-{ "undefined member in =: " -01 cat die } "#.=" deffd
+{ keys dump "undefined member in .: " -01 cat die } "#." defmd
+{ keys dump "undefined member in .|: " -01 cat die } "#.|" defmd
+{ keys dump "undefined member in =: " -01 cat die } "#.=" defmd
## regex support
# ideas taken from http://swtch.com/~rsc/regexp/regexp3.html
@@ -613,29 +613,29 @@
# Run from right (stacktop) argument to left (stacklow) argument:
# Take topmost type, check whether it can be found in other stacks (from top)
# Eliminate all matching types via function or loop creation
- { _ ==?f sys .typed .inputs ==?inputs
- [ ] ==?concreteArgs
- [ ] ==?viewPortOffset
+ { _ ==f sys .typed .inputs ==inputs
+ [ ] ==concreteArgs
+ [ ] ==viewPortOffset
# Phase 1
0 inputs len range reverse {
# print "Analyzing arg: %d"
- inputs * typeStack ==?formalTypeStack
- _ ==?c typeStack ==?concreteTypeStack
+ inputs * typeStack ==formalTypeStack
+ _ ==c typeStack ==concreteTypeStack
# "Type-Stack: %d" Dumper($concreteTypeStack) die
- 0 ==?bestViewPortSize
- concreteTypeStack len 1 add ==?bestViewPortMatch
+ 0 ==bestViewPortSize
+ concreteTypeStack len 1 add ==bestViewPortMatch
# "Formal Type Stack: @$formalTypeStack\n" print
# " Type Stack: @$concreteTypeStack\n" print
1 neg concreteTypeStack * isVariableType {
- 1 concreteTypeStack len 1 add range { ==?viewPortSize
- [ 0 viewPortSize 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
+ formalTypeStack concreteTypeStack typeMismatchCount ==viewPortMatch # FIXME this line seems fishy
viewPortMatch bestViewPortMatch lt {
viewPortSize =bestViewPortSize
viewPortMatch =bestViewPortMatch
@@ -665,11 +665,11 @@
# Phase 2,
[
- 0 viewPortOffset len range { ==?i
- i concreteArgs * typeStack ==?remaining
+ 0 viewPortOffset len range { ==i
+ i concreteArgs * typeStack ==remaining
[ 0 i viewPortOffset * range { remaining * } each ] # explicit each here
} each
- ] ==?toBeAbstractedTypes
+ ] ==toBeAbstractedTypes
# "toBeAbstractedTypes: " dump
# toBeAbstractedTypes dump
@@ -679,26 +679,26 @@
concreteArgs # _ dump
_ len dearray f
# "attempting to call function (w.o. abstraction)" dump
- 0 concreteArgs len 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
} each
*
} {
- [ ] ==?argTypes # the type stack of the new function
- [ ] ==?stageCalls # which functions to call in each stage
- [ ] ==?loops # undef for lambda abstraction, loop bound source for loops
+ [ ] ==argTypes # the type stack of the new function
+ [ ] ==stageCalls # which functions to call in each stage
+ [ ] ==loops # undef for lambda abstraction, loop bound source for loops
- 0 toBeAbstractedTypes len 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 =[]
- [ i ] ==?stageCalls2
- 1 neg ==?iterationSource
+ [ i toBeAbstractedTypes * reverse _ len dearray ==type ] reverse i toBeAbstractedTypes =[]
+ [ i ] ==stageCalls2
+ 1 neg ==iterationSource
type isIterableType { i =iterationSource } rep
- 0 i range reverse { ==?j
+ 0 i range reverse { ==j
j toBeAbstractedTypes * len not not {
0 j toBeAbstractedTypes * * type commonIterationType # -> <type> <any exists>
{ =type
@@ -730,21 +730,21 @@
# "loops: " dump
# loops dump
- { ==?loops ==?argTypes ==?stageCalls ==?concreteArgs
+ { ==loops ==argTypes ==stageCalls ==concreteArgs
stageCalls len not {
concreteArgs _ len dearray f
*
} {
- [ stageCalls _ len dearray ==?stage ] =stageCalls
- [ argTypes _ len dearray ==?argType ] =argTypes
- [ loops _ len dearray ==?loopIndex ] =loops
+ [ stageCalls _ len dearray ==stage ] =stageCalls
+ [ argTypes _ len dearray ==argType ] =argTypes
+ [ loops _ len dearray ==loopIndex ] =loops
loopIndex 0 ge {
- [ ] ==?results
- loopIndex concreteArgs * ==?loopedOver
- loopedOver getLoopStart ==?i
+ [ ] ==results
+ loopIndex concreteArgs * ==loopedOver
+ loopedOver getLoopStart ==i
{ i loopedOver isLoopEnd not } {
- [ concreteArgs _ len dearray ] ==?concreteArgsCopy
- stage { ==?j
+ [ concreteArgs _ len dearray ] ==concreteArgsCopy
+ stage { ==j
# TODO: think about a single function returning multiple values
i j concreteArgs * * j concreteArgsCopy =[]
} each
@@ -762,12 +762,13 @@
# push @$data, [\@results, ['array', '[]', [['range', 0, $#results]], [undef]]];
# FIXME the undef can be determined
} {
- { ==?v
- stage { ==?i
- v i concreteArgs * * i concreteArgs =[]
+ { ==v
+ [ concreteArgs _ len dearray ] ==concreteArgsCopy
+ stage { ==i
+ v i concreteArgs * * i concreteArgsCopy =[]
} each
- concreteArgs stageCalls argTypes loops unravel
+ concreteArgsCopy stageCalls argTypes loops unravel
} # leave this on the stack
# push @$data, [$abstraction, ['func', 'autoabstraction of ' . $f->[1]->[1], [grep { $_ } @argTypeCopy], undef]];
# FIXME the undef can be determined