Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
clean-and-itasks
sapl-interpreter
Commits
17e8091e
Commit
17e8091e
authored
Feb 15, 2016
by
Laszlo Domoszlai
Browse files
everything works
parent
fd3dcfe8
Changes
22
Hide whitespace changes
Inline
Side-by-side
interpreter/code.c
View file @
17e8091e
...
...
@@ -374,18 +374,53 @@ void exec(Code* expr, int frame_ptr, int root_frame_ptr)
Thunk
**
bt
=
&
peek_a
();
(
*
bt
)
->
desc
->
eval
();
// eval follows FORWARD_PTRs
// The original fun arity if it is a slice
Desc
*
baseDesc
=
(
*
bt
)
->
desc
->
type
==
FT_SLICE
?
((
SliceEntry
*
)
(
*
bt
)
->
desc
)
->
forward_ptr
:
(
*
bt
)
->
desc
;
int
newArity
=
(
*
bt
)
->
desc
->
arity
+
expr
->
nr_args
;
int
totalArity
=
(
*
bt
)
->
desc
->
arity
+
expr
->
nr_args
;
int
usedNrArgs
=
0
;
if
(
newArity
>
baseDesc
->
arity
)
Desc
*
slice
;
while
(
totalArity
>
baseDesc
->
arity
)
{
// must be an FT_FUN
Desc
*
d
=
(
*
bt
)
->
desc
;
int
remainingNrArgs
=
totalArity
-
baseDesc
->
arity
;
slice
=
get_slice
(
baseDesc
,
baseDesc
->
arity
);
int
new_frame_ptr
=
stack_top_a
;
int
argmask
=
1
;
for
(
int
i
=
0
;
i
<
(
*
bt
)
->
desc
->
arity
;
i
++
)
{
push_a
((
*
bt
)
->
_args
[
i
]);
if
(((
FunEntry
*
)
(
slice
))
->
strictness
&
argmask
)
{
(
*
bt
)
->
_args
[
i
]
->
desc
->
eval
();
}
argmask
<<=
1
;
}
for
(
int
i
=
usedNrArgs
;
i
<
expr
->
nr_args
-
remainingNrArgs
;
i
++
)
{
arg_from_code
(
slice
,
((
AppEntry
*
)
expr
)
->
args
[
i
]);
usedNrArgs
++
;
}
// VERY important, otherwise we overwrite the original thunk with something else
set_return
(
new_frame_ptr
,
NULL
);
exec
(((
FunEntry
*
)
slice
)
->
body
,
new_frame_ptr
,
new_frame_ptr
);
totalArity
=
(
*
bt
)
->
desc
->
arity
+
expr
->
nr_args
-
usedNrArgs
;
baseDesc
=
(
*
bt
)
->
desc
->
type
==
FT_SLICE
?
((
SliceEntry
*
)
(
*
bt
)
->
desc
)
->
forward_ptr
:
(
*
bt
)
->
desc
;
}
Desc
*
slice
=
get_slice
(
baseDesc
,
newArity
);
slice
=
get_slice
(
baseDesc
,
totalArity
);
switch
(
slice
->
type
)
{
case
FT_PRIM
:
...
...
@@ -397,7 +432,7 @@ void exec(Code* expr, int frame_ptr, int root_frame_ptr)
int
argmask
=
1
<<
(
*
bt
)
->
desc
->
arity
;
for
(
int
i
=
0
;
i
<
expr
->
nr_args
;
i
++
)
{
for
(
int
i
=
usedNrArgs
;
i
<
expr
->
nr_args
;
i
++
)
{
if
(((
PrimEntry
*
)
slice
)
->
boxingMap
&
argmask
)
{
...
...
@@ -436,8 +471,8 @@ void exec(Code* expr, int frame_ptr, int root_frame_ptr)
}
argmask
<<=
1
;
}
for
(
int
i
=
0
;
i
<
expr
->
nr_args
;
i
++
)
{
for
(
int
i
=
usedNrArgs
;
i
<
expr
->
nr_args
;
i
++
)
{
arg_from_code
(
slice
,
((
AppEntry
*
)
expr
)
->
args
[
i
]);
}
...
...
@@ -472,7 +507,7 @@ void exec(Code* expr, int frame_ptr, int root_frame_ptr)
memcpy
(
&
thunk
->
_args
,
&
(
*
bt
)
->
_args
,
sizeof
(
Thunk
*
)
*
(
*
bt
)
->
desc
->
arity
);
for
(
int
i
=
0
;
i
<
expr
->
nr_args
;
i
++
)
{
for
(
int
i
=
usedNrArgs
;
i
<
expr
->
nr_args
;
i
++
)
{
((
AppEntry
*
)
expr
)
->
args
[
i
]
->
create_thunk
(((
AppEntry
*
)
expr
)
->
args
[
i
],
&
thunk
->
_args
[(
*
bt
)
->
desc
->
arity
+
i
],
frame_ptr
);
}
...
...
@@ -803,7 +838,7 @@ void eval_fun()
Thunk
*
thunk
=
peek_a
();
int
frame_ptr
=
stack_top_a
;
int
argmask
=
1
;
for
(
int
i
=
0
;
i
<
thunk
->
desc
->
arity
;
i
++
)
{
push_a
(
thunk
->
_args
[
i
]);
...
...
tests/Clausify.exp
0 → 100644
View file @
17e8091e
[0]
\ No newline at end of file
tests/
postponed/
Clausify.sapl
→
tests/Clausify.sapl
View file @
17e8091e
File moved
tests/Clean/Parselib.prj
0 → 100644
View file @
17e8091e
Version: 1.4
Global
ProjectRoot: .
Target: iTasks
Exec: {Project}\Parselib.exe
CodeGen
CheckStacks: False
CheckIndexes: True
Application
HeapSize: 20971520
StackSize: 512000
ExtraMemory: 81920
IntialHeapSize: 204800
HeapSizeMultiplier: 4096
ShowExecutionTime: True
ShowGC: False
ShowStackSize: False
MarkingCollector: False
StandardRuntimeEnv: True
Profile
Memory: False
MemoryMinimumHeapSize: 0
Time: False
Stack: False
Output
Output: ShowConstructors
Font: Courier
FontSize: 9
WriteStdErr: False
Link
LinkMethod: Static
GenerateRelocations: False
GenerateLinkMap: False
LinkResources: False
ResourceSource:
GenerateDLL: False
ExportedNames:
Paths
Path: {Project}
Precompile:
Postlink:
MainModule
Name: Parselib
Dir: {Project}
Compiler
NeverMemoryProfile: False
NeverTimeProfile: False
StrictnessAnalysis: True
ListTypes: StrictExportTypes
ListAttributes: True
Warnings: True
Verbose: True
ReadableABC: False
ReuseUniqueNodes: True
Fusion: False
OtherModules
Module
Name: StdArray
Dir: {Application}\Libraries\StdEnv
Compiler
NeverMemoryProfile: False
NeverTimeProfile: False
StrictnessAnalysis: True
ListTypes: StrictExportTypes
ListAttributes: True
Warnings: True
Verbose: True
ReadableABC: False
ReuseUniqueNodes: True
Fusion: False
Module
Name: StdBool
Dir: {Application}\Libraries\StdEnv
Compiler
NeverMemoryProfile: False
NeverTimeProfile: False
StrictnessAnalysis: True
ListTypes: StrictExportTypes
ListAttributes: True
Warnings: True
Verbose: True
ReadableABC: False
ReuseUniqueNodes: True
Fusion: False
Module
Name: StdChar
Dir: {Application}\Libraries\StdEnv
Compiler
NeverMemoryProfile: False
NeverTimeProfile: False
StrictnessAnalysis: True
ListTypes: StrictExportTypes
ListAttributes: True
Warnings: True
Verbose: True
ReadableABC: False
ReuseUniqueNodes: True
Fusion: False
Module
Name: StdCharList
Dir: {Application}\Libraries\StdEnv
Compiler
NeverMemoryProfile: False
NeverTimeProfile: False
StrictnessAnalysis: True
ListTypes: StrictExportTypes
ListAttributes: True
Warnings: True
Verbose: True
ReadableABC: False
ReuseUniqueNodes: True
Fusion: False
Module
Name: StdClass
Dir: {Application}\Libraries\StdEnv
Compiler
NeverMemoryProfile: False
NeverTimeProfile: False
StrictnessAnalysis: True
ListTypes: StrictExportTypes
ListAttributes: True
Warnings: True
Verbose: True
ReadableABC: False
ReuseUniqueNodes: True
Fusion: False
Module
Name: StdEnum
Dir: {Application}\Libraries\StdEnv
Compiler
NeverMemoryProfile: False
NeverTimeProfile: False
StrictnessAnalysis: True
ListTypes: StrictExportTypes
ListAttributes: True
Warnings: True
Verbose: True
ReadableABC: False
ReuseUniqueNodes: True
Fusion: False
Module
Name: StdEnv
Dir: {Application}\Libraries\StdEnv
Compiler
NeverMemoryProfile: False
NeverTimeProfile: False
StrictnessAnalysis: True
ListTypes: StrictExportTypes
ListAttributes: True
Warnings: True
Verbose: True
ReadableABC: False
ReuseUniqueNodes: True
Fusion: False
Module
Name: StdFile
Dir: {Application}\Libraries\StdEnv
Compiler
NeverMemoryProfile: False
NeverTimeProfile: False
StrictnessAnalysis: True
ListTypes: StrictExportTypes
ListAttributes: True
Warnings: True
Verbose: True
ReadableABC: False
ReuseUniqueNodes: True
Fusion: False
Module
Name: StdFunc
Dir: {Application}\Libraries\StdEnv
Compiler
NeverMemoryProfile: False
NeverTimeProfile: False
StrictnessAnalysis: True
ListTypes: StrictExportTypes
ListAttributes: True
Warnings: True
Verbose: True
ReadableABC: False
ReuseUniqueNodes: True
Fusion: False
Module
Name: StdInt
Dir: {Application}\Libraries\StdEnv
Compiler
NeverMemoryProfile: False
NeverTimeProfile: False
StrictnessAnalysis: True
ListTypes: StrictExportTypes
ListAttributes: True
Warnings: True
Verbose: True
ReadableABC: False
ReuseUniqueNodes: True
Fusion: False
Module
Name: StdList
Dir: {Application}\Libraries\StdEnv
Compiler
NeverMemoryProfile: False
NeverTimeProfile: False
StrictnessAnalysis: True
ListTypes: StrictExportTypes
ListAttributes: True
Warnings: True
Verbose: True
ReadableABC: False
ReuseUniqueNodes: True
Fusion: False
Module
Name: StdMisc
Dir: {Application}\Libraries\StdEnv
Compiler
NeverMemoryProfile: False
NeverTimeProfile: False
StrictnessAnalysis: True
ListTypes: StrictExportTypes
ListAttributes: True
Warnings: True
Verbose: True
ReadableABC: False
ReuseUniqueNodes: True
Fusion: False
Module
Name: StdOrdList
Dir: {Application}\Libraries\StdEnv
Compiler
NeverMemoryProfile: False
NeverTimeProfile: False
StrictnessAnalysis: True
ListTypes: StrictExportTypes
ListAttributes: True
Warnings: True
Verbose: True
ReadableABC: False
ReuseUniqueNodes: True
Fusion: False
Module
Name: StdOverloaded
Dir: {Application}\Libraries\StdEnv
Compiler
NeverMemoryProfile: False
NeverTimeProfile: False
StrictnessAnalysis: True
ListTypes: StrictExportTypes
ListAttributes: True
Warnings: True
Verbose: True
ReadableABC: False
ReuseUniqueNodes: True
Fusion: False
Module
Name: StdReal
Dir: {Application}\Libraries\StdEnv
Compiler
NeverMemoryProfile: False
NeverTimeProfile: False
StrictnessAnalysis: True
ListTypes: StrictExportTypes
ListAttributes: True
Warnings: True
Verbose: True
ReadableABC: False
ReuseUniqueNodes: True
Fusion: False
Module
Name: StdString
Dir: {Application}\Libraries\StdEnv
Compiler
NeverMemoryProfile: False
NeverTimeProfile: False
StrictnessAnalysis: True
ListTypes: StrictExportTypes
ListAttributes: True
Warnings: True
Verbose: True
ReadableABC: False
ReuseUniqueNodes: True
Fusion: False
Module
Name: StdTuple
Dir: {Application}\Libraries\StdEnv
Compiler
NeverMemoryProfile: False
NeverTimeProfile: False
StrictnessAnalysis: True
ListTypes: StrictExportTypes
ListAttributes: True
Warnings: True
Verbose: True
ReadableABC: False
ReuseUniqueNodes: True
Fusion: False
Module
Name: _SystemArray
Dir: {Application}\Libraries\StdEnv
Compiler
NeverMemoryProfile: False
NeverTimeProfile: False
StrictnessAnalysis: True
ListTypes: StrictExportTypes
ListAttributes: True
Warnings: True
Verbose: True
ReadableABC: False
ReuseUniqueNodes: True
Fusion: False
Module
Name: _SystemEnum
Dir: {Application}\Libraries\StdEnv
Compiler
NeverMemoryProfile: False
NeverTimeProfile: False
StrictnessAnalysis: True
ListTypes: StrictExportTypes
ListAttributes: True
Warnings: True
Verbose: True
ReadableABC: False
ReuseUniqueNodes: True
Fusion: False
Module
Name: _SystemDynamic
Dir: {Application}\iTasks-SDK\Patches\Dynamics
Compiler
NeverMemoryProfile: False
NeverTimeProfile: False
StrictnessAnalysis: True
ListTypes: StrictExportTypes
ListAttributes: True
Warnings: True
Verbose: True
ReadableABC: False
ReuseUniqueNodes: True
Fusion: False
tests/Clean/lettests.icl
0 → 100644
View file @
17e8091e
module
lettests
import
StdEnv
test1
=
let
y
=
1+2
z
=
4+6
in
y
+
z
test2
x
y
=
let
r
=
3
s
=
6
in
r
*
x
+
s
*
y
test3
x
y
=
let
r
=
3
*
x
s
=
6
*
y
in
r
+
s
test4
x
y
=
let
r
=
3
*
x
s
=
6
*
y
*
r
t
=
2
*
s
in
r
+
s
+
t
test5
=
let
x
=
[
1
:
x
]
in
x
test6
=
let
x
=
[
1
:
y
]
y
=
[
2
:
x
]
in
x
//Start = test2 2 4
//Start = test3 2 4
//Start = test4 2 4
Start
=
take
5
test6
tests/Clean/lettests.prj
0 → 100644
View file @
17e8091e
Version: 1.4
Global
ProjectRoot: .
Target: iTasks
Exec: {Project}\lettests.exe
CodeGen
CheckStacks: False
CheckIndexes: True
Application
HeapSize: 2097152
StackSize: 512000
ExtraMemory: 81920
IntialHeapSize: 204800
HeapSizeMultiplier: 4096
ShowExecutionTime: False
ShowGC: False
ShowStackSize: False
MarkingCollector: False
StandardRuntimeEnv: True
Profile
Memory: False
MemoryMinimumHeapSize: 0
Time: False
Stack: False
Output
Output: ShowConstructors
Font: Courier
FontSize: 9
WriteStdErr: False
Link
LinkMethod: Static
GenerateRelocations: False
GenerateLinkMap: False
LinkResources: False
ResourceSource:
GenerateDLL: False
ExportedNames:
Paths
Path: {Project}
Precompile:
Postlink:
MainModule
Name: lettests
Dir: {Project}
Compiler
NeverMemoryProfile: False
NeverTimeProfile: False
StrictnessAnalysis: True
ListTypes: StrictExportTypes
ListAttributes: True
Warnings: True
Verbose: True
ReadableABC: False
ReuseUniqueNodes: True
Fusion: False
OtherModules
Module
Name: StdArray
Dir: {Application}\Libraries\StdEnv
Compiler
NeverMemoryProfile: False
NeverTimeProfile: False
StrictnessAnalysis: True
ListTypes: StrictExportTypes
ListAttributes: True
Warnings: True
Verbose: True
ReadableABC: False
ReuseUniqueNodes: True
Fusion: False
Module
Name: StdBool
Dir: {Application}\Libraries\StdEnv
Compiler
NeverMemoryProfile: False
NeverTimeProfile: False
StrictnessAnalysis: True
ListTypes: StrictExportTypes
ListAttributes: True
Warnings: True
Verbose: True
ReadableABC: False
ReuseUniqueNodes: True
Fusion: False
Module
Name: StdChar
Dir: {Application}\Libraries\StdEnv
Compiler
NeverMemoryProfile: False
NeverTimeProfile: False
StrictnessAnalysis: True
ListTypes: StrictExportTypes
ListAttributes: True
Warnings: True
Verbose: True
ReadableABC: False
ReuseUniqueNodes: True
Fusion: False
Module
Name: StdCharList
Dir: {Application}\Libraries\StdEnv
Compiler
NeverMemoryProfile: False
NeverTimeProfile: False
StrictnessAnalysis: True
ListTypes: StrictExportTypes
ListAttributes: True
Warnings: True
Verbose: True
ReadableABC: False
ReuseUniqueNodes: True
Fusion: False
Module
Name: StdClass
Dir: {Application}\Libraries\StdEnv
Compiler
NeverMemoryProfile: False
NeverTimeProfile: False
StrictnessAnalysis: True
ListTypes: StrictExportTypes
ListAttributes: True
Warnings: True
Verbose: True
ReadableABC: False
ReuseUniqueNodes: True
Fusion: False
Module
Name: StdEnum
Dir: {Application}\Libraries\StdEnv
Compiler
NeverMemoryProfile: False
NeverTimeProfile: False
StrictnessAnalysis: True
ListTypes: StrictExportTypes
ListAttributes: True
Warnings: True
Verbose: True
ReadableABC: False
ReuseUniqueNodes: True
Fusion: False
Module
Name: StdEnv
Dir: {Application}\Libraries\StdEnv
Compiler
NeverMemoryProfile: False
NeverTimeProfile: False
StrictnessAnalysis: True
ListTypes: StrictExportTypes
ListAttributes: True
Warnings: True
Verbose: True
ReadableABC: False
ReuseUniqueNodes: True
Fusion: False
Module
Name: StdFile
Dir: {Application}\Libraries\StdEnv
Compiler
NeverMemoryProfile: False
NeverTimeProfile: False
StrictnessAnalysis: True
ListTypes: StrictExportTypes
ListAttributes: True
Warnings: True
Verbose: True
ReadableABC: False
ReuseUniqueNodes: True
Fusion: False
Module
Name: StdFunc
Dir: {Application}\Libraries\StdEnv
Compiler
NeverMemoryProfile: False
NeverTimeProfile: False
StrictnessAnalysis: True
ListTypes: StrictExportTypes
ListAttributes: True