Вы находитесь на странице: 1из 10

Ring Documentation, Release 1.5.

see ptrcmp(fp,fp2) + nl
see ptrcmp(fp,fp3) + nl

fclose(fp)
fclose(fp3)

Output:
1
0

65.8 ringvm_cfunctionslist() function

The Function return a list of functions written in C.


Syntax:
RingVM_CFunctionsList() ---> List

Example:
See RingVM_CFunctionsList()

65.9 ringvm_functionslist() function

The Function return a list of functions written in Ring.


Each List Member is a list contains the next items
• Function Name
• Program Counter (PC) - Function Position in Byte Code.
• Source Code File Name
• Private Flag (For Private Methods in Classes)
Syntax:
RingVM_FunctionsList() ---> List

Example:
test()

func test
see ringvm_functionslist()

Output:
test
8
B:/ring/tests/scripts/functionslist.ring
0

65.8. ringvm_cfunctionslist() function 715


Ring Documentation, Release 1.5.2

65.10 ringvm_classeslist() function

The Function return a list of Classes.


Each List Member is a list contains the next items
• Class Name
• Program Counter (PC) - Class Position in Byte Code.
• Parent Class Name
• Methods List
• Flag (Is parent class information collected)
• Pointer to the package (or NULL if no package is used)
Syntax:
RingVM_ClassesList() ---> List

Example:
see ringvm_classeslist()

class class1
func f1
class class2 from class1
class class3 from class1

Output:
class1
9

f1
13
B:/ring/tests/scripts/classeslist.ring
0
0
00000000
class2
16
class1
0
00000000
class3
20
class1
0
00000000

65.11 ringvm_packageslist() function

The Function return a list of Packages.


Each List Member is a list contains the next items
• Package Name

65.10. ringvm_classeslist() function 716


Ring Documentation, Release 1.5.2

• Classes List
Syntax:
RingVM_PackagesList() ---> List

Example:
see ringvm_packageslist()

package package1
class class1

package package2
class class1

package package3
class class1

Output:
package1
class1
11

0
00FEF838
package2
class1
17

0
00FEF978
package3
class1
23

0
00FEFF68

65.12 ringvm_memorylist() function

The Function return a list of Memory Scopes and Variables.


Each List Member is a list contains variables in a different scope.
Each Item in the scope list is a list contains the next items
• Variable Name
• Variable Type
• Variable Value
• Pointer Type (List/Item) if the value is a list
• Private Flag (if the variable is an attribute in a Class)
Syntax:

65.12. ringvm_memorylist() function 717


Ring Documentation, Release 1.5.2

RingVM_MemoryList() ---> List

Example:
x = 10
test()
func test
y = 20
see ringvm_memorylist()

Output:
true
2
1
0
0
false
2
0
0
0
nl
1

0
0
null
1

0
0
ring_gettemp_var
4
00000000
0
0
ccatcherror
1
NULL
0
0
ring_settemp_var
4
00000000
0
0
ring_tempflag_var
2
0
0
0
stdin
3
50512DB8
file
0
0

65.12. ringvm_memorylist() function 718


Ring Documentation, Release 1.5.2

0
stdout
3
50512DD8
file
0
0
0
stderr
3
50512DF8
file
0
0
0
this
4
00000000
0
0
sysargv
3
B:\ring\bin/ring
B:/ring/tests/scripts/memorylist.ring
0
0
x
2
10
0
0
y
2
20
0
0

65.13 ringvm_calllist() function

The Function return a list of the functions call list.


Each List Member is a list contains the next items
• Function Type
• Function Name
• Program Counter (PC)
• Stack Pointer (SP)
• Temp. Memory List
• Method or Function Flag
• Caller PC
• FuncExec Flag
• ListStart Flag

65.13. ringvm_calllist() function 719


Ring Documentation, Release 1.5.2

• Nested Lists Pointer


• State List
Syntax:
RingVM_CallList() ---> List

Example:
hello()
func hello
test()

func test
mylist = ringvm_calllist()
for t in mylist see t[2] + nl next

Output:
function hello() in file B:/ring/tests/scripts/calllist.ring
called from line 1
function test() in file B:/ring/tests/scripts/calllist.ring
called from line 3
ringvm_calllist

65.14 ringvm_fileslist() function

Function return a list of the Ring Files.


Syntax:
RingVM_FilesList() ---> List

Example:
load "stdlib.ring"
see ringvm_fileslist()

Output:
B:/ring/tests/scripts/fileslist.ring
B:\ring\bin\stdlib.ring
eval
stdlib.ring
stdlib.rh
stdclasses.ring
stdfunctions.ring
stdbase.ring
stdstring.ring
stdlist.ring
stdstack.ring
stdqueue.ring
stdmath.ring
stddatetime.ring
stdfile.ring
stdsystem.ring
stddebug.ring
stddatatype.ring

65.14. ringvm_fileslist() function 720


Ring Documentation, Release 1.5.2

stdconversion.ring
stdodbc.ring
stdmysql.ring
stdsecurity.ring
stdinternet.ring
stdhashtable.ring
stdtree.ring

65.15 ringvm_settrace()

The function ringvm_settrace() determine the Trace function name


The trace function is a Ring function that will be called for each event
Syntax:
RingVM_SetTrace(cCode)

65.16 ringvm_tracedata()

Inside the function that we will use for tracing events


We can use the ringvm_tracedata() function to get the event data.
The event data is a list contains the next items
• The Source Code Line Number
• The Source File Name
• The Function/Method Name
• Method or Function (Bool : True=Method, False=Function/File)
Syntax:
RingVM_TraceData() ---> aDataList

65.17 ringvm_traceevent()

Inside the function that we will use for tracing events


We can use ringvm_traceevent() to know the event type
• New Line
• Before Function
• After Function
• Runtime Error
• Before C Function
• After C Function
Syntax:

65.15. ringvm_settrace() 721


Ring Documentation, Release 1.5.2

RingVM_TraceEvent() ---> nTraceEvent

65.18 ringvm_tracefunc()

The function return the name of the function that we are using for tracing events.
Syntax:
RingVM_TraceEvent() ---> cCode

65.19 ringvm_scopescount()

We can use the RingVM_ScopesCount() function to know the number of scopes used in the application.
In the start of the program, We have the (global scope only)
When we call a function, A new scope is created.
When the function execution is done, the function scope is deleted.
Syntax:
RingVM_ScopesCount() ---> nScopes

65.20 ringvm_evalinscope()

The function ringvm_evalinscope() is similar to the eval() function


Unlike eval() which execute the code in the current scope
Using RingVM_EvalInScope() we can execute the scope in a specific scope.
Syntax:
RingVM_EvalInScope(nScope,cCode)

65.21 ringvm_passerror()

When we have runtime error, After printing the Error message, Ring will end the execution of the program.
Using ringvm_passerror() we can avoid that, and continue the execution of our program.
Syntax:
RingVM_PassError()

65.22 ringvm_hideerrormsg()

We can disable/enable displaying the runtime error messages using the RingVM_HideErrorMsg() function.
Syntax:

65.18. ringvm_tracefunc() 722


Ring Documentation, Release 1.5.2

RingVM_HideErrorMsg(lStatus)

65.23 ringvm_callfunc()

We can call a function from a string without using eval() using the ringvm_callfunc()
Syntax:
RingVM_CallFunc(cFuncName)

65.24 Example - Using the Trace Functions

The next example use the Trace Functions to trace the program Events!
In practical, We will use the Trace Library instead of these low level functions!
load "tracelib.ring"

ringvm_settrace("mytrace()")

see "Hello, world!" + nl


see "Welcome" + nl
see "How are you?" +nl
mytest()
new myclass { mymethod() }

func mytest
see "Message from mytest" + nl

func mytrace
see "====== The Trace function is Active ======" + nl +
"Trace Function Name : " + ringvm_TraceFunc() + nl +
"Trace Event : "
switch ringvm_TraceEvent()
on TRACEEVENT_NEWLINE see "New Line"
on TRACEEVENT_NEWFUNC see "New Function"
on TRACEEVENT_RETURN see "Return"
on TRACEEVENT_ERROR see "Error"
on TRACEEVENT_BEFORECFUNC see "Before C Function"
on TRACEEVENT_AFTERCFUNC see "After C Function"
off
see nl +
"Line Number : " + ringvm_tracedata()[TRACEDATA_LINENUMBER] + nl +
"File Name : " + ringvm_tracedata()[TRACEDATA_FILENAME] + nl +
"Function Name : " + ringvm_tracedata()[TRACEDATA_FUNCNAME] + nl +
"Method or Function : "
if ringvm_tracedata()[TRACEDATA_METHODORFUNC] =
TRACEDATA_METHODORFUNC_METHOD
see "Method"
else
if ringvm_tracedata()[TRACEDATA_FUNCNAME] = NULL
see "Command"
else
see "Function"

65.23. ringvm_callfunc() 723


Ring Documentation, Release 1.5.2

ok
ok
see nl + Copy("=",42) + nl

class myclass
func mymethod
see "Message from mymethod" + nl

Output:
====== The Trace function is Active ======
Trace Function Name : mytrace()
Trace Event : After C Function
Line Number : 3
File Name : test1.ring
Function Name : ringvm_settrace
Method or Function : Function
==========================================
====== The Trace function is Active ======
Trace Function Name : mytrace()
Trace Event : New Line
Line Number : 5
File Name : test1.ring
Function Name :
Method or Function : Command
==========================================
Hello, world!
====== The Trace function is Active ======
Trace Function Name : mytrace()
Trace Event : New Line
Line Number : 6
File Name : test1.ring
Function Name :
Method or Function : Command
==========================================
Welcome
====== The Trace function is Active ======
Trace Function Name : mytrace()
Trace Event : New Line
Line Number : 7
File Name : test1.ring
Function Name :
Method or Function : Command
==========================================
How are you?
====== The Trace function is Active ======
Trace Function Name : mytrace()
Trace Event : New Line
Line Number : 8
File Name : test1.ring
Function Name :
Method or Function : Command
==========================================
====== The Trace function is Active ======
Trace Function Name : mytrace()
Trace Event : New Function
Line Number : 8
File Name : test1.ring

65.24. Example - Using the Trace Functions 724

Вам также может понравиться